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">&nbsp;<td valign="top">&nbsp;
                                                <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&amp;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
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
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
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
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: