- Magga: PLEX: multimédia az egész lakásban
- Brogyi: CTEK akkumulátor töltő és másolatai
- Pajac: tpm.msc
- M0ng00se: Hardvert áruhitelre?
- Steven: Sokat utazó kávéfüggők ide!
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- sziku69: Fűzzük össze a szavakat :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Lalikiraly: SÜNI energiaital.
- Luck Dragon: Asszociációs játék. :)
Új hozzászólás Aktív témák
-
biker
nagyúr
válasz
Tele von Zsinór #6598 üzenetére
gondolkodtam rajta, de arra jutottam, a concat csak meglévő, lekérdezett mezőkkel dolgozik
és nem is foglalkoztam vele tovább.
-
biker
nagyúr
mysql-ben hogy tudok cellához hozzáadni extra szöveget?
bizonyos elemekhez leíráshoz extra szöveget adnék hozzáUPDATE `webshop_termekek_backup` SET termek_nev=termek_nev.'uj extra text' WHERE termek_ID='66664'
valahogy így, de összefűzés pontra nem ok, +-ra összead
&-et nem ismeri...
-
Speeedfire
félisten
válasz
Sk8erPeter #6564 üzenetére
Mindig tanítasz engem mester.
-
Alukard
senior tag
válasz
Tele von Zsinór #6594 üzenetére
Köszi
Ez a változat eszembe sem jutott
Így a meglévő 3 táblámat, helyenként +1 oszloppal hasznosítani is tudom
-
Alukard
senior tag
Lenne megint egy csúnya kérdésem...
Létre kéne hoznom, egy relációs adatbázist... persze ebben nincs semmi extra, a fűszer csak most jön...
3 dolgot kell összehoznom, egy X azonosítót több Y azonosítóval és több Z azonosítóval.
Csak azt nem tudom, hogy hogyan csináljam...
Mert, hogy egy X mellé annyi Y, Z oszlopot hozzak létre amennyi optimálisan elég lenne és nézzem, hogy épp mi a helyzet vele és hol jár annyira nem megoldható...
Láttam olyan megoldást ami egy írásjel mentén szétdobja az értékeket, ez még használható is lenne, ezzel kapcsolatban csak az a kérdésem lenne, hogy hogy lehetne megoldani?Olvastassam be a táblát, nézzem meg, hogy az adott sor adott oszlopának mi a tartalma és irassam hozzá? Vagy esetleg van egyszerűbb megoldás is?
-
RedSign
tag
válasz
Sk8erPeter #6591 üzenetére
Értem, köszi.
-
Sk8erPeter
nagyúr
válasz
RedSign #6590 üzenetére
Pont az imént volt szó róla.
>> [link]
kiegészítem, van még pl. a TIME() függvény is MySQL-ben, ami a konkrét időt szedi ki a time-ból vagy datetime-ból, a linken látható formában.
De itt találsz még rengeteg átalakító függvényt.
Érdemes már MySQL-ben átalakítva lekérdezni az eredményt, így annál kevesebbet kell majd átalakítgatni PHP-ból (persze úgy is lehet, de minek, ha megkaphatod nagyon gyorsan MySQL-ből is az eredményt formázva). -
RedSign
tag
válasz
Sk8erPeter #6589 üzenetére
Igen teljesen igazad van, ezekkel a megoldásokkal valóban rövidül, amire én gondoltam, hogy a timestamp értékét kiolvasásnál és megjelenítésnél azonban vissza kell alakítani...
(vagy van erre valami más megoldás?)
-
Sk8erPeter
nagyúr
válasz
RedSign #6588 üzenetére
"lehet, hogy PHP-ben pár karakterrel hosszabb a kód"
Már miért lenne hosszabb?
Pont azt mondtam, hogy így nyugodtan kihagyható az UPDATE esetén a kódból, hogy foglalkozz egyáltalán a dátum beállításával, vagyis PHP-oldalról nem kell lekérdezni az aktuális dátumot (pl. a date() függvény használatával), és ezt átadni az SQL-utasításnak - valamint SQL-ben sem kell mindig explicite odaírni a ´timestamp´=NOW() (ha ´timestamp´-nek nevezted el a mezőt) kódrészletet.
Magyarul így pont, hogy rövidül a kód (PHP-ben, SQL-ben sem foglalkozol a dátumbeállítgatással), ráadásul nem is felejted el beállítani a módosulást az időpontban, ha a default érték mindig az aktuális időpont. -
RedSign
tag
válasz
Sk8erPeter #6586 üzenetére
Szerintem is a TS formátum sokkal hasznosabb és kezelhetőbb...
...lehet, hogy PHP-ben pár karakterrel hosszabb a kód, de megéri.
-
klinnsy
csendes tag
válasz
Sk8erPeter #6579 üzenetére
MEGOLDÁS:
if ($answer < count($ANSWER) && $vote) {
csere ERRE:
// if ($answer < count($ANSWER) && $vote) {
if ($answer < count($ANSWER) && ($vote || $vote_x)) { -
Sk8erPeter
nagyúr
válasz
Alukard #6585 üzenetére
Ha már újratervezés, érdemes lehet megfontolni, hogy TIMESTAMP formában tárold az időpontot, az elég jól átlátható, könnyen kibányászható belőle az időpont (év-hónap-nap óra:perc:másodperc), meg beállítható úgy, hogy automatikusan frissüljön az aktuális időpontnak megfelelően, MySQL-nél:
CREATE TABLE `teszt_tabla` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`valami` VARCHAR( 256 ) NOT NULL DEFAULT 'blabla',
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_hungarian_ci;Vagy ha UPDATE-nél a `timestamp` = NOW() kódrészletet rakod bele a query-be (de mivel a fenti mutatott táblában a default a jelenlegi idő, ki is hagyható teljesen a kódból a timestamp beállítása).
Így talán egyszerűbb és átláthatóbb lehet a kódod, és ha nem PHP-ből kéred le az időt, hanem MySQL-ből, az nem valószínű, hogy túl sokáig foglalná az adatbázis esetleg korlátozott erőforrásait.Én mostanában legalábbis már így csinálom, gondolom mindkét gyakorlatra lehetne érveket felhozni. De a fentivel legalább semmiképp nem ronthatod el az időformátumot, meg nem kell babrálni annak a mezőnek a beállításával.
-
-
cucka
addikt
válasz
Alukard #6582 üzenetére
Valahogy így:
select *, date(annDate) as ujmezoneve from ...Itt a date() függvény van, ami visszaadja a dátumot szabványos formátumban (Y-m-d). Ha valamilyen egyéni formátumban szeretnéd, akkor date() helyett használd a korábban mutatott date_format() függvényt.
(Egyébként a tábláidat miért nevezgeted át a, b és c-nek? Sok értelme nincs, azon túl, hogy átláthatalanabb lesz tőle a lekérdezésed.) -
cucka
addikt
válasz
Alukard #6580 üzenetére
Például így:
select date_format(datum_mezo_neve, "%m") from tabla_neve;A fenti lekérdezés a hónapot fogja kiszedni a dátumból. A date_format dokumentációjában megtalálod az összes lehetséges értéket, amit a format string-be írhatsz. (A format string aza "%m" jelen esetben)
-
Alukard
senior tag
Újabb kérdés... keresgéltem, de nem igazán találtam rá megoldást...
Van egy SQL táblám, abban van egy DATETIME oszlop amibe eredeliteg egy date('YmdHis') függvénnyel kerül feltöltésre...
A kérdés az, hogy ebből hogy szerezhetem vissza külön az évet/hónapot/napot/... -
Sk8erPeter
nagyúr
válasz
klinnsy #6575 üzenetére
Példa a kód utólagos formázására:
http://beta.phpformatter.com/
>> Format >> Copy to Clipboard
http://pastebin.com
>> Syntax Highlighting: PHP
>> Submit
>> Eredmény: [link]Mondjuk ez nem változtat a tényen, hogy ocsmány a kód.
A lényeget Tele von Zsinór kolléga leírta. -
Tele von Zsinór
őstag
válasz
klinnsy #6575 üzenetére
Első ránézésre mondom, hogy ez régi és rosszul megírt kód. A $HTTP_{GET,POST}_VARS változók még a nagyon régi időkben működtek, kompatibilitási okokból 5.2-ben még lehetett engedélyezni a létrehozásuk, 5.3-ban nem tudom, léteznek-e egyáltalán. Ezek extractolása csak súlyosbítja a dolgot. A file írás-olvasás miatt meg csúnya deadlockba futhat a kód, vagy az egyik process felülírhatja a másik változtatásait.
Ahogy fentebb a kollega úr mondja, az a minimum, hogy formázott kódot postolsz ide, de ekkorát már inkább külső oldalra (mondjuk pastebin.com) és linkeld - ott még syntax highlight is van.
Gyorssegítségként a hosszú változók engedélyezése esetleg megoldja a gondod, de jobban jársz, ha újraírod.
-
Sk8erPeter
nagyúr
válasz
klinnsy #6575 üzenetére
Jó, hát akkor használd a Programkód gombot (többek közt itt is leírtam, hogyan kell) a kódod kijelölése után, mert ilyen formázatlan, indentálatlan kódot kétlem, hogy bárki át fog nyálazni itt a topicban (hacsak nem rakja be mondjuk NetBeans-be vagy dobja be PHPBeautifierbe, stb, és autoformáz), én legalábbis biztosan nem. De persze előfordulhat, hogy valaki mégis veszi a fáradságot, de előbb inkább te tedd meg ugyanezt a kód megfelelő formázására.
Meg nem ártana, ha leírnád, te milyen körülmények közt próbáltad, mert a "Már néztem több gépről, nekem nem működött, mi lehet a baj?" mondatrészből számomra legalábbis nem derül ki.(Pl. egyáltalán működő webszerverrel próbáltad-e, te mit tapasztaltál, nálad mi történt, egyáltalán lefutott-e a PHP-kód, és így tovább...)
Szerk.: csak belenézve a kódodba, számomra elég durván fájó kódrészletek vannak, pl. csak ez szúrt szemet:
echo "<tr><th><font color=ffffff size=2><div align=center>Válaszok</th><th><font color=ffffff size=2><div align=center>Szavazatok aránya</th><th><font color=ffffff size=2><div align=center>Szavazatok száma</th></tr>";
Eleve a <font> tag használata nagyon nem ajánlott ma már (CSS), na meg az attribútumok esetén eléggé ajánlott az idézőjelek használata, pl. align=center helyett align="center", de még jobb, inkább ezt az align attribútumot ne is használd. -
klinnsy
csendes tag
Viszonylag fontos lenne, elnézést ha nem jó helyre írtam.. .
-
klinnsy
csendes tag
Php kód értetlen módon nem jó!
Sziasztok a problémám a következő lapon (is) megtalálható (régebben jó volt most hirtelen nem műxik):
http://nicelife.hu/tanuljunk/szemtipus/05.php
Az a gondom, hogy régebben működött ez a script, ahol szavazni lehet, most pedig a szavaz gomb után ugyanúgy csinálja mintha jó lenne, de a szavazás értékét nem adja hozzá a txt file-hoz.
Az az érdekes (és most jön a poén), hogy másnál pedig működik, mert kipróbálta ismerősöm, illetve látom, hogy töb szavazat is érkezik egy nap.Itt a szavaz.php forráskódja, a többi adatot (kérdés, válaszok, ip, szavazatok 1-1 txt-ben tárolja melyek igen 777 attr-al vannak ellátva).
Már néztem több gépről, nekem nem működött, mi lehet a baj?
EZ TELJESEN LOGIKÁTLAN HIBA! AKI MEGOLDJA AZ ULTRAÁSZ! Köszönöm!
<?php
$ip = getenv(REMOTE_ADDR);
$RESULT_FILE_NAME = "../../scripts/szavaz/hirek/halottidezes/szavazatok.txt";
$que = "../../scripts/szavaz/hirek/halottidezes/kerdes.txt";
$ans = "../../scripts/szavaz/hirek/halottidezes/valaszok.txt";
$fn = fopen ($que, "r");
$puff = fread ($fn, filesize($que));
fclose ($fn);
$QUESTION = "$puff";
$lis= 0;
$plsr = file("../../scripts/szavaz/hirek/halottidezes/valaszok.txt");
for($x=0;$x<sizeof($plsr);$x++) {
$temp = explode("|",$plsr[$x]);
$list[$lis] = $temp[0];
$lis++;
}
$ANSWER = $list;
extract($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
$fname="ip_log.dat";
if (strlen($answer)<=0&&!$vresult){
echo "<FORM METHOD=\"POST\">\n";echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";
echo "<TR><TH><font color=ffffff size=2>$QUESTION</TH></TR>\n";
while (list($key, $val) = each($ANSWER)) {
echo "<TR><TD align=\"left\"><INPUT TYPE=\"radio\" NAME=\"answer\" VALUE=\"$key\"><font color=8d9aa6 size=2> $val</TD></TR>\n";}
echo "<TR><TD align=\"center\"><INPUT TYPE=\"image\" src='http://www.nicelife.hu/scripts/szavaz/szavaz.png' NAME=\"vote\" VALUE=\" Szavazok \"></TD></TR>\n";
echo "<TR><TD align=\"center\"></form><form method=post><input type=hidden name=vresult value=1><INPUT TYPE=\"image\" src='http://www.nicelife.hu/scripts/szavaz/eredmenyek.png' NAME=\"result\" VALUE=\"Eredmények\">\n";
echo "</TABLE></form>";
}if (strlen($answer)>0) {
$plsr = file("../../scripts/szavaz/hirek/halottidezes/ip.txt");
for($x=0;$x<sizeof($plsr);$x++) {
$temp = explode("|",$plsr[$x]);
}
if($ip==$temp[0] && strlen($answer)>0 ){
echo "<font color=red size=2><div align=center>Erre a kérdésre egyszer már válaszoltál!</div></font>";
$file_array = file($RESULT_FILE_NAME);
if ($answer < count($ANSWER) && $vote) {
while (list($key, $val) = each($file_array)) {
$total += $val;
}echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";
echo "<tr><th><font color=ffffff size=2><div align=center>Válaszok</th><th><font color=ffffff size=2><div align=center>Szavazatok aránya</th><th><font color=ffffff size=2><div align=center>Szavazatok száma</th></tr>";while (list($key, $val) = each($ANSWER)){
$percent = $file_array[$key] * 100 / $total;
$percent_int = floor($percent);
$percent_float = number_format($percent, 1);
$tp += $percent_float;
if($percent_int>=75){
$color="#45abe5";
}
elseif($percent_int>=50){
$color="#388dbe";
}
elseif($percent_int>=25){
$color="#2d729a";
}
elseif($percent_int<25){
$color="#215370";
}echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>
<tr>
<td bgcolor=$color width=$percent_int% height=10 style=border:0 >
<spacer type=block width=2 height=8>
</td>
<td bgcolor=white width=91% height=10 style=border:0>
<font color=8d9aa6 size=2>
<spacer type=block width=2 height=8>
</td>
</tr>
</table>
</td>
</tr>
</table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";
}$tv=$total;
echo "<td></td><td></td><td><font color=67727c size=2><div align=left><center>Összesen: $tv</font></font></font></td></TABLE>";
}
}elseif (strlen($answer)>0 && $ip!=$temp[0]){
$file_array = file($RESULT_FILE_NAME);
if ($answer < count($ANSWER) && $vote) {
$old_answer = $file_array[$answer];
$old_answer = preg_replace("/\n\r*/", "", $old_answer);
$file_array[$answer] = ($old_answer + 1)."\n";
$fname="../../scripts/szavaz/hirek/halottidezes/ip.txt";
$fq = fopen($fname, "a++");
fwrite ($fq, $ip);
fwrite ($fq, "|");
fwrite ($fq, "\n");
fclose ($fq);
$file = join('', $file_array);
$fp = fopen("$RESULT_FILE_NAME", "w");
flock($fp, 1);
fputs($fp, $file);
flock($fp, 3);
fclose($fp);
echo "<div align=center><font color=67727c size=2>Szavazat elfogadva... </div>";
}
while (list($key, $val) = each($file_array)) {
$total += $val;
}echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";
echo "<tr><th><font color=ffffff size=2>Válasz lehetőségek</th><th><font color=ffffff size=2>Válaszok aránya</th><th><font color=ffffff size=2><div align=center>Szavazatok száma</th></tr>";while (list($key, $val) = each($ANSWER)){
$percent = $file_array[$key] * 100 / $total;
$percent_int = floor($percent);
$percent_float = number_format($percent, 1);
$tp += $percent_float;
if($percent_int>=75){
$color="#45abe5";
}
elseif($percent_int>=50){
$color="#388dbe";
}
elseif($percent_int>=25){
$color="#2d729a";
}
elseif($percent_int<25){
$color="#215370";
}echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>
<tr>
<td bgcolor=$color width=$percent_int% height=10 style=border:0>
<spacer type=block width=2 height=8>
</td>
<td bgcolor=white width=91% height=10 style=border:0>
<spacer type=block width=2 height=8>
</td>
</tr>
</table>
</td>
</tr>
</table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";}
$tv=$total;
echo "<td></td><td></td><td><font color=67727c size=2><center>Összesen: $tv</font></font></font></td></TABLE>";
}
else {
echo "Kérlek válassz előbb";
}
}
if (!empty ($vresult)){
$file_array = file($RESULT_FILE_NAME);
while (list($key, $val) = each($file_array)) {
$total += $val;
}echo "<TABLE align=center border=0 borderColor=#D9F2CC cellPadding=2 class=normaltext style=\" BORDER-COLLAPSE: collapse; \">\n";
echo "<tr><th><font color=ffffff size=2>Válasz lehetőségek</th><th><font color=ffffff size=2>Válaszok aránya</th><th><font color=ffffff size=2>Szavazatok száma</th></tr>";while (list($key, $val) = each($ANSWER)){
$percent = $file_array[$key] * 100 / $total;
$percent_int = floor($percent);
$percent_float = number_format($percent, 1);
$tp += $percent_float;
if($percent_int>=75){
$color="#45abe5";
}
elseif($percent_int>=50){
$color="#388dbe";
}
elseif($percent_int>=25){
$color="#2d729a";
}
elseif($percent_int<25){
$color="#215370";
}echo "<tr><td><font color=8d9aa6 size=2> $ANSWER[$key] </td><td><table cellpadding=1 cellspacing=0 width=100% border=0 bgcolor=black><tr><td><table cellpadding=0 cellspacing=0 border=0 width=100%>
<tr>
<td bgcolor=$color width=$percent_int% height=10 style=border:0 >
<spacer type=block width=2 height=8>
</td>
<td bgcolor=white width=91% height=10 style=border:0 >
<spacer type=block width=2 height=8>
</td>
</tr>
</table>
</td>
</tr>
</table><font color=67727c size=2>$percent_float%</td><td><font color=8d9aa6 size=2><center>$file_array[$key]</td></tr>";}
$tv=$total;
echo "<td></td><td></td><td><font color=67727c size=2><center>Összes szavazat: $tv</td></TABLE>";
}?>
h -
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6573 üzenetére
Az lesz.
Csak egy kis idő kellene hozzá.
Mondjuk egyelőre élvezem azt, hogy mindent megírok magamtól, aztán majd úgyis jól rájövök a komolyabb keretrendszerek használatakor, hogy nem biztos, hogy sok értelme van mindent ab ovo megírni, ha már más úgyis megtette helyettem, mert akkor nekem csak a megfelelő függvényeket kell jól hívogatnom, és a megfelelő módosításokat elvégezni, aztán gyorsabban kész vagyok.
Igen, én sem úgy értettem, hogy MVC-t csak OOP-szemlélettel lehet írni (ezért is csak azt írtam, hogy "eléggé megkönnyíti a munkát az MVC-nél"), de szerintem procedurálisan megírva azért sokkal önszívatósabb, nehezebb átlátni.
Mondjuk nem véletlenül találták ki az OOP-t, ha már hasonlít az emberi gondolkodás működéséhez, használjuk is ki. -
Tele von Zsinór
őstag
válasz
Sk8erPeter #6572 üzenetére
Valóban, a jelenség fennáll, problémának azért mégsem nevezném. Azaz inkább a környezettől függ, hogy az-e.
El lehet választani az OOP-ot és az MVC-t, lehet jól működő MVC oldalt írni procedurális kóddal is, de objektumorientáltan egyszerűbb, és nagyban könnyíti a későbbi karbantartást, bővítést is.
Ajánlom pár komolyabb keretrendszerrel való ismerkedést - rengeteget tanultam például a symfony kódját böngészve, de nézegettem a cakephp és a kohana kódját is.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6571 üzenetére
Sejtettem, hogy ilyesmi, meg értem én az MVC-szemléletet nagyjából, csak azt hittem, hogy nálad mégsem fordul elő az említett F5-ös frissítgetős probléma, és az nem állt össze, hogy hogyan lehet, ha nem redirectelgetsz minden esetben.
(de ezek szerint a probléma fennáll)
Szerintem az én koncepcióm sem mond amúgy ellent az MVC-szemléletnek.Mostanság igyekszem én is nagyjából errefelé tendálni, meg teljesen OOP-szemléletre átállni, ami szerintem eléggé megkönnyíti a munkát az MVC-nél (én legalábbis nehezen tudom igazán elválasztani tőle), bár még bőven van mit tanulnom.
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6570 üzenetére
Van egy file, aminek postol a form (ez a controller), és van egy template, amit meg majd a user lát (ez a view). Ha a kérés get, akkor rögtön megy a view-hez a futtatás, semmi extra nem történik. Ha a kérés post, akkor is ugyanez a file kapja, de formfeldolgozás is történik. Ha invalid, vissza a viewhez (és ha ekkor F5-öl, megjelenik az általad említett újraküldős kérés), ha valid, akkor pedig feldolgozás és redirect.
A form minden mezője úgy van elnevezve, hogy formneve[mezőneve], a formnak átpasszolom a $_POST["formneve"] tömböt, és ezeket validálja.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6569 üzenetére
Igen, a keresés get-tel okés, ott nem para az esetleges frissítés, de még mindig vannak oldalak, ahol post-olják a keresőmezőben megadottakat (most hirtelen az ncore jut eszembe, ahol kifejezetten zavar). Meg ugye a get-tel történő kereséskor kapott cím lementhető, könyvjelzőzhető, átküldhető másnak, szóval ezer szempontból praktikusabb.
Az első felére reagálva: na, akkor úgy tűnik, félreértettem, sorry.
"a form actionja ugyanaz a file és függvény lesz" - innen elsőre úgy értelmeztem, hogy ugyanabba a fájlba irányítod vissza az adatokat, tehát ugyanott dolgozod fel.
"Ha invalid, vissza ugyanahhoz a view-hez, csak most már hibaüzenetek is vannak"
Ez hogy néz ki nálad a gyakorlatban?
Pl. van a foo.php fájl, amiben megtörténik a kiíratás (ezt a címet kérte le a júzer), és van egy formod:
<form action="bar.php" method="post" ..........>..........</form>
Ekkor az action szerinti bar.php fájlba irányítja át a formot. Itt csekkolod, hogy valid-e, ha nem, egyből kiíratod a formot? Mert akkor megint felmerül az F5-ös probléma. Vagy pedig van a foo.php fájl, és az action-ben is ugyanez a fájl található, és itt nézed meg a validitását? Igazából itt is felmerül az F5-ös para. A visszairányítós játéknál nyilván nincs ilyen probléma, de ott meg már elvész a post-olt adat (amennyiben nem mented sessionbe).Most hirtelen nem értem, hogyan éred el, hogy validálod az adatokat, fel tudod használni azonos kéréssel a $_POST tömb adatait (tehát a felhasználónak nem kell begépelnie újból azokat), kiíratod, nem mented el sessionbe a dolgokat, és még az F5-ös frissítgetős para sem merül fel?
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6568 üzenetére
Ugyanabban a kérésben, de nem ugyanabban a fileban
a form maga egy külön osztály, pontosan tudja magáról, milyen mezői vannak, azokat hogy kell validálni, szóval én csak átadom neki a postolt adatokat és megkérdem, valid-e
érvénytelen adatoknál meg feleslegesnek tartom a redirectelést, de ez ízlés dolga.
A post-redirect-get pattern eredeti célja az alkalmazás állapotát megváltoztató kérések (vásárlás, kommentelés például) duplázásának elkerülése volt. A keresés nem változtat az állapoton, én get-tel szoktam megoldani (általában úgy néz ki, hogy example.com/keres/mirekeresett) - így máris levan a gond az f5-ös újraküldésrő.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6567 üzenetére
A felvázolt megoldásban nekem egyedül az nem szimpi (persze ízlés kérdése), hogy ugyanabban a fájlban történik a validálás, mint amiben a form kiíratása - én pont azért tértem át inkább arra, hogy még a validálás során is redirectelgetek (még ha nem is lenne feltétlenül muszáj/praktikus sessionben tárolni az adatokat, bár nem hiszem, hogy ezen múlnának a teljesítménybeli különbségek), mert nagyon zavar, amikor egy form elküldésekor F5 (frissítés) lenyomása hatására a böngésző visszakérdez (Opera általában nem teszi), hogy elküldje-e még egyszer a $_POST-adatokat. Engem ez legalábbis felhasználóként is zavar: ha bármi miatt úgy döntök, hogy frissíteni szeretnék, és nem probléma, ha elvesztem a begépelt adataimat, akkor hadd tegyem ezt visszakérdezés nélkül.
(Bár hozzáteszem, pl. Gmailnél el nem mentett levél elküldésekor, vagy szerver felé történő függőben lévő kérés megszakítási kísérlete esetén, vagy épp a stackoverflow oldalán történő hsz.-íráskor jól jön, hogy figyelmeztet, hogy még nem mentettem/küldtem el, amit akartam. DE ez szándékos és indokolt fejlesztőoldali dolog, nem a böngésző egyéni döntése, hogy most akkor jól figyelmeztesse a felhasználót, szerintem egészen más a kettő "hangulata".)
Sok oldalon a keresőmezőkbe beírtakat is azonos oldalon dolgozzák fel, olyankor is sűrűn előfordul az F5-nyomkodásos probléma, az még zavaróbb, az ember adott esetben többször keres, mint amennyiszer mondjuk hozzászól adott oldalhoz, cikkhez, ilyenkor F5 nyomkodására mindig megakasztja a böngészést a figyelmeztető ablak a post-adatok újbólli elküldéséről.
Mostanában nagyon sokszor megpróbálom inkább AJAX-szal megoldani a dolgokat, mert az úgy szebb felhasználói szempontból, mint az egészoldalas frissülés - ráadásul akkor az F5-ös és redirectelős probléma egy része is megoldódhat, AJAX-os feldolgozásnál lehet egyből kiíratni is (máskor is lehet, de mint fentebb mondtam a Wordpress-es példát, nem túl szép a külön hibaoldal, majd visszanavigálási kényszer).
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6566 üzenetére
A működés kb. a következő: van egy függvény (a controller), ami első körben példányosítja a formot, és átadja a view-nak. Az kiírja, a form actionja ugyanaz a file és függvény lesz. Másodszorra, mikor post-tal jön a kérés, hozzárendeli a form példányhoz a kapott adatokat, és ellenőrzi őket. Ha invalid, vissza ugyanahhoz a view-hez, csak most már hibaüzenetek is vannak, ha valid, akkor feldolgozza a formot (bejelentkezik a user, menti a komment, stb.), és redirectel.
MVC-vel dolgozom, valamint látszik a post-redirect-get pattern is.
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6565 üzenetére
Ja, nyilván attól függ, hogy oldod meg. Nálad nem tudom, hogy van konkrétan, azt nem írtad.
Van egy formod, az elküldi a post adatokat egy másik fájlnak, ott meg hiba esetén megint ugyanúgy kiíratod a formot, meg az oldal többi részét, vagy hogyan?
Amúgy az szerintem ultraronda megoldás, ami a Wordpress-motort használó weboldalak többségénél szokott lenni adott cikkhez történő hozzászólásnál fellépő hiba esetén, hogy dob neked egy hibaoldalt, egy pici keretben kiírva a hibaüzenetet, az oldal egyéb részei egyáltalán nem látszanak, és csak a böngészőben az eredeti oldalra való visszanavigálást követően tudod megfelelően módosítani a form kitöltését. (Persze egyes böngészőknél ilyenkor a visszanavigálásnál törlődik is az eredeti hsz., fasza.)
-
Tele von Zsinór
őstag
válasz
Sk8erPeter #6564 üzenetére
Első ponthoz: nem ugyanazon a fileon belül, de ugyanabban a kérésben szoktam kiírni a hibaüzenet, mint amiben elküldte a formot. Így ott vannak a post adatok, ilyenre feleslegesnek tartom sessionbe menteni őket és redirectelni.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6563 üzenetére
Abban az esetben nem is kell, ha
1.) a formok feldolgozását ugyanott végzed, ahol maga a form kiíratása van (tehát nem külön fájlban, így a POST adatokat egyből közvetlenül fel is tudod használni a formmezők kitöltésére - de ez szerintem gány megoldás),
2.) ha átmeneti adatbázis-bejegyzést hozol létre a felhasználó által megadott adatokkal, amit csak akkor hagysz meg, ha a felhasználó véglegesíti az adatokat (korlátozott lehet az adatbázisban elérhető kapcsolatok száma)
3.) vagy akkor, ha egyszerűen nem foglalkozol vele, hogy a felhasználónak ki kell-e töltenie újból az űrlap egyes mezőit, vagy sem
4.) ha bejelentkeztető űrlapról van szó, ahol pl. csak felhasználónév-jelszó párost kell kitölteni, itt nyilván az esetek többségében nem kell megjegyeztetni semmit
5.) biztos van olyan eset, ami most nem jut eszembe.DE érdemes bevetni a session képességeit ilyen esetekre is, igazából mi másra lenne használható, mint adatok átmeneti tárolására, akár egy egész session erejéig, vagy csak rövidebb időtartamra.
Nyilván formadatokat is csak addig tároljunk session-változókban, amíg nagyon szükséges. -
Speeedfire
félisten
válasz
Sk8erPeter #6562 üzenetére
Mondjuk én nem szoktam.
Eddig még nem volt olyan amihez használnom kellett volna ezt a megoldás.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6559 üzenetére
"Nem szokták"
Kik nem szokták?
Nyilván van, aki átmeneti adatbázis-bejegyzést hoz létre ilyenkor, de én nem pazarlom ilyenekre az adatbázis korlátozott erőforrásait, épp ezért is használom legtöbbször a sessiont ilyen célra (is). Persze csak addig tárolom, ameddig nagyon szükséges - leginkább hiba esetén. A form adatait mindig külön feldolgozó fájlban dolgozom fel, és amennyiben ezt nem AJAX-szal oldom meg (azért úgy a szép, de működjön annál is, akinél ki van kapcsolva a JavaScript), akkor ha nincs hiba, eltárolom az adatokat adatbázisban, ha mégis hiba történt, a form adatait elmentem session-változókba, hogy a felhasználónak ne kelljen újra begépelnie az adatokat (szerintem ez elég fontos, engem is halálra idegesít, ha nem így oldják meg), majd visszairányítom a júzert az eredeti oldalra (ahonnan a formot elküldték), és ott a form megfelelő mezőibe kiíratom a session-változókban tárolt korábbi űrlapadatokat, majd ezután rögtön meg is szüntetem ezek tárolását (a formon már úgyis látszik, majd a felhasználó elküldi újból ugyanezeket az adatokat, ha nagyon akarja).
Érdemes ezeket az adatokat egy többdimenziós megoldással tárolni, hogy könnyű legyen őket megszüntetni is, valahogy így (egyszerű példa):
$_SESSION['form_data'] = array();
$_SESSION['form_data']['user_name'] = $_POST['user_name'];
$_SESSION['form_data']['user_address'] = $_POST['user_address'];
// ....
Ha meg akarod szüntetni az eltárolt formadatokat, elég ennyit csinálni:
unset($_SESSION['form_data']); -
Alukard
senior tag
Köszönöm a válaszokat
-
Alukard
senior tag
Egy kérdés.... ürlap tartalmat mennyire bevett szokás a $_SESSION-ban tárolni?
Azt tudom, hogy gyakorlatilag meg lehet csinálni, csak az a kérdés, hogy van -e valami negatívuma? -
biker
nagyúr
válasz
Speeedfire #6555 üzenetére
Latod, megoldottam igy is -
Speeedfire
félisten
válasz
Sk8erPeter #6554 üzenetére
Vazzz!
És tényleg, a config fájlba benne van a függvény. Ezt nem is néztem, sorry biker. -
Sk8erPeter
nagyúr
válasz
Speeedfire #6553 üzenetére
Hát ha nem dob warningot vagy fatal errort, akkor lennie kéne ilyen függvényednek, aminek lehet, hogy referenciaként van átadva a tömb.
-
Speeedfire
félisten
Hát nem tudom már, hogy honnan vettem, de 2 oldalon is ezt használom és működik.
[link] [link]
Az első linken látványosabb, mert kevesebb címke van.Milyen nevet nem ad vissza?
Nem illesztettem be ezt a funkciót.
Szerintem az elég jó futási idő.
Sk8erPeter: Tényleg nincs ilyen függvényem, de akkor miért működik a keveredés? -
biker
nagyúr
válasz
Sk8erPeter #6551 üzenetére
reggel fél hétkor nem tűnt fel. de tényleg nem változik a sorrend
az angol() igen
gyorsan ki is javítottam -
Sk8erPeter
nagyúr
A shuffle_assoc()-ot leszámítva teljes körű kódnak számít, működőképes (persze ha az eredeti angol2() fv.-t is kiveszed)...
DE az nem tűnt fel, hogy ilyenformán:
shuffle_assoc($Cimke);
a shuffle_assoc rohadtul nem változtat a $Cimke tömbön semmit?
A függvény egy tömbbel tér vissza, az meg így csak elvész az éterben.
Legfeljebb így működik:
$Cimke = shuffle_assoc($Cimke);(#6540) Speeedfire: neked is javaslom a fenti javítást.
(már ha nálad a shuffle_assoc() fv. nem referenciát kap paraméterként, ahol a $list tömbön végzel változtatásokat - pl. function shuffle_assoc(&$list) { ..... } )
-
biker
nagyúr
most már űberzsírkirály...
konkrétan nem lassítja észrevehetően, mert a facebook és adsense pluginok jobban megfogják -
biker
nagyúr
hát igen, ez már így működik. a fél kódot is köszi, segített azért....
<?php
include("config.php");
$kapcsolat = mysql_connect( "$sql", "$user", "$pass" );
mysql_select_db( $adatbazis, $kapcsolat ) or die ("{$lang['mysql_error']}<br>".mysql_error());
function shuffle_assoc($list) {
if (!is_array($list)) return $list;
$keys = array_keys($list);
shuffle($keys);
$random = array();
foreach ($keys as $key)
$random[$key] = $list[$key];
return $random;
}
echo '
<div class="cimkefelho">
<br />
<h2>Cimkefelhő</h2>
<p>
';
$cimke = mysql_query("SELECT termek_cimke FROM webshop_termekek") ;
$osszes=0;
while ($cimke2 = mysql_fetch_array($cimke) ) {
$tags = str_replace(" ","",explode( ',', $cimke2['termek_cimke']));
foreach ($tags as $cimkek) {
$Cimke[] = $cimkek;
$osszes++;
}
}
$Cimke = array_count_values($Cimke);
shuffle_assoc($Cimke);
foreach ($Cimke as $Tags => $mennyi) {
$ertek = round($mennyi/$osszes*30,1)+1;
echo '<a title="'.$Tags.'" style="font-size:'.$ertek.'em" href="cimke='.$Tags.'" >'.$Tags.'</a> ' ;
}
unset($Cimke);
echo '
</p>
</div>
';
?>Runtime: 0.369632
Nem tudom, ez mennyire gáz 37800 termék 87 különböző cimkénél -
biker
nagyúr
válasz
Speeedfire #6540 üzenetére
elkezdtem próbálgatni, nem működik
shuffle_assoc nem működik nálam(??) shuffle() van
ez javítva, mondhatni ok, de ezek után a $tags-re és másra sem adja már vissza az összekevert, leszámolt tömbből a NEVET
azt tudom kinyerni hogy melyik kulcs hányszor szerepel, de a nevét rohadtul semmilyen verzióban nem adja vissza.ezen még küzdenem kell, úgy látom
-
Speeedfire
félisten
válasz
Sk8erPeter #6543 üzenetére
Ahogy biker is írja vagy egy cronnal lenne futtatva a dolog és annak a kimenete lenne egy táblába rakva és a fő oldalon az lenne lehívva. Vagy minden egyes módosítás, új tartalom feltöltéskor lenne generálva a tábla.
Nem azzal van a gond, hogy nem tudom átírni, hanem hogy localhost alatt nem fordítok rá akkor figyelmet. Nincs annyi projekt, hogy külön ezeket kezeli kelljen.
Értem, igazad van ezzel kapcsolatban. Erre még nem gondoltam, mindig csak az volt a fő szempont, hogy én tudjam mit hol rontok el.
-
biker
nagyúr
válasz
Sk8erPeter #6543 üzenetére
nekem van egy minden éjjel lefutásra ítélt fileom, abba beleteszem majd a cimkék kiválogatását és számolását, és ez fog megjelenni síme selectel, így gyorsul majd...
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6542 üzenetére
Én a VirtualHostot így csináltam a httpd.conf fájlban:
NameVirtualHost 127.0.0.1
ServerName localhost
## Próbálgatásokhoz
<VirtualHost 127.0.0.1>
ServerName proba.local
DocumentRoot "d:/Honlap/www/proba"
<Directory "d:/Honlap/www/proba">
Options All
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>itt ebben a példában a http://proba.local címen elérem a "d:/Honlap/www/proba" elérési úton található könyvtárat, amennyiben beteszek egy ilyen megjegyzést a hosts fájlba (Windows alatt: C:\Windows\System32\drivers\etc\hosts):
#Próbákhoz
127.0.0.1 proba.localÍrd át a neked megfelelő elérési utakra és nevekre, ha gondolod, szerintem érdemes.
"Hogy érted azt, hogy nem célszerű kiírni?"
A felhasználóknak semmi köze az adatbázissal kapcsolatos pontos hibaüzenetekhez, azt inkább csak a fejlesztőnek kell tudnia.
Úgy lenne érdemes, hogy még a kiíratások előtt vizsgálgatod, hogy elérhető-e az adatbázis, meg annak megfelelő lekért sorai, és amennyiben valami gond lenne, akkor egy ennek megfelelő hibaoldalra irányítod át a júzert, vagy átirányítás helyett simán csak a fő tartalomrészbe kiíratsz egy felhasználóbarát hibaüzenetet, mint pl. "Sajnos para van az adatbázissal, gyere vissza később, csá".A hibaüzeneteket meg naplózod és/vagy elküldöd magadnak e-mailben, hogy tudj róla, de a felhasználó lehetőleg ne lássa, mi is történik a háttérben (pl. melyik tábla nem elérhető, miért, stb.). Ez is egyfajta biztonsági rés lehet, de ami lényegesebb szempont, hogy nem túl szép, ha a felhasználó az arcába kap egy warningot, fatal errort vagy hasonlót.
-
Sk8erPeter
nagyúr
válasz
Speeedfire #6540 üzenetére
"Kellene még egy másik tábla, ahol el lenne tárolva ez mind"
Ezt hogy érted?
Engem is érdekel a gyorsítás, de ezt most nem értem, mire gondolsz.Szerk.: jé, közben pont írtál nekem, mindjárt elolvasom.
-
Speeedfire
félisten
válasz
Sk8erPeter #6506 üzenetére
Ezt a bejegyzést meg észre sem vettem.
Miért nem használod fel a $_GET['phpoldal'] változót? Úgy értem, akkor minek adod át ennek a query stringnek a címet?
Így láttam célszerűnek anno, minden eshetőségre fel akartam készülni. Lehet, hogy pont nem a legjobb megoldás rá. Majd egyszer lehet nekiesek megint, jobban átgondolva az egészet.
http://localhost/!!!szapar.hu/
Ehelyett meg létrehozhatnál egy bejegyzést a hosts fájlban, meg apache-beállításokban egy VirtualHost-ot, és lehetne a címe http://szapar.local Így azé' szebb, meg nem kell annyit pötyögni a cím beírásához.
Tudom, csak nincs kedvem mindegyiket beírni. Nem mintha sokáig tartana, csak localhoston annyira nem zavar a dolog. Ha meg felkerül a serverre akkor meg már édes mindegy.$valogatas = "select * from szapar_alias where eng = '".$uri."' ";
Itt azért az $uri változót nem ártana escape-elni, az SQL Injection elkerülése érdekében!
$i= 0;
foreach ($valogat as $ertek) {
if ($i != 0) {
parse_str($ertek);
}
$i++;
}
Ezt nem is értem, minek csinálod, ha utána egyáltalán sehol nem használod fel az $ertek változót?
Vagy felhasználod, csak valami include-olt fájlban? Vagy csak benne maradt?
Erre eddig nem is gondoltam, tényleg egy biztonsági rés. Ki is javítottam már.
Már hogyne használnám fel az $ertekeket. Azok az oldalnak a "$get paraméterei", a script végén hívom meg a php fájlokat amikben felhasználom.if (!mysql_query($valogatas,$con)) {
die('Hiba: ' . mysql_error());
}
Itt a die() helyett érdemesebb lenne inkább valami felhasználóbarátabb hibaüzenetet, hogy nem elérhető az adatbázis, látogasson vissza később. Ráadásul a felhasználónak semmi köze a konkrét hibaüzenethez. Nem célszerű kiírni! Főleg, hogy nem is túl szép.
Az ilyen jellegű hibákat amúgy nagyon faszán le lehet kezelni kivételkezeléssel, ha valami kritikus jellegű hibád van, azonnal dobsz egy kivételt, hogy ne is futkorásszon tovább a kód, nem is kell bonyolult és ronda if-else blokkokat csinálni, egyszerűen valahol elkapod a kivételt, megfelelő módon kezeled, és kész.
Hogy érted azt, hogy nem célszerű kiírni? Beszélgettünk már a kivétel kezelésről, de amikor a kód készült azt sem tudtam mi az a try() meg catch() blokk.if (!empty($valogat['url']) and isset($valogat['url']))
Ennek a feltételvizsgálatnak így nem sok értelme van, itt elég lenne a !empty() részt vizsgálni, nyilván ha nem üres a változó (nem is NULL, nem is üres string, stb.), akkor be van állítva, tehát a második feltétel már felesleges. Sőt, itt előbb célszerű lenne inkább megvizsgálni, hogy van-e kapott eredményhalmaz, vagy sem, ha már úgyis lekérdezed a kapott sorok számát a mysql_num_rows() függvénnyel.
Valami oka volt, hogy így írtam. De már nem tudom, hogy mi volt az.Na, a többi részéhez most nem volt türelmem.
Kössz!"Amelyik táblában az url-ek vannak cachelve van."
Hogyan bírod rá így külön az adatbázist, hogy cache-elje? Tudtommal default cache-eli, indexeléssel lehet esetleg segíteni a lekérdezés gyorsaságát.
Az indexelésre gondoltam, csak a szakzsargon nem mindig jut eszembe. -
biker
nagyúr
válasz
Speeedfire #6540 üzenetére
köszi, hétvégén összehozok valamit
-
Speeedfire
félisten
Csak egy példa, hogy én mit használok. Igaz szerintem erőforrás tekintetben nem a legjobb. Kellene még egy másik tábla, ahol el lenne tárolva ez mind, így lenne egy úgymond cachelt tábla.
<?php
include_once 'config.php';
echo '
<div class="cimkefelho">
<br />
<h2>Cimkefelhő</h2>
<p>
';
$cimke = mysql_query("select tags from linkek_tartalom") ;
$osszes=0;
while ($cimke2 = mysql_fetch_array($cimke) ) {
$tags = str_replace(" ","",explode( ',', $cimke2['tags']));
foreach ($tags as $cimkek) {
$Cimke[] = $cimkek;
$osszes++;
}
}
$Cimke = array_count_values($Cimke);
shuffle_assoc($Cimke);
foreach ($Cimke as $Tags => $mennyi) {
$ertek = round($mennyi/$osszes,1)+1;
echo '<a title="'.$Tags.'" style="font-size:'.$ertek.'em" href="cimke='.angol2($Tags).'" >'.$Tags.'</a> ' ;
}
unset($Cimke);
echo '
</p>
</div>
';
?> -
Speeedfire
félisten
Hülye kérdés, de hogy lehet egy programozói állásinterjúra felkészülni? Lesznek tesztek is.
-
biker
nagyúr
válasz
Tele von Zsinór #6535 üzenetére
ahham, pl van 75 cimke, és 6 kategória, akkor 75/6=12,5 (legyen (int)(12,5)=13)
és akkor 1-13 kat=1, 14-26 kat=2 stb? étem
-
andorfy
csendes tag
Sziasztok!
Egy nagyon egyszerű webshopot keresgélek a neten már egy ideje, de csak rettentő összetetteket találok.
Amire a legfontosabb lenne, hogy integrálható legyen meglévő működő weblapba. Semmi extra funkció nem kell, se bonyolult regisztráció, se rengeteg adat a termékekhez (maximum név, 1-2 kép, leírás, ár, van e készleten, vagy nincs, termékkategóriából is 2 vagy 3 lenne), rendelésnél a felhasználó csak megadja a címét, hogy hová kéri, és erről a rendszer küld neki egy visszajelző e-mailt, meg a webáruház tulajának egyet. Az adminfelületnek se kellene csodákat tennie, viszonylag egyszerű legyen a fenti adatok feltöltögetése, hetente max 20-30 termék kerülne fel, lehet, hogy annyi se, úgyhogy nem kell se txt, se cfv import.
Valaki esetleg tud ilyen webshopot?
-
Tele von Zsinór
őstag
Tegyük fel, hogy van n darab cimkéd, ezeket összesen k kategóriába akarod besorolni. Kategória alatt a felhőbeli nagyságot értem, mondjuk 1-6 közt. Ezekre megcsinálod a csst.
Cimkénkénti összeszámlálás után előfordulások szerint rendezed, az első n/k bekerül az első kategóriába, (n/k, 2n/k] a másodikba, stb. az utolsóig.
-
biker
nagyúr
nekem meg egy nagyon jó "cimkefelhő" program kellene.
A lényeg: webáruház
van benne most 37.000 termék
termékenként cimkék, vesszővel tagolva, ha több cimke van, tehát igen tetemes adatfelhőki kellene nyerjem az összes cimkét - megoldva
ahol vessző van, explode - megoldva
Leszámolom miből mennyi van - megoldhatóés kapok egy brutális adathalmazt, amiben van olyan cimke, amiből van 100, van amiből 1200, van amiből 6300 van, stb
ezeket kellene jól összeszedni és mennyiség függően méretezni.
De milyen képlettel lehetne ennyi halmazból jó arányt összeszedni? mert van kb 120féle cimke, ha a legnagyobb és legkisebb gyakoriságot osztom a mennyiséggel, akkor is több tízszeres szorzók jönnek ki.
és nem lehet 10px meg 100px egy-egy betűhogy csinálják a nagyok?
-
Sk8erPeter
nagyúr
válasz
Alukard #6532 üzenetére
Ehelyett a szerintem csúnya megoldás helyett jobb kikapcsolni a magic_quotes_gpc beállítást php.ini-ben (PHP 5.3.0-tól deprecated beállítás):
magic_quotes_gpc Off
esetleg .htaccess fájlból:
php_flag magic_quotes_gpc Off
vagy pedig egy korábban mutatott módszerrel elintézni (fordfairlane írta, én most csak beraktam egy függvénybe):function check_magic_quotes() {
if (get_magic_quotes_gpc()) {
function stripslashes_gpc(&$value) {
$value = stripslashes($value);
}
array_walk_recursive($_GET, 'stripslashes_gpc');
array_walk_recursive($_POST, 'stripslashes_gpc');
array_walk_recursive($_COOKIE, 'stripslashes_gpc');
array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
}a kódod elején (a függvénydefiníció után) lehetőleg hívd meg a függvényt így:
check_magic_quotes();Egyébként félreértés ne essék, a Te megoldásod (vagyis hát a másolt) is működik, nincs azzal olyan nagy baj, csak szerintem nem túl szép megoldás.
Közben találtam egy egész értelmes magyarázatot: [link]
itt a végén épp a Te kódodban látott részt mondja gyors alternatív megoldásnak, de alapvetően ő is azt javasolja, hogy a fentiek legyenek kikapcsolva. Kábé ugyanazt írta le, mint én (franc, egyszerűbb lett volna egyből linkelni), mondjuk a fenti függvényt nem írta bele, az még igen hasznos lehet.
-
Alukard
senior tag
válasz
Sk8erPeter #6531 üzenetére
Bevallom, hogy nem vagyok programozó, és a szükséges szemléletem sincs meg hozzá, és egyelőre az a lényeg, hogy működjön... majd ha belejövök akkor biztos szebb és jobb kódokat tudok majd írni
Viszont a
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);qvartetet már többször is láttam, és nem csak gányolt kódokban, de ha tudsz jobbat én mindenre nyitott vagyok
-
Sk8erPeter
nagyúr
válasz
Alukard #6530 üzenetére
sebaj, majd utólag remélhetőleg észreveszed ezeket, és rájössz, milyen viccesek a régi kódjaid...
legalábbis én akárhány régi kódomat látom, mindben azonnal látom a hibát, meg hogy most már mit csinálnék másként.
na, de a dolgon nem változtat, hogy a kódodban tök felesleges az ob_start()...
mondjuk ez is kemény így rögtön egymás után:
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
tényleg ez egész gány -
Alukard
senior tag
válasz
Sk8erPeter #6529 üzenetére
Egyelőre csak tanulom és a tutorial része volt php5-re... szóval gányolok jobbra-balra
-
Sk8erPeter
nagyúr
válasz
Alukard #6525 üzenetére
Csak kíváncsiságból kérdezem:
MINEK használod az ob_start();, ob_end_flush(); függvényeket? Van rá valami különleges okod? Ha nincs, csak szólok, hogy annak felesleges használata sajnos gányolás.
Az esetek igen nagy többségében tényleg nincs rá szükség.
Nyilván ki lehetne találni valami különleges okot a használatára, de az általad mutatott kód, és az "átlagos" webfejlesztés egyáltalán nem teszi indokolttá az igénybe vételét (habár szerintem még az advanced alkalmazásfejlesztés nagy részében is elkerülhető). Főleg, ha az MVC-szemlélet konkrét alkalmazására gondolunk. -
Alukard
senior tag
Üdv!
Van egy kis gondom... az alább található kód működik Chrome alatt, de az összes többi böngésző alatt meg nem.
A cél az lenne, hogy sikeres bejelentkezés után tovább menjen egy másik oldalra (loginsuccess.php), de csak chrome alatt megy tovább, az összes többi a core mappa index.php fájlát akarja és emiatt 404-ben végződik... leszámítva az átirányatást a kód működik.
Az url amit behívna az http://localhost/ira-ms/core/loginsuccess.php, amikor beütöm manuálisan akkor sem találják, kivéve a chrome -t.A legújabb XAMPP fut mint szerver (talán hasznos lehet)
Minden segítésget nagyon köszönök!
<?php
ob_start();
require_once 'db_connect.php';
$username=$_POST['3i_uname'];
$password=$_POST['3i_upass'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$encrypted_password=md5($password);
$sql="SELECT * FROM ira_users WHERE u_name='$username' and u_pass='$encrypted_password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
$_SESSION['username'] = $username;
$_SESSION['pass'] = $encrypted_password;
echo "Sikeres bejelentkezés <br />";
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'loginsuccess.php';
$redir = "http://".$host.$uri."/".$extra;
echo "A továbblépéshet kattintson <a href=\"".$redir."\">ide</a>";
//header("Location: $redir");
}
else {
echo "Rossz felhasználó név vagy jelszó";
}
ob_end_flush();
?> -
t-shirt
veterán
Üdvözlet! Nem php-s kérdés, de úgy vélem itt kaphatok választ.
Kaptam egy linket hogy szedjek le egy weboldalt https//www…. cím. Amire ha rámegyek nyilván beránt egy böngészőt és egy apach-os index of főkönyvtárba jutok. Ha be szeretnék lépni a kívánt weblap könyvtárába akkor behozza a könyvtárban található weboldalt és így nem férek hozzá a filékhez. Da ha be is tudnék menni, vajon hogyan tudnám elmenteni ezeket. Próbáltam a linket FTP protokollal, de nem tudok csatlakozni. Biztos én vagyok az amatőr, de nem tudom hogyan is tudom leszedni. Nagy segítség lenne ha tudnátok ötletet adni.
-
RedSign
tag
Sziasztok!
Tegnap belefúrtam magam kicsit a rewriterule-s oldalcímekbe és felvetődött bennem egy kérdés, hogy szerintetek mi a "helyesebb" vagy célravezetőbb?
Pl.: Ha úgy szeretném felépíteni az oldalam, hogy az aloldalak a domain.hu/aloldal/keres/id formában szerepeljenek, ahol a keres és id nem biztos, hogy adott, akkor érdemes minden aloldalhoz egy rewriterule szabályt létrehozni vagy egy php file-lal kezelni az összes aloldalt? Vagy ennek igazából így nincs jelentőssége?
Várom a válaszokat.
Köszönöm,
RedSign -
D@ni88
addikt
Esetleg tudtok arról mondani valamit, hogy lehet csatolni egy fájl az email-hez?
-
Siriusb
veterán
Nem biztos, hogy jól értem. Minden sort külön pontban akarsz megjeleníteni? Akkor először explode-dal szétszeded egy tömbbe, majd egy for ciklussal kiíratod. Egyébként a . (ponttal) tudsz összefűzni egy karakterlánccá több elemet:
echo "<li>" . $tomb[$i] . "</li>";
Szerk: Vagy lehet több változót is beolvasol? Mindegy, a fenti sort alkalmazhatod, értelemszerűen a $timb[$i] helyére az adott változót írva.
-
D@ni88
addikt
Van egy újabb alap kérdésem, ami nektek biztos egyszerű, nekem nem
Szval van egy textarea-m, amiből beolvasok pár sort. Ezt kiíratásnál felsorolásba kellene tenni.
Hogy lehet azt megoldani hogy kiíratásnál pakoljon a sor elejére egy <li> a végére pedig egy </li> tag-et? -
Brown ügynök
senior tag
Megoldódott!
.htaccess tartalma:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteBase /komment/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^post$ index.php/mappa/cél_fájl.php [L]
</IfModule>Hivatkozás a célra: <a href="post">
Címsorban: localhost/komment/post
Object not found üzenetet azért kaptam mert rosszul hivatkoztam a cél URL-re az index.php-ban.
-
Sk8erPeter
nagyúr
válasz
Brown ügynök #6515 üzenetére
Nem ártana tudni, hogy ezt az "Object not found" hibaüzenetet egész konkrétan melyik kódsorra írja, valamint hogy egyáltalán kipróbáltad-e a javasolt módszert a .htaccess fájl módosításával.
-
Brown ügynök
senior tag
válasz
Siriusb #6512 üzenetére
Ez nem oldotta meg sajnos.
+Sk8erpeter: Argumentumokat jelenleg is adok át csak azok nem jelennek meg az URL-ben, ezért ezzel már nem kell foglalkoznom a mod_rewrite során. Ami az index.php-ban van az pedig nem véletlenül van úgy ahogy.
Mint mondtam ez egy elülső vezérlő, tehát minden kérést ez a fájl kezel és adja vissza a megfelelő választ:
$uri = $_REQUEST['REQUEST_URI'];
if ($uri == '/komment/index.php' && isset($_GET['id'])) {
show($_GET['id']);
}Az összes lehetséges kérésnek elkészítjük a megfelelő választ (útvonalat a válaszhoz) a többi megy a levesbe (404).
(Ebben a kérésben egy változót is átadtunk ['id'], ekkor végrehajtódik a show() fv. amivel lekérhetünk egy oldalt, írhatunk az adatbázisba, stb.)Ehelyett$uri == '/komment/index.php' szeretnék egy szebb megjelenést :
$uri == '/komment/show' de valamiért még mindig Object not found. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #6510 üzenetére
"Amúgy milyen jó lenne, ha már a .htaccess fájlból is el lehetne indítani egy időmérést."
Igazából nem is tűnik olyan nagyon hülye gondolatnak (hogy saját magamnak reagáljak).Találtam egy ilyen cikket: [Measuring Apache request processing time]
Ez alapján plusz az Apache vonatkozó hivatalos oldala alapján (mod_headers):
ha ezt a két Header direktívát beteszem a .htaccess fájlba:# %t: The time the request was received in Universal Coordinated Time since the epoch (Jan. 1, 1970) measured in microseconds. The value is preceded by t=.
# %D: The time from when the request was received to the time the headers are sent on the wire. This is a measure of the duration of the request. The value is preceded by D=.
Header set Ekkor_kapta_a_kerest_ms_1970_jan_1-hez_kepest: %t
Header set Keres_feldolgozasi_ideje_us: %D
akkor hozzáadja a HTTP-fejlécekhez ezeket is (szándékosan adtam most ilyen jó hosszú, de beszédes neveket).
Ebben az esetben a következő fejléceket látom a Firebug Net fülén:Ekkor_kapta_a_kerest_ms_1... t=1301593430575379
Keres_feldolgozasi_ideje_... D=539031Tehát eszerint 539031 us = 0.539031 s ideig tartott az Apache-nak, hogy kiszolgálja a kérést.
A t=1301593430575379 azt jelenti, hogy ennyi mikroszekundum telt el 1970. jan. 1-je óta.Ezek a fejlécek feldolgozhatók PHP-ból is (most itt a tömbben a fent megadott, jó hosszú nevű index-szel érhető el a kívánt érték, mindenki nevezze át ízlése szerint):
<?php
$headers_array = get_headers('http://'.$_SERVER['SERVER_NAME'], 1);
// headerek kiíratása:
echo 'HEADERS:------------<hr />';
echo '<pre>';
print_r($headers_array);
echo '</pre>';
$request_rec_time = $headers_array['Ekkor_kapta_a_kerest_ms_1970_jan_1-hez_kepest'];
// levágjuk a "t=" részt
$request_rec_time = str_replace( 't=', '', $request_rec_time );
// mikroszekundumban kapjuk meg, azt átalakítjuk másodperccé (s) (1 s = 1 000 000 ms)
$request_rec_time /= 1000000;
// átalakítva olvasható dátummá:
echo date('Y.m.d H:i:s', $request_rec_time).'<br />';
?>Igazából az utóbbi, a kérés ideje nem túl pontos, mivel integer értéket kapunk, így megegyezik a $request_rec_time változóval formázott fenti date() kimenete a sima date('Y.m.d H:i:s') kimenetével, aminek a második paramétere az alapértelmezett time() kimenet.
Létezik azonban a $_SERVER['REQUEST_TIME'] változó is, amit szintén felhasználhatunk, ez szerintem kicsit pontosabb, mert talán nem csak a .htaccess fájlhoz érve kezdi számolni az időt...
Így azt is átalakíthatjuk olvasható formátumra:echo date("Y.m.d. H:i:s", $_SERVER['REQUEST_TIME']).'<br />';
De sajnos ez is csak másodperces eltéréseket fog mutatni, nálam legalábbis az "u" (mikroszekundumot jelző) formátum karakter hozzácsapása ( date("Y.m.d. H:i:s.u") ) csakis csupa nullát eredményezett.
Ha valaki tud még jobb, még pontosabb módszereket, ne tartsa magában.
Kösz! -
Sk8erPeter
nagyúr
válasz
Brown ügynök #6511 üzenetére
.htaccess fájlba mehet:
<IfModule mod_rewrite.c>
# Először is kapcsoljuk be a RewriteEngine-t
RewriteEngine on
# Kiindulási hely
RewriteBase /
# NEM fájl és NEM könyvtár
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# illeszkedik a "/komment/show" és "/komment/show/" query stringre is (a perjel a különbség)
RewriteRule ^(/komment/show(/)?)$ /komment/index.php [L,QSA]
# előbbinél a QSA flag egyelőre felesleges, de hátha később szeretnél átadni query stringeket, amiket később feldolgozol PHP-ben
# az NC flag egyébként arra lenne jó, hogy case-insensitive módon fogadja el a címet, tehát mindegy, hogy /KoMmENt/ShOW vagy épp a helyes /komment/show címet írod be, ezt döntsd el, hogyan szeretnéd
</IfModule>Viszont ez a rész tök felesleges, ha már Apache-ból intézed el a dolgokat:
$uri = $_SERVER['REQUEST_URI'];
if ($uri == '/komment/') {
index();
}
elseif ($uri == '/komment/index.php') {
funkcio() );
}
...Tulajdonképpen itt nem vágom igazán, mit szeretnél, ha már mod_rewrite-ot használsz.
-
Siriusb
veterán
válasz
Brown ügynök #6511 üzenetére
Én is mostanában kezdtem el vacakolni a htaccessel, szerintem:
RewriteRule komment/show$ komment/index.php [NC]
Semmi argumentum nem lesz átadva? -
Brown ügynök
senior tag
Mod_rewrite-ban szeretnék segítséget kérni. Eddig jutottam:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteBase /komment/
RewriteCond %{REQUEST_FILENAME} !-f
</IfModule>Komment mappában található az index.php. Az index.php egy elülső vezérlőként funkciónál, tartalma:
$uri = $_SERVER['REQUEST_URI'];
if ($uri == '/komment/') {
index();
}
elseif ($uri == '/komment/index.php') {
funkcio() );
}
...Szeretném a hivatkozás megkönnyítésének érdekében ezt átalakítani : '/komment/index.php' valami ilyesmire: '/komment/show'
-
Sk8erPeter
nagyúr
válasz
Tele von Zsinór #6509 üzenetére
Valóban, ez teljesen igaz! És bocsi, nem voltam túl pontos és egyértelmű, azt akartam mondani, hogy sokszor JÓVAL többet várok, tehát mintha a szerver túl sokat szarakodna az általad említett dolgokkal, aminek része az Apache-szerver felőli dolgok elintézése, így pl. a .htaccess fájl vizsgálata is, és ezért merült fel bennem, hogy esetleg a reguláris kifejezés vizsgálgatásával is elszöszmötöl egy darabig.
De rájöttem, hogy ez hülyeség, mert annyira azért nem komplikált a reguláris kifejezésem, hogy pont ez lenne a probléma. Igazából ingyenes tárhelyről van szó, előfordulnak olykor problémák, amikor lassú a szerver, valószínűleg ez lehet ritkán a baj. Amúgy meg van, hogy rohadt gyorsan lefut az egész. Úgyhogy bocsi, tárgytalan!Nem tudom, miért pont erre feküdtem rá...
Amúgy milyen jó lenne, ha már a .htaccess fájlból is el lehetne indítani egy időmérést.
---
Holnap megpróbálom a többszörös kondícióvizsgálgatást .htaccess-ben mod_rewrite-hoz, ma már nem volt időm rá. -
Tele von Zsinór
őstag
válasz
Sk8erPeter #6508 üzenetére
Többet vársz, mint a script futásideje, mert a böngésződ először DNS-felold, felépíti a kapcsolatot a szerverrel, elküldi a kérést, az előállítja a választ, átküldi, és végül kölcsönösen zárják a kapcsolatot. Te a kódodban csak a válasz generálásának idejét tudod mérni.
-
Sk8erPeter
nagyúr
Köszi a választ.
Igen, épp a bottleneck-eket szeretném megragadni, és felmerült bennem, hogy esetleg az Apache-csal ilyen módon való regexpes szarakodás esetleg lassíthatja az oldalbetöltést, mert tárhelyen szándékosan elhelyeztem egy időméregetőt, először az elején hívom meg a fv.-t, majd a kiíratások legvégén megint, és az eredményét kiírom, és van, hogy többet várok, mint a kiírt eredmény (a script maga jó), ami mondjuk következhet abból is, hogy valamiért lassan reagál a szerver a kérésre, vagy f#ngom sincs.Amúgy itt az időméregető:
<?php//Oldal generálási idejének számolásához ( http://weblabor.hu/cikkek/idezojelek )
function getmicrotime() {
list($usec, $sec) = explode(" ", microtime());
return ((float) $usec + (float) $sec);
}
$time_start = getmicrotime();
/// blablabla, vizsgálgatás, kiíratás, stb.
// oldal legvégén:
$time_end = round( getmicrotime() - $time_start , 5 ) ;
echo '<small>|| Oldalgenerálás: '.$time_end.' s ||</small>';
///... HTML-kód befejezése (pl. </body></html>)"A RewriteRule-ok alapból így működnek. Fentről lefele halad a .htaccess fileban egészen addig, amíg talál egy megfelelő sort, ami alapján átírja az url-t"
Sejtettem, csak még sajnos a gyakorlatban nem volt időm megtapasztalni, hogy is van ez, addig azért kérdeztem, hátha van valakinek erről már tapasztalata korábbról, mert egyelőre azt sem tudom, hogy olyan feltétel esetén, ami stimmel, megáll-e egyáltalán a vizsgálat. (Szerk.: valszeg erre való az [L] flag használata. Itt egész jó lista van a flagekről: [link]. Meg egy igen alapos leírás a mod_rewrite-ról, aminek mondjuk tisztában vagyok az alapjaival, csak ezt a többes feltételt nem próbálgattam.)
Mindjárt megpróbálok utánanézni. -
Sk8erPeter
nagyúr
Jé, ezt az fpassthru() függvényt még soha nem használtam, ez miben más, mint a többi, kép kiíratására használható módszer?
(Pl. akár a readfile() - meg most hirtelen az imagepng() jut eszembe, de az mondjuk nyilván azért nem jó, mert képtípusfüggő az eredménye (pl. beadok neki egy jpg-t, akkor false-t ad vissza, az nem túl jó.) -
Sk8erPeter
nagyúr
válasz
Speeedfire #6496 üzenetére
Miért nem használod fel a $_GET['phpoldal'] változót?
Úgy értem, akkor minek adod át ennek a query stringnek a címet?
http://localhost/!!!szapar.hu/
Ehelyett meg létrehozhatnál egy bejegyzést a hosts fájlban, meg apache-beállításokban egy VirtualHost-ot, és lehetne a címe http://szapar.localÍgy azé' szebb, meg nem kell annyit pötyögni a cím beírásához.
$valogatas = "select * from szapar_alias where eng = '".$uri."' ";
Itt azért az $uri változót nem ártana escape-elni, az SQL Injection elkerülése érdekében!$i= 0;
foreach ($valogat as $ertek) {
if ($i != 0) {
parse_str($ertek);
}
$i++;
}
Ezt nem is értem, minek csinálod, ha utána egyáltalán sehol nem használod fel az $ertek változót?
Vagy felhasználod, csak valami include-olt fájlban? Vagy csak benne maradt?if (!mysql_query($valogatas,$con)) {
die('Hiba: ' . mysql_error());
}
Itt a die() helyett érdemesebb lenne inkább valami felhasználóbarátabb hibaüzenetet, hogy nem elérhető az adatbázis, látogasson vissza később. Ráadásul a felhasználónak semmi köze a konkrét hibaüzenethez. Nem célszerű kiírni! Főleg, hogy nem is túl szép.
Az ilyen jellegű hibákat amúgy nagyon faszán le lehet kezelni kivételkezeléssel, ha valami kritikus jellegű hibád van, azonnal dobsz egy kivételt, hogy ne is futkorásszon tovább a kód, nem is kell bonyolult és ronda if-else blokkokat csinálni, egyszerűen valahol elkapod a kivételt, megfelelő módon kezeled, és kész.Saját kivételtípusokat is definiálhatsz, ha származtatsz az Exception osztályból, azt is érdemes, hogy el tudd dobálni, és tudd, hogy egész pontosan milyen kivételt kell kezelned, így akár végtelen mennyiségű kivételt is elkaphatsz.
Példa:class Kiskutya extends Exception {
//nem is feltétlenül kell, hogy bármi más legyen benne
}
/// ... valahol a kódban
try{
// ...
$hiba = true;
if($hiba){
throw new Kiskutya('elég nagy gáz van, kiskutyákat dobálok! :D');
}
///...
$legyen_meg_kivetel = true;
if($legyen_meg_kivetel){
throw new Exception('ha az előbb nem dobáltam volna kivételt, akkor még idáig is eljutna, de ezt a kivételt is elkapnám a catch-ben! Bruhahahahh.');
}
} catch (Kiskutya $e) {
echo 'Kiskutya kivétel elkapva! Konkrét hibaüzenet: '.$e->getMessage();
} catch (Exception $e) { // fontos a sorrend! Az ősosztály (Exception) később legyen, mint a származtatott!
echo 'Általános jellegű hiba: '. $e->getMessage();
}if (!empty($valogat['url']) and isset($valogat['url']))
Ennek a feltételvizsgálatnak így nem sok értelme van, itt elég lenne a !empty() részt vizsgálni, nyilván ha nem üres a változó (nem is NULL, nem is üres string, stb.), akkor be van állítva, tehát a második feltétel már felesleges. Sőt, itt előbb célszerű lenne inkább megvizsgálni, hogy van-e kapott eredményhalmaz, vagy sem, ha már úgyis lekérdezed a kapott sorok számát a mysql_num_rows() függvénnyel.Na, a többi részéhez most nem volt türelmem.
(#6494) Speeedfire:
"Amelyik táblában az url-ek vannak cachelve van."
Hogyan bírod rá így külön az adatbázist, hogy cache-elje? Tudtommal default cache-eli, indexeléssel lehet esetleg segíteni a lekérdezés gyorsaságát. -
pumatom
aktív tag
Köszönöm a válaszokat, de ugyanúgy hiba jelentkezik
Warning: Cannot modify header information - headers already sent by (output started at /home/domainname/public_html/index.php:6) in /home/domainname/public_html/index.php on line 57
Ezt a header() -t tartalmazó sorokban kiírja hibaként.
-
cucka
addikt
válasz
RedSign #6503 üzenetére
Ezt a feladatot azért nem így illik megoldani. A header() hívásod helyére inkább valami hasonlót érdemes beilleszteni.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Content-type: image/jpeg");
fpassthru($img_folder . $image); -
-
pumatom
aktív tag
válasz
Speeedfire #6494 üzenetére
Szia!
Ez a kódom;
<?php
$imglist='';
$img_folder = "images_hu/";mt_srand((double)microtime()*1000);
$imgs = dir($img_folder);
while ($file = $imgs->read()) {
if (eregi("gif", $file) || eregi("jpg", $file) || eregi("png", $file))
$imglist .= "$file ";} closedir($imgs->handle);
$imglist = explode(" ", $imglist);
$no = sizeof($imglist)-2;
$random = mt_rand(0, $no);
$image = $imglist[$random];echo '<div align="center"><a href="' . $_SERVER['PHP_SELF'] . '"><img src="' . $img_folder . $image . '" border=3 </a></div>';
?>
Próbálgattam amit mondtál, de hibát adott, hova kellene beilleszteni a header() -t?
-
cucka
addikt
válasz
Sk8erPeter #6491 üzenetére
Ez a fenti ilyenformán jól működik, mégis felmerült bennem, hogy tulajdonképpen melyik a gyorsabb, az, ha Apache-csal vagy PHP-vel dolgozom fel a címet?
Elég gyors bárhogy. Ha gyorsítani akarsz a kódodon, akkor a bottleneck-eket kell megkeresni, ilyen kaliberű dolgokkal fölöslegesen pocsékolod az időd. Kit érdekel, hogy 0.02 ms alatt futtatja le a regexp-et, vagy 0.03?Ti hogy látjátok a kérdést? Másképp használjátok, vagy muszáj elfogadni, hogy ez egy viszonylag kötött szerkezet, jól kell kitalálni az elején, és nem érdemes változtatni rajta később?
Fel lehet php-ból is dolgozni az url-t, ez valamivel rugalmasabb megoldás, de értelemszerűen a korábban könyvjelzőzött url-ek változására nem ad ez sem megoldást. A barátságos url-ek egyébként a keresőmotornak szólnak, nem pedig a felhasználónak, tehát szerintem egyszer elég jól kitalálni és utána nem piszkálni.Több RewriteRule-t hogyan adtok hozzá úgy, hogy helyesen működjön?
A RewriteRule-ok alapból így működnek. Fentről lefele halad a .htaccess fileban egészen addig, amíg talál egy megfelelő sort, ami alapján átírja az url-t. (Ennél jóval bonyolultabb amúgy, vannak feltételek, meg igazából ha talált egy jó RewriteRule-t, akkor nem áll le a feldolgozás, de nem akarok hülyeséget írni, szóval nézz utána)
Új hozzászólás Aktív témák
Hirdetés
- Nintendo Switch 2
- Szeged és környéke adok-veszek-beszélgetek
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Kertészet, mezőgazdaság topik
- HiFi műszaki szemmel - sztereó hangrendszerek
- A fociról könnyedén, egy baráti társaságban
- Óra topik
- Samsung Galaxy S24 FE - később
- Azonnali alaplapos kérdések órája
- Kerékpárosok, bringások ide!
- További aktív témák...
- Lenovo ThinkPad T14 3 Gen 16/256GB SSD, Újszerű, 1 Év Garanciával
- Xiaomi 15 Ultra 512GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Odyssey OLED G8! 32"/4k/240hz/0,03ms/10BIT/Freesync-G-sync/HDMI 2.1/Smart Monitor
- Új 512GB WD SN5000S Gen4 x4/ Steam Deck ready/ garancia/ ingyen fox
- i7 8700/ RX6500/ 32GB DDR4/ 512GB m.2/ garancia/ ingyen foxpost
- Bowers/Wilkins PX8 fejhallgatók (dupla Bluetooth eszköz csatlakoztatása!) - ELKELTEK
- Okosóra felvásárlás!! Samsung Galaxy Watch 6, Samsung Galaxy Watch 7, Samsung Galaxy Watch Ultra
- ÁRGARANCIA! Épített KomPhone Ryzen 5 7500F 32/64GB DDR5 RTX 5060Ti 8GB GAMER PC termékbeszámítással
- AKCIÓ! MSI B550 R7 5700X 32GB DDR4 512GB SSD RTX 3060Ti 8GB Rampage SHIVA MSI 650W
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest