Autor Zpráva
Darth
Profil
Dobrý den,
chci se zeptat.Programoval jsem si vlastní počítadlo návštěvnosti přes databázi,kde bude každá Ip započítána pouze jednou denně.Při mém přístupu se normálně script spustí a přičte se číslo vše fukční.Ale ostatním se to stále načítá ,jako kdyby někde byla nekonečná smyčka a ani se nestačí připsat do databáze jejich Ip ani Datum.
Pro orientaci dodávám script:

<?
$Ip=$REMOTE_ADDR;
$Datum=Date(d.m.Y);
$pripojeni=MySQL_Connect("mysql.wz.cz","databaze","heslo");
MySQL_Select_DB("databaze",$pripojeni);
if (!$pripojeni):
echo "Nepodařilo se připojit k databázi!";
endif;
$vysledek=MySQL_Query("Select * from Overeni");
while($zaznam=MySQL_Fetch_Array($vysledek))
{while($zaznam[Ip]):
if ($zaznam[Ip]==$Ip) {$cislo=$zaznam[Ip];break;}endwhile;
while($zaznam[Datum]):
if ($zaznam[Datum]==$Datum) {$cislo1=$zaznam[Datum];break;}endwhile;
}
if ($Ip!=$cislo && $Datum!=$cislo1):
$provedeno=true;
$vykonani=MySQL_Query("Insert into Overeni (Ip,Datum) values ('".$Ip."', '".$Datum."');");
$pocet=MySQL_Query("UPDATE POCET set Pocet=$celkove+1");
$vysledek5=MySQL_Query("Select * from POCET");
$pocet1=MySQL_Fetch_Array($vysledek5);

elseif ($Ip==$cislo && $Datum!=$cislo1):
$provedeno=true;
$vykonani=MySQL_Query("Insert into Overeni (Ip,Datum) values ('".$Ip."', '".$Datum."');");
$vysledek3=MySQL_Query("Select * from POCET");
$celkove=MySQL_Fetch_Array($vysledek3);
$pocet=MySQL_Query("UPDATE POCET set Pocet=$celkove+1");
$vysledek5=MySQL_Query("Select * from POCET");
$pocet1=MySQL_Fetch_Array($vysledek5);

elseif ($Ip!=$cislo && $Datum==$cislo1):
$provedeno=true;
$vykonani=MySQL_Query("Insert into Overeni (Ip,Datum) values ('".$Ip."', '".$Datum."');");
$vysledek3=MySQL_Query("Select * from POCET");
$celkove=MySQL_Fetch_Array($vysledek3);
$pocet=MySQL_Query("UPDATE POCET set Pocet=$celkove+1");
$vysledek5=MySQL_Query("Select * from POCET");
$pocet1=MySQL_Fetch_Array($vysledek5);

elseif ($Ip==$cislo && $Datum==$cislo1):
$provedeno=false;
$vysledek4=MySQL_Query("Select * from POCET");
$celkove1=MySQL_Fetch_Array($vysledek4);

endif;
?>
<? if ($provedeno): echo "$pocet1[Pocet]"; elseif (!$provedeno): echo "$celkove1[Pocet]"; endif;?>

Nevíte,kde mám chybu prosím?

Tabulka Overeni ma hodnoty Ip a Datum a tabulka POCET ma hodnotu Pocet.
Peca
Profil
Nebudu to pročítat celé. Co je toto za nesmysl?
while($zaznam[Ip]): if ($zaznam[Ip]==$Ip) {$cislo=$zaznam[Ip];break;} endwhile;
Kdy se ten cyklus má zastavit, když $zaznam[Ip] má pořád stejnou hodnotu?
Vůbec se mně to zdá napsané nějak divně...
24k
Profil *
Zacal bych tim ktery zapis se vubec provede a to velice snadno ( echo "insert1 .."; )
a pote bych vyuzil pomocne fce mysql_error(); pripadne mysql_errno(); a budeme moudreji.

Dale bych doporucil vyhnout se taky konstrukci IF - ENDIF, zhorsuje to citelnost skriptu.

Takze se pak ozvete dale, takhle se to nechce asi nikomu zkoumat
Darth
Profil
2Peca: Mno to pole nemé pořád stejnou hodnotu, když se to vypisuje z databáze nebo jo? Protože při každé návštěvě někoho, kdo tam v ten den ješte nenavštívil danou stránku, odešle se jeho ip a datum návštěvy do databáze do hodnoty Ip ,takže by měla mít pro každý řádek jinou hodnotu...Proto příkaz while, aby mi vypsal všechny hodnoty Ip...A zastaví se buď,když se vypíší již všechny hodnoty,tím dostane $zaznam hodnotu false,nebo když najde hodnotu,která se bude shodovat s $Ip ze scriptu.

Pokud mám mylnou představu,prosím opravte mě..
Darth
Profil
mysql_error() nevypisuje vůbec žádné chyby ... Jak říkám mně na počítači vše funguje,ale ostatním se stránka pouze načítá a nenačte.Bude chyba v nějaké smyčce,která nemá konec a já nevím jak ji napsat jinak,protože nevím ani která to je.Nejspíše to funguje jen člověku,který se na tu stránku podívá jako první,protože má zatím databázi prázdnou.Ale poté co se na tu stránku podívá se zapíše jeho Ip a datum a pro ostatní už while projíždí hodnotu Ip a Datum v databázi a nejspíš je while nastaven tak ,že neví ,kdy se zastavit :( nechám tam ty errory na vypsání a je to www.sk8-bakov.wz.cz/pocitadlo.php pokud se vám tam vypíše nějaký error, tak řekněte ,poněvadž mně se to zapsalo jako prvímu ,takže mi vše funguje....
Peca
Profil
Podívej se na ten cyklus znova. Máš snad pocit, že se v něm hodnota $zaznam[Ip] mění? Já na tom řádku žádný přístup do databáze nevidím.
Darth
Profil
Už to mám celý hotový...Předělal sem cyklus,a pak sem poupravil zbytek mírně..Děkuji za pomoc..
c0
Profil *
2 Darth: hele chlape, trochu hygieny v tom kodu, musel jsem si to celý porovnat abych tomu porozuměl, se pak nediv, ze se v tom nevyznas sam a nemuzes najit chybu, i komentare neskodi, ver mi
Toto téma je uzamčeno. Odpověď nelze zaslat.

0