Autor Zpráva
jacob
Profil
Mám taký problém: na spracovanie výsledkov z db používam while($row = mysql_fetch_array($ok))... Na localhoste mi to behá v poriadku ale ked to uploadnem na server vypisuje "warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/storage/users/q/u/i/quinta/registration.php on line 23". Okrem toho neskôr chcem pouziť header("Location: ... ") ale tam mi to vypise warning "headers already sent on line 23...", na ktorej sa používa iba while($row = mysql_fetch_array($ok)): ... takže čo s tým urobiť? Na localhoste to ide dobre ale na host.sk aj na php5.sk to vypisuje toto.
Marty
Profil
Zkontroluj, zda máš stejnou databázi na serveru jako doma, zda jsou identické názvy všech proměných.

Header musí být v kódu co nejvýše, nesmí se před jeho vykonáním dělat jakýkoli výstup na stránku (ani include), kdyžtak přidej kód.
jacob
Profil
Include sa počíta ako výstup na stránku? Ja predtým používam include "scripts/mysqlConnect.php"; , môže to byť príčina toho druhého warningu?

Zkontroluj, zda máš stejnou databázi na serveru jako doma
Nechápem, čo tým myslíš... :(
Marty
Profil
Include sa počíta ako výstup na stránku? Ja predtým používam include "scripts/mysqlConnect.php"; , môže to byť príčina toho druhého warningu?

Obávám se že ano, alespoň mě includování spojení s databází před přesměrováním nefungovalo.

Zkontroluj, zda máš stejnou databázi na serveru jako doma
Nechápem, čo tým myslíš... :(


No zda třeba nemáš jiné názvy sloupců, doma, než na serveru.
jacob
Profil
No zda třeba nemáš jiné názvy sloupců, doma, než na serveru.
Aha, ale to nie, určite, ja si nechávam generovať SQL z PHPmyAdmin.

Obávám se že ano, alespoň mě includování spojení s databází před přesměrováním nefungovalo
To by mohlo byť ono, vyskúšam a uvidím. Neviete, či sa podobne správa aj require?
jacob
Profil
V include to nie je, robí to to isté aj keď ho nahradím...
Marty
Profil
Pak (pokud to je možné) pošli zdrojový kód, jinak lze jen těžko hádat.
jacob
Profil
No dobre, takže celá táto časť vyzerá takto:


include "scripts/mysqlConnect.php"; // pripojenie k MySQL
// zistovanie ci v db neexistuju rovnake udaje
$sql = "SELECT surname, nick, mail, icq FROM users";
$ok = mysql_query($sql); // vykonanie poziadavky
$right = true;
while($row = mysql_fetch_array($ok)):
if($row['surname'] == $surname):
$right = false;
$sup = "surname";
endif;
// este zopar podobnych if-ov
endwhile;

// zapis do db...
if($right):
$sql = "INSERT INTO users
SET name = '$name', surname = '$surname', nick = '$nick', pswd = '$pswd', mail = '$mail', icq = '$icq'";
$ok2 = mysql_query($sql); // vykonanie poziadavky
endif;

// presmerovanie podla spravnosti zapisu
if ($ok2):
$sup = "registred";
else:
if(!isset($sup)):
$sup = "failed";
endif;
endif;

// presmerovanie >> konecne
$path = pathinfo($_SERVER['PHP_SELF']);
header("Location: http://" . $_SERVER['SERVER_NAME'] . $path[dirname] . "/regerror.php?". $sup);
Kalda
Profil *
Někde se tam dostal špatný SQL dotaz, protože to vypisuje supplied argument is not a valid MySQL result resource
To headers already sent je způsobeno tím, že PHP vypsalo chybové hlášení -> už byl poslán text, takže není možné poslat hlavičky.

Nejjednodušší kontrolou je, nechat si vypisovat i SQL dotazy a v nich hledat chybu.
jacob
Profil
Nejjednodušší kontrolou je, nechat si vypisovat i SQL dotazy a v nich hledat chybu.
Ako to mám urobiť? Veď ja tam používam len dva dotazy, a obidva sú vypísané hore... a v nich ja chybu nevidím
Kalda
Profil *
Myslel jsem, nechat si vypisovat postupně vše při průchodech. Např., jestli si tam náhodou někde něco nepřepíšete atd. (i zde není celý kód)
Každopádně po přečetní zdrojového kódu "nechápu":
<?
$sql = "SELECT surname, nick, mail, icq FROM users";
$ok = mysql_query($sql); // vykonanie poziadavky
$right = true;
while($row = mysql_fetch_array($ok)):
...
?>
Postupně procházíte celou databází řádek po řádku a provádíte porovnání. Jako efektivnější bych viděl vhodný SQL dotaz, který se zeptá, zda existují v databázi příslušná data. Jednak nemusíte mezi SQL a PHP posílat všechna data a jednak ušetříte v PHP čas potřebný k porovnávání. V SQL totiž v nejhorším případě pro porovnání musíte projít všechny řádky (což stejně děláte kvůli výpisu) a obecně při vhodné struktuře a indexech ani není nutné projití všech řádků.
jacob
Profil
Jako efektivnější bych viděl vhodný SQL dotaz, který se zeptá, zda existují v databázi příslušná data

Ak mi napíšete ako na to, kľudne... ja by som to najviac testoval cez mysql_num_rows ale tak by som nezistil, presne ktoré dáta sú zhodné. Ale aj tak to v podstate nerieši môj problém, pretože nechápem, čo na tom vadí... je to síce nevýhodné, ale malo by byť funkčné, nie?
Robotus
Profil *
zkusil bych misto SELECT surname, nick, mail, icq FROM users zadat SELECT * FROM users pokud chyba trva je spatne jmeno tabulky/tabulka vubec neexistuje nebo spatne prihlaseni do mysql pokud chyba zmizla je spatne nazev nekteryho sloupce/sloupec neexistuje ;) pak bych teprv resil data
Anonymní
Profil *
Problémem může být verze PHP 5.0.5, poté co jsem ji nainstaloval na lokal nechodí žádný MySQL_Fetch_Array. Více též na hulan.cz.
jacob
Profil
Robotus
Mal si pravdu, tá tabulka jednoducho neexistovala... myslel som si, že som je vytvoril, ale vznikla tam chyba a nevytvorila sa a nenapadlo mi skontrolovať to :( . Takže túto tému uzamykám, naozaj trápna chyba.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0