google 0 Share Posted June 13, 2005 Ebben vajon mi a hiba? Reménykedem benne, hogy valaki más megtalálja, mert én lassan feladom. <?php include("connect.php"); if(isset($kuld)) { $hircim = dbx_escape_string($_POST['hircim']); $hirszoveg = dbx_escape_string($_POST['hirszoveg']); if(!$hircim){ echo "A hírnek nincs címe!"; exit(); } $result = "INSERT INTO hirek (hircim,datum,hirszoveg) VALUES ('$hircim',NOW(),'$hirszoveg')"; mysql_query($result,$kapcsolat) or die("Nem sikerült hozzáadni a hírt!"); echo "<b>Rendben van, a hír bekerült az adatbázisba.</b>"; mysql_close($kapcsolat); } else { ?> <p> <form method="post" action="<?php echo $PHP_SELF ?>"> A hír címe:<br><input name="hircim" size="40" maxlength="24"> <br> <br> A hír szövege:<br><textarea name="hirszoveg" rows="7" cols="30"></textarea> <br> <input type="submit" name="kuld" value="Hír hozzáadása"> </form> </p> <?php } ?> Az oldal rendesen megjelenik, nem ír ki hibaüzenetet (tehát csatlakozott és rálelt az adatbázisra is), csakhogy semmi nem történik. Olyan, mintha mindig az else-ág futna le, mert az adatok elküldése után ismét üresen jelenik meg a form. A tábla és a mezõk nevét milliószor ellenõriztem. Tényleg nem tudom, mi lehet a gond. És másik fájlból már adatot is sikeresen adtam a táblához, tehát még beállítási gond sem lehet. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 14, 2005 Pedig az, mégpedig PHP biztonsági beállítás. A saját magába ágyazott form-ok nem hozzák létre a vezérlõ nevével a php változókat. Tehát, ha van egy formod, aminek az action-je üres, azaz maga az oldal lesz az action, és van rajta egy neved nevû input, akkor nem fogja létrehozni a php a $neved változót. Ezért fut le folyton az else ágad, és ezért van a fórumunkon "Kattints ide, ha nem akarsz várni" oldal is. Erre az oldalra ugyanis elküldi php változóként a neved input tartalmát! Ha mindenképpen egy oldalon akarsz dolgozni, akkor javaslom, hogy az isset helyett használd a következõt: if(array_key_exist('kuld',$HTTP_POST_VARS)) Evvel az az egy szépséghiba van, hogy minden frissítésre le fog futni, de legalább lefut. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 14, 2005 Sajnos nem jó. if (array_key_exists stb...) a feltétel, a küldés után pedig eltûnik a form, és az oldal kódja pedig megszakad, mintha szintaktikai hibás volna a php-script. És nem adja hozzá az adatbázishoz sem. Lehet, hogy akkor egyszerûen meghívok egy másik oldalt, amivel kiküszöbölhetõ ez a probléma. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 14, 2005 Igen, az a legjobb megoldás, csak hát nem néz ki túl jól. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 14, 2005 Nem baj, végül is csak adminisztratív háttér-rendszer lesz. Csak kettõ helyett egy fájllal megúsztam volna. Nem baj, köszönöm a segítséget. Link to comment Share on other sites More sharing options...
Ajnász 0 Share Posted June 14, 2005 if(isset($_POST['kuld'])) {... } Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 14, 2005 Ez nem szál el, ha nincs a _POST tömbnek 'kuld' nevû eleme? Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 14, 2005 Próbáltam már... Link to comment Share on other sites More sharing options...
Ajnász 0 Share Posted June 14, 2005 (edited) Ez nem szál el, ha nincs a _POST tömbnek 'kuld' nevû eleme? De igen, ez csak a konkrét probléma megoldására alkalmas, mivel a küldõ gomb neve kuld, és post metódust használ a form adatainak elküldésére. Muszáj egy olyan tömbelemre hivatkozni, mely a form egyik mezõjének name attribútumának értéke. Szerintem Google is éppen ezt próbálta volna csinálni, csak éppen a register_globals php.ini beállítás miatt nem jött össze. Annak bekapcsola erõsen ellenjavallott, mivel komoly biztonsági réseket hagy. Ezért vezették be a $_GET és $_POST változókat. Szerk: @Google Próbáld meg, hogy az actionnek nem adsz semilyen értéket, tehát action="". Edited June 14, 2005 by Ajnász Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 14, 2005 A PHP értelmesen kezeli le a feltételeket? Tehát ha mondjuk egy AND kapcsolatból az elsõ rész nem igaz, akkor is kiértékeli a másodikat? Mert ha nem, akkor ki lehetne egészeni avval az if-et, hogy : if (array_key_exists("kuld",$_POST) and isset($_POST('kuld')){...} Link to comment Share on other sites More sharing options...
Ajnász 0 Share Posted June 14, 2005 Bevallom, ennek egy kicsit utána kellett néznem a php-manualban, és a hozzászólásoknál olyasmi van írva, miszerint nem fog kiértékelõdni a második felétel. Viszont véleményem szerint felesleges mindkét feltételt lefuttatni, mivel ebben az esetben nem fontos, hogy be legyen állítva a tömbelem értéke. Pontosabban, ha létezik a tömbelem, akkor értéke is lesz, mivel az küldõ gombnak mindenképpen van valamilyen "felirata", ami az értékével egyenlõ. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 14, 2005 Ez oké, de én most egy kicsit elvonatkoztattam a konkrét esettõl. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 18, 2005 Már megint egy probléma, amin már órák óta nem bírok túllépni. ír: Egy beléptetõscriptrõl van szó. Értem az egészet, többször átírtam már, stb. de sehogy sem akar mûködni! Az adatok jók, de azok elküldése után a login.php helyett egy blank fehér oldalt kapok! Az elérési út jó, de az adatokkal nem tud mit kezdeni! És a login.php kódja: <?php session_start(); include("connect.php"); if (isset($login)) { if(!$HTTP_POST_VARS['nev'] || !$HTTP_POST_VARS['jelszo']) { die("Nem írt be felhasználónevet vagy jelszót!"); } $nev = "$HTTP_POST_vARS['nev']"; $jelszo = "$HTTP_POST_VARS['jelszo']"; $kerd = "SELECT * FROM users WHERE (nev='$nev') AND (jelszo='$jelszo') LIMIT 1"; $eredm = mysql_query($kerd,$kapcsolat) or die("Lekérdezni sem sikerült!"); if ($obj=mysql_fetch_object($eredm)) { $HTTP_SESSION_VARS['valid_id']=$obj->id; $HTTP_SESSION_VARS['valid_user']=$HTTP_POST_VARS['nev']; header("location: hirlista.php"); } else { die("A belépés nem sikerült, a felhasználónév vagy a jelszó nem megfelelõ."); } } ?> Egyszerûen nem értem, miért. Az Easyphp-t használom. Nem lehet localhoston session-t kezelni vele? Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 19, 2005 $nev = "$HTTP_POST_vARS['nev']"; $jelszo = "$HTTP_POST_VARS['jelszo']"; Ezt inkább így kéne: $nev = $HTTP_POST_vARS['nev']; $jelszo = $HTTP_POST_VARS['jelszo']; Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 19, 2005 Köszönöm, de nem ez a fõ hibaforrás. ír: Továbbra sem történik semmi, vagy legalábbis nem ad vissza semmit. Link to comment Share on other sites More sharing options...
Ajnász 0 Share Posted June 19, 2005 A $login mit akar jelölni? Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 19, 2005 A login a submit gomb neve. Link to comment Share on other sites More sharing options...
Ajnász 0 Share Posted June 19, 2005 Akkor valószínûleg ez a gond. A serveren nincs bekapcsolva a register_globals változó (helyesen), ezért a $_POST, $_GET, $HTTP_POST_VARS, $HTTP_GET_VARS elõre definiált változókat kell használni. Esetedben, mivel post metódust használsz a form elküldésére a $_POST vagy $HTTP_POST_VARS változót kell használni, Tehát: if(isset($_POST['login'])) {...} Azt még megkérdezném, hogy hanyas php-verziót használsz. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 19, 2005 4.3.10 Egyébként ezzel megoldódott a beléptetés problémája, nagyon köszönöm a segítséget. :olé: Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 22, 2005 Sajnos újabb problémával szembesültem. Ez pedig a jelszócserénél alakult ki. Minden OK, a cserét megcsinálja rendben, stb. Majd elkezdtem vizsgálni a felhasználó-eseteket: pl. nem ír be egy jelszót sem, csak egyet ír be, nem erõsíti meg az új jelszavát, stb. A régi jelszónak azonban bármit beírhat, üresen is hagyhatja. Ezt is ki szeretném szûrni, de az már nem olyan egyszerû. Gondoltam, talán nem kell belebújni az adatbázisba, megteszi egy session-változó is. Azonban hiába tettem bele, még kiíratni sem tudom, mert nem jelenik meg. Pedig szintaktikailag biztosan rendben van. Session-változó pl. a usernév is. Vagy talán a password-mezõbõl elpostázott stringeket nem lehet session-változóba betenni? Hogyan tudnám elegánsan és fájdalommentesen összehasonlítani a valós jelszót a felhasználó által a formba beírt régi jelszavával? (ami alapesetben ugye meg kell, hogy egyezzen) Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 22, 2005 Lekérdezed az adatbázisból, mintha beléptetnéd, és összehasonlítod a post-olt változóval. Ha rendben van, akkor engeded aváltoztatást, ha nem, akkor die. Link to comment Share on other sites More sharing options...
google 0 Author Share Posted June 22, 2005 A lekérdezett cuccot hogyan teszem változóba? Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted June 22, 2005 Most nem azért, de a Te kódod volt az elõbb: if ($obj=mysql_fetch_object($eredm)) { $HTTP_SESSION_VARS['valid_id']=$obj->id; Van ebbõl valami ötleted már? Mondjuk a $obj->password lehetõség? Vagy ahogy hívod a jelszó mezõdet. Link to comment Share on other sites More sharing options...
ocsi 0 Share Posted June 22, 2005 -kapcsolódás az adatbázishoz -tábla kiválasztása -lekérdezed az adott felhasználó jelszavát $sql_data = mysql_fetch_array(ide_kerül_a_lefuttatott_sql_változója); $regi_jelszo = $sql_data['jelszo']; If ($regi_leszo == $_POST[jelszo_regi]) { ha jó a jelszó } else { ha nem jó a jelszó } szóval lekérdezed a jelszavát, és azt összehasonlítod az elküldöttel..( Kb ugyan az mint Arpsoft megoldása) Link to comment Share on other sites More sharing options...
fazy 0 Share Posted August 8, 2005 A php-nek (nekem friss debian alatt) volt 1 olyan baja, hogy be kellett azt állítani, hogy használhasson változókat. php.ini register_globals = On És mûködik is... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now