Autor Zpráva
Demoniak
Profil
Dobrý den, může mi někdo prosím poradit, kde je v tomhle kódu chyba? Když ten to kód načtu do prohlížeče, tak se někdy ztratí session, pokud obnovuju stránku tak se zase objeví. vůbec nevim čim by to mohlo bejt.

require "db.php";
if ($akce==3){
$query= mysql_query("select * from inzerce_nad WHERE typ='$typ' AND pred='$pred' ORDER by vytvoreno ASC")or die(mysql_error());
$m = 0;
 while ($d=mysql_fetch_assoc($query)){
 echo "
 <div class='nadpis-".(++$m % 2 ? "licha" : "suda")."'>
 ".$d[nazev]."<br />Vložil ".$d[vlozil]." ".$d[vytvoreno]."<br /></div>";
 
 }

 if($_SESSION['prihlasen']){
echo "<script>
function zobrazSkryj(idecko){
el=document.getElementById(idecko).style;
el.display=(el.display == 'block')?'none':'block';
}
</script>
<style>
.skryvany {display: none}
</style>"; 
 echo "<center><button onclick=\"zobrazSkryj('oddil1')\">Přidat nový inzerát</button></center>
 <div id=\"oddil1\" class=\"skryvany\"><fieldset><legend>Přidat nový inzerát:</legend>
 <form action=\"?page=inzerce&akce=1\" method=\"post\">
 
 Název: <input type='' name='nazev' size=50><br /><br /><br />
 Text:<br /><br />";
 include "textarea.php";
 echo "<br />Fotky k inzerátum jsou povoleny pouze, pokud jsou umístěny na jiném serveru nebo v profilu auta.<br /><br />
 <input type='checkbox' name='povolit' checked> povolit přispívání<br /><br />
 <input type='hidden' name='typ' value='".$typ."'><input type='hidden' name='pred' value='".$pred."'>
 <input type='submit' value='Vytvořit interát'>
 </form></fieldset></div>";
 }}
 if ($akce==1){
 include "textarea_zpracuj.php";
 $vytvoreno=date('d. m. Y, G:i:s');
 $vlozil=$_SESSION['login'];
 $insert= "
 INSERT into inzerce_nad SET
 nazev='$nazev',
 text='$clanek',
 vlozil='$vlozil',
 vytvoreno='$vytvoreno',
 posl='$vytvoreno',
 povolit='$povolit',
 typ='$typ',
 pred='$pred'
 "
 ; 
 
 $insert=mysql_query($insert) or die (mysql_error());
 
$najdi= mysql_query("SELECT * from inzerce_nad where nazev=$nazev and text=$clanek and vlozil=$vlozil ");

$n= mysql_fetch_array($najdi);
$hledejid=$n[id]; 
$ulozid= mysql_query("UPDATE inzerce SET uid=$hledejid");
 echo "<script>
alert(\"Inzerát vytvořen\");
</script>
<script>
window.location.replace(\"index.php?page=inzerce&akce=2&id=".$hledejid."\");
</script>";
 }
Tori
Profil
Nikde tam nevidím session_start(). Pokud není v nějakém includovaném souboru, doporučuji přidat úplněn na začátek, ještě před require.
Nevím, jestli taky nemáte zapnuté register_globals, z bezpečnostních důvodů se to nedoporučuje. Tady by stačilo alespoň ošetřit data jdoucí do databáze proti sql injection (mysql_real_escape_string, resp. intval).
Demoniak
Profil
session_start() je na indexové stránce, do které se vkládá soubor s tímto kódem, ve všech ostatních scriptech to funguje, jen v tomto vypadává.

stránky jsou uloženy na serveru www.ic.cz, je možné že bude chyba u nich?
Demoniak
Profil
Tak bohužel, pořád to vypadává, přidal jsem na začátek session_start();. register_globals je nejspíš na serveru zapnuto jako random, mohlo by to být tim?

Opravdu se mi toto stalo uplně poprvé, načtu stránku, stisknu např. 5x F5 a jsem pořád přihlášen, stisknu F5 pošesté a stránka se chová jako bych byl odhlášen. Stisknu 2x F5 a už se zase tváří, že jsem přihlášen....

znovu pro jistotu vkládám poopravený zdroj:
<?php
session_start();

require "db.php";
if ($akce==3){
$query= mysql_query("select * from inzerce_nad WHERE typ='$typ' AND pred='$pred' ORDER by vytvoreno DESC")or die(mysql_error());

$m = 0;
echo"<br />";
 while ($d=mysql_fetch_array($query)){
 $vyhledej=mysql_query("select COUNT(*) from inzerce WHERE uid=$d[id]");
 $pocet=mysql_result($vyhledej,0);
 if($pocet==""){$pocet=0;}
 echo "
 <div class='nadpis-".(++$m % 2 ? "licha" : "suda")."'>
    <div class='panel-nadpis'><a href='?page=inzerce&akce=2&uid=".$d[uid]."'>".$d[nazev]."</a></div>
    Vložil ".$d[vlozil]."<br />
    <div class='pocet-prisp'>Příspěvků: ".$pocet."</div>
    <div class=\"vytv\">Vytvořeno: ".$d[vytvoreno]."</div>
    <div class=\"posl\">Poslední příspěvek: ".$d[posl]."</div>
 </div>";
 
 }

 if(intval($_SESSION['prihlasen'])){ 
 echo "<br /><center><button onclick=\"zobrazSkryj('oddil1')\">Přidat nový inzerát</button></center>
 <div id=\"oddil1\" class=\"skryvany\"><fieldset><legend>Přidat nový inzerát:</legend>
 <form action=\"?page=inzerce&akce=1\" method=\"post\">
 
 Název: <input type='' name='nazev' size=50><br /><br /><br />
 Text:<br /><br />";
 include "textarea.php";
 echo "<br />Fotky k inzerátum jsou povoleny pouze, pokud jsou umístěny na jiném serveru nebo v profilu auta.<br /><br />
 <input type='checkbox' name='povolit' checked> povolit přispívání<br /><br />
 <input type='hidden' name='typ' value='".$typ."'><input type='hidden' name='pred' value='".$pred."'>
 <input type='submit' value='Vytvořit interát'>
 </form></fieldset></div>";
 }}
 if ($akce==1){
 include "textarea_zpracuj.php";
 $vytvoreno=date('d. m. Y, G:i:s');
 $vlozil=$_SESSION['login'];
 $insert= "
 INSERT into inzerce_nad SET
 nazev='$nazev',
 text='$clanek',
 vlozil='$vlozil',
 vytvoreno='$vytvoreno',
 posl='$vytvoreno',
 povolit='$povolit',
 typ='$typ',
 pred='$pred'
 "
 ; 
 
 $insert=mysql_query($insert) or die (mysql_error());
 
$najdi= mysql_query("SELECT * from inzerce_nad where nazev='$nazev' and text='$clanek' and vlozil='$vlozil' ")or die(mysql_error());

$n= mysql_fetch_array($najdi);
$hledejid=$n[id]; 
$ulozid= mysql_query("UPDATE inzerce_nad SET uid=$hledejid where id=$hledejid");
 echo "<script>
alert(\"Inzerát vytvořen\");
</script>
<script>
window.location.replace(\"index.php?page=inzerce&akce=2&uid=".$hledejid."\");
</script>";
 }
 
if ($akce==2){
$nadpis= mysql_query("select * from inzerce_nad where uid=$uid ");
$n=mysql_fetch_array($nadpis);
echo "<center><div class='obsah-nadpis'>Detail inzerátu ".$n[nazev]."</div><br /></center>
<div class='nadpis-suda'><br />&nbsp;&nbsp;&nbsp;".$n[vlozil]." <div class='vytv'>Vytvořeno: ".$n[vytvoreno]."</div></div>
".$n[text]."<br /><hr width='545' color='#ffffff'><br />
";
$dotaz= mysql_query("select * from inzerce where uid='$n[id]' ");
 while ($h=mysql_fetch_array($dotaz)){
echo "
<div class='nadpis-suda'><br />&nbsp;&nbsp;&nbsp;".$h[vlozil]." <div class='vytv'>Vytvořeno: ".$h[vytvoreno]."</div></div>
".$h[text]."<br /><hr width='545' color='#ffffff'><br />
";  
 }
 if(intval($_SESSION['prihlasen'])){ 
echo "<center><button onclick=\"zobrazSkryj('oddil1')\">Přispět</button></center>
 <div id=\"oddil1\" class=\"skryvany\"><fieldset><legend>Přidat nový inzerát:</legend>
 <form action=\"?page=inzerce&akce=4\" method=\"post\">
 
 Text:<br /><br />";
 include "textarea.php";
 echo "<br />Fotky k inzerátum jsou povoleny pouze, pokud jsou umístěny na jiném serveru nebo v profilu auta.<br /><br />
 <input type='checkbox' name='povolit' checked> povolit přispívání<br /><br />
 <input type='hidden' name='uid' value='".$n[uid]."'>
 <input type='submit' value='Vytvořit interát'>
 </form></fieldset></div>"; 
 }}
if ($akce==4){
 include "textarea_zpracuj.php";
 $vytvoreno=date('d. m. Y, G:i:s');
 $vlozil=$_SESSION['login'];
 $vloz= "
 INSERT into inzerce SET
 text='$clanek',
 vlozil='$vlozil',
 vytvoreno='$vytvoreno',
 uid='$uid'
 "
 ;
$vloz=mysql_query($vloz) or die (mysql_error());
$ulozposl= mysql_query("UPDATE inzerce_nad SET posl='$vytvoreno' where id=$uid");  
 echo "<script>
alert(\"příspěvek přiložen\");
</script>
<script>
window.location.replace(\"index.php?page=inzerce&akce=2&uid=".$uid."\");
</script>";
 }
 
?>
xmark
Profil
Ten kód se mi rozhodně luštit nechce a vzhledem k těm includům by to ani nemělo smysl. Zkus si udělat nejjednodušší stránku, kde to otestuješ. Jestli to bude fungovat, pak hledej chybu v php.
Demoniak
Profil
v includech chyba neni, všude jinde fungujou naprosto normálně
xmark
Profil
Demoniak:
To na mé ochotě prokousávat se 120 řádky php nic nemění, sorry. Zkopíruj si to do nového souboru a zredukuj na minimum. Až to bude fungovat, přidávej další. Není to moc inteligentní cesta, ale funguje a odhalí i chybu, jejíž podstatu nechápeš.
Demoniak
Profil
Tak nejspíš vyřešeno, zkusil jsem jiné stránky, na kterých už jsem dlouho nepracoval a fungovaly 100% a dělá to totéž, takže je nejspíš chyba na straně serveru www.ic.cz

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: