Autor Zpráva
La_ToRaNTe
Profil
K vypsáni dat z databáze guestbooku používám tenhle jednoduchej kod:

$query = "SELECT * FROM ".$gbook." ORDER BY id desc";
$result = mysql_query($query);

while($row = mysql_fetch_array($result)):

echo "<div>\n<p>".$row['message']."</p>\n</div>\n";
endwhile;


Vždycky to fungoval, ale najednou to nejde. Nevíte proč?
Má to něco společněho s "register_globals" mi píše program.. Nechápu to. :-(
thingwath
Profil
zkus tu funkci mysql_fetch_array napsat takto:


while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
...
}


(ten zápis s : a endwhile je asi ok, ale dělá se mi z něho zle :-))
krteczek
Profil
Nejsem si jistý na 100% ale podle mne je chyba v tomhle:
$query = "SELECT * FROM ".$gbook." ORDER BY id desc";
ty předáváš proměnnou z jiného skriptu ( z jiné stránky ) a na službě ktrou používáš změnili asi verzi php, nebo zpřísnili pravidla a zakázali používat globální proměnné. To pro tebe znamená že pokud předáváš nějakou proměnnou najdeš ji bud v poli$_POST["promenna"] , $_GET["promenna"] nebo v $_REQUEST["promenna"]
takze nejprva ji musíš předat a potom ji muzeš použít.
jo a pokud na domácím kompu používaš nějakou verzi apache, php a mysql tak doporučuji stáhnout nejnovější stabilní verzi a a v php.ini nastavit parametry pro výpis chyb na:
error_reporting = E_ALL
tím bude php sdílnější a ty budeš schopný odstranit spoustu chyb ještě před odesláním skriptů na server
nebo si v php.ini nastav hodnotu register_globals = Off , s největší pravděpodobností ji máš na On
( to abys nemusel měnit apache a ostatní )
krteczek
mackopu
Profil
krteczek má svatou pravdu - problém je skutečně v předávané proměnné $gbook. Před časem jsem měl stejnou potíž, a protože jsem nechtěl přepisovat stovky stránek, domluvil jsem se se správcem hostingového serveru, aby mi povolil globální proměnné. Teď je trend je zakazovat z důvodu větší bezpečnosti. Pokud ale neděláš e-banku a podobně, není to nutné.
Jestliže ale tvé stránky nejsou příliš rozsáhlé, vyplatilo by se to přepsat - v tomto případě na $_GET["gbook"] nebo $_POST["gbook"], podle toho jestli proměnnou předáváš formulářem nebo linkem, případně podle toho, jakou action máš nastavenu ve formuláři.
La_ToRaNTe
Profil
Ta proměná $gbook je na začátku toho scriptu napsaná takhle.. .$gbook = "gbook"; .. takze v tom bych to neviděl :(
llook
Profil
V tom případě bych chybu viděl jinde. Nevidím tam nic dalšího, co by mohlo souviset s register_globals. Jaké ti to vypisuje chyby?
La_ToRaNTe
Profil
llook
Ted zrovna nic, na fbi ( kde to testuju ) jim nejde databáze. Ale psalo to neco jako "suplied argument" ..
A Zend studio mi říká, ze tady mají byt dvě rovnáse..

while($row == mysql_fetch_array($result)):

Ale kdyz je tam dám, tak to pak nefunguje vůbec ..
La_ToRaNTe
Profil
Ale říkám si, ze to bude asi tou databazi co maji na FBI, doma na localhostu mi to normálně funguje..
thingwath
Profil
To ti Zend říká pěknou blbost. Zkoušel si tam dodat ten parametr co jsem ti radil?
La_ToRaNTe
Profil
thingwath
jj, zkoušel.. Doma na localhostu to funguje pořád stejně a na tom zkušebnim hostingu nevim, nefunguje ted databaze.
Píše to :
Chyba
#2002 - Can't connect to local MySQL server through socket '/database/mysql/users/mysql.sock' (111)

Asi to bude celkove tím hostingem. Doufám, ze sem vás tu neotravoval, a pokud ano, tak se omlouvám.
thingwath
Profil
Pokud je na hostingu ta db na localhostu (skutečně?), tedy jesti to máš správně nastavené, tak je to skutečně chcíplá databáze.

Pak se maximálně podívat, jakou verzi máš doma a co tam mají oni (hlavně PHP).
La_ToRaNTe
Profil
thingwath
Mám to nastavené dobře .. :-/
llook
Profil
neco jako "suplied argument" ..
To by mohlo být "suplied argument is not a valid resource", pak by byla chyba někde při připojování a vybírání databáze - špatný host, jméno, heslo nebo název databáze.

To co ti radilo Zend studio je blbost - jenom upozorňovalo, že pokud je v podmínce přiřazování, pak jde většinou o překlep. Ale v tomhle případě to tak neni.
pr .
Profil *
google pr main
rabbit
Profil
Teď je trend je zakazovat z důvodu větší bezpečnosti. Pokud ale neděláš e-banku a podobně, není to nutné.

Sorry mackopu, ale dovolím si s tebou hrubě nesouhlasit! Něco takového jako
$query = "SELECT * FROM ".$gbook." ORDER BY id desc";

smrdí vyloženě sql injection. A i když tam může místo $gbook napsat $_GET['gbook'], tak by ho to mohlo aspoň trknout, aby si ten vstup napřed otestoval.
Toto téma je uzamčeno. Odpověď nelze zaslat.