Autor | Zpráva | ||
---|---|---|---|
mafos Profil |
Dobrý den,
upgradoval jsem si PHP a od té doby mám nějaké problémy se stránkami :-( Většinu se mi podařilo odstranit, ale potýkám se nyní s chybou v admin sekci. Admin vlastně pouze přidává, nebo mění údaje v db. Pokud chci něco smazat, je to OK, ale když přidávám nový řádek přes formulář, tak mě to vyhodí ven z administrace na přihlašovací stránku. Určitě to je nějaká blbost, ale nějak se mi na ni nedaří přijít :-( Děkuji za pomoc přihlášení: <? $code = $_GET["code"]; $id = $_GET["id"]; $nick = $_GET["nick"]; $heslo = $_GET["heslo"]; $MySQL_server="localhost"; $MySQL_user="user"; $MySQL_user_password="heslo"; $MySQL_db="db"; $MySQL_tabulka="registrace"; $spojeni=mysql_connect($MySQL_server,$MySQL_user,$MySQL_user_password); $spojenidb=mysql_select_db($MySQL_db); mysql_query("SET NAMES 'cp1250'") or die('Nepodařilo se nastavit jazyk'); if (!$spojeni) { echo"Nepodarilo se navazat spojeni se serverem."; exit; } $prihlasen=""; if($co=="logout"){ MySQL_Query("UPDATE $MySQL_tabulka SET ip='' WHERE id='$id';"); $code=""; $error="<b>Nyní jste byl odhlášen.</b><br>Pokud budete chtít dále pokračovat v režimu pro registrované, musíte se znovu přihlásit<br><br>"; } if($nick!=""){ $bb = MySQL_Query("SELECT * FROM $MySQL_tabulka WHERE nick='$nick';"); echo MySQL_Error(); $aa=MySQL_Fetch_Array($bb); if(($aa[heslo]==$heslo) and ($heslo!="")){ $IP=$REMOTE_ADDR; MySQL_Query("UPDATE $MySQL_tabulka SET ip='$IP' WHERE nick='$nick';"); $time=time(); MySQL_Query("UPDATE $MySQL_tabulka SET posledni_akce='$time' WHERE nick='$nick';"); $kod=MD5($time.$REMOTE_ADDR); MySQL_Query("UPDATE $MySQL_tabulka SET kod='$kod' WHERE nick='$nick';"); $url="id=".$aa[id]."&code=".$kod; $prihlasen=$aa[id]; } else {$error="Přihlášení se nepodařilo. Špatné uživatelské jméno, nebo heslo.<br><br>";} } if($code!=""){ $bb = MySQL_Query("SELECT * FROM $MySQL_tabulka WHERE id='$id';"); $aa=MySQL_Fetch_Array($bb); $rozdil = time() - $aa[posledni_akce]; if($rozdil>300 or $rozdil<0) $povol="ne"; if(($aa[kod]==$code)and($aa[ip]==$REMOTE_ADDR) and ($povol=="")){ $time=time(); MySQL_Query("UPDATE $MySQL_tabulka SET posledni_akce='$time' WHERE id='$id';"); $url="id=".$id."&code=".$code; $prihlasen=$id; } else {$str="";MySQL_Query("UPDATE $MySQL_tabulka SET ip='' WHERE id='$id';"); $error="<b>Nejste přihlášen</b><BR>Buď nesouhlasí IP, nebo se provedlo automatické odhlášení, kvůli neaktivitě delší než 5 minut. Přihlaste se proto prosím znovu.<br><br>";} } ?> tělo stránky, formuláře apod.: <?if($prihlasen==""){?> <TABLE><tr><td align="center"> <TABLE><tr><TD align="center"><b><h2>ADMINISTRAČNÍ SEKCE</h2></b></table> <table><FORM method="get" action="edit-pocasi.php"> <tr><td valign="top"> <td valign="top"> <tr><td valign="top">Přihlašovací jméno:<td valign="top"><INPUT type="text" name="nick" size="20"> <tr><TD valign="top">Heslo:<td valign="top" ><INPUT type="password" name="heslo" size="20"> <tr><th colspan="2"><INPUT type="submit" value="LOGIN"> </FORM> </table></table> <?}else{ $bb = MySQL_Query("SELECT * FROM $MySQL_tabulka WHERE id='$prihlasen';"); $aa=MySQL_Fetch_Array($bb); $kredit=$aa[kredit]; echo"<br><br><div align=\"left\"><b>PŘIHLÁŠEN: </b>$aa[jmeno]</div><br><br>"; echo"<table border=\"0\"><tr><td valign=\"top\" width=\"200\" align=\"left\"><ul><li><a href=\"edit-clanky.php?$url\">ČLÁNKY</a></li><li><a href=\"edit-ubytovani.php?$url\">UBYTOVACÍ ZAŘÍZENÍ</a></li><li><a href=\"edit-sport.php?$url\">SPORTOVNÍ ZAŘÍZENÍ</a></li><li><a href=\"edit-ostatni.php?$url\">OSTATNÍ ZAŘÍZENÍ</a></li><li><a href=\"edit-kultura.php?$url\">KULTURA</a></li><li><a href=\"edit-fotogalerie.php?$url\">FOTOGALERIE</a></li><li><a href=\"edit-pocasi.php?$url\">POČASÍ</a></li><li><a href=\"edit-seznamnovinky.php?$url\">SEZNAM UŽIVATELŮ REGISTROVANÝCH V NOVINKÁCH</a></li><li><a href=\"edit-novinky.php?$url\">NOVINKY</a></li><li><a href=\"edit.php?co=logout&$url\">ODHLÁSIT</a></li><ul></td>"; echo'<td valign="top"><h1><u>POČASÍ</u></h1>'; echo'<H2>přidání / odstranění předpovědi počasí</h2>'; $link = mysql_connect ("localhost", "user", "heslo") or die ("Nepovedlo se připojit na databázový server"); $db = mysql_select_db("db", $link) or die ("Nepovedlo se otevřít databázi"); mysql_query("SET NAMES 'cp1250'") or die('Nepodařilo se nastavit jazyk'); if (isset($_GET["smazat"])): $smazat = $_GET["smazat"]; $query = "DELETE FROM pocasi WHERE id ='$smazat'"; $result = mysql_query($query, $link) or die("SQL dotaz nešlo provést"); endif; if (isset($_GET["pridat"])): $datum = date("j. m. Y, H:i"); $pridatpocasi = $_GET["pridatpocasi"]; $query = "INSERT INTO pocasi (id, jmeno, datum, text) VALUES ('', '$aa[jmeno]', '$datum', '$pridatpocasi')"; $result = mysql_query($query, $link) or die("SQL dotaz nešlo provést"); endif; $query = "SELECT * FROM pocasi ORDER BY id DESC LIMIT 10"; $result = mysql_query($query, $link) or die("SQL dotaz nešlo provést"); echo "<table border='1' bordercolor='#000000' width='320' cellspacing='0' cellpadding='2' align='center'> "; while ($row=mysql_fetch_array($result)) echo "<tr><td><table border='0' align='center' width='280'><tr><td><div align='left'>" .$row["jmeno"]."</div></td><td><div align='right'>" .$row["datum"]."</div></td></tr><tr><td colspan='2'><br>" .$row["text"]."</td></tr></table></td><td colspan='2' align='center' valign='center'><a onclick=\"return confirm('Chcete opravdu smazat hlášení o počasí?');\" href=\"edit-pocasi.php?$url&smazat=".$row["id"]."\">SMAZAT</a></td></tr>"; echo "</table><br><br>"; mysql_free_result($result); SetLocale(LC_TIME,'cs_CZ'); $datumczech = StrFTime("%e. %B"); echo"<form action=\"edit-pocasi.php?$url\" method=\"get\"> Počasí<br><textarea name=\"pridatpocasi\" cols=38 rows=15><span style=\"font-weight:bold\">$datumczech</span> - </textarea> </p> <p> <input type=\"submit\" name=\"pridat\" value=\"Přidat\"> </form> "; echo'</td></tr></table>'; } ?> Chyba se vyskytuje při odeslání formuláře úplně na konci. Snad se v tom vyznáte. |
||
Keeehi Profil |
#2 · Zasláno: 21. 8. 2012, 13:18:28
mafos:
„Snad se v tom vyznáte.“ Abych řekl pravdu, tak spíše ne. Někde ti tam chybí uvozovky v polích $aa["heslo"] - ale nejen v tomto poli.
Chtělo by to napsat, z jaké verze na jakou jsi přešel. |
||
mafos Profil |
#3 · Zasláno: 21. 8. 2012, 17:57:20
Byl to přechod z nějaký 4 na 5.3, ale kašlem na to. Najdu nějakou jinou hotovou admin sekci a předělám to na ni. Díky
|
||
juriad Profil |
#4 · Zasláno: 21. 8. 2012, 18:17:58
21. řádek nedefinovaná proměnná $co
32., 48. řádek nedefinovaná proměnná $REMOTE_ADDR 48. řádek někdy nedefinovaná proménná $povol uvozovky viz Keeehi, ale ty by vadit neměly jsou v logu nějaké chyby? |
||
Amunak Profil |
#5 · Zasláno: 21. 8. 2012, 19:02:11
Jen taková drobnost k tomu kódu - posílat heslo metodou GET je dost nebezpečné, může zůstat třeba i v historii prohlížeče.
|
||
mafos Profil |
#6 · Zasláno: 21. 8. 2012, 23:20:05
juriad:
díky moc, zítra na to mrknu :-) kdyby to fungovalo tak by to bylo jednodušší, než to celý předělávat Amunak: jo to zůstává, jenže jak jinak když post je zakázaný? |
||
jenikkozak Profil |
#7 · Zasláno: 22. 8. 2012, 07:55:09
mafos:
„jo to zůstává, jenže jak jinak když post je zakázaný?“ a) Povolit ho. b) Přejít tam, kde zakázaný není. V době, kdy hosting stojí pár desítek korun měsíčně by to snad neměl být problém. |
||
Amunak Profil |
mafos:
„jo to zůstává, jenže jak jinak když post je zakázaný?“ Pokud by to nešlo jinak, mohl bys u klienta šifrovat heslo javascriptem a posílat v URL hash. Rozhodně ale bude vhodné zvolit jiný hosting, pokud ti nedovoluje POST. Jinak šifrování u klienta javascriptem není špatný nápad ani při použití metody POST, protože i když je POST bezpečnější, pokud nepoužíváš https, kdokoliv "po cestě" si může posílané údaje přečíst. |
||
Časová prodleva: 12 let
|
0