Autor | Zpráva | ||
---|---|---|---|
PHP_Nemaster Profil |
#1 · Zasláno: 29. 5. 2009, 18:47:35 · Upravil/a: PHP_Nemaster
Dobrý den,
mám takový problém: Nevíte, jak se dá nějak zrušit hlášení upozornění, když používám hosting? ( tzn. nemám práva na vypnutí hlášení chyb. A popravdě to ani nechci vypnout. ) Mám takovýto kód ( je funkční ) : _______________________________________ <?php session_start(); include "connect.php"; if ( isset( $_POST['submit'] ) ) { $query = "SELECT username, password FROM Profiles WHERE password = '".$_POST['password']."' AND username = '".$_POST['username']."'; "; $result = mysql_query( $query ); } if ( mysql_num_rows( $result ) == 1 ) { $_SESSION['username'] = $_POST['username']; $_SESSION['password'] = $_POST['password']; } ?> <html> <form action="session.php" method="post"> Name: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit" value="submit"> </form> </html> ________________________________________________________ Ale hlásí mi to: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /3w/czweb.org/a/amaga/login.php on line 10 Hodně to kazí vzhled webu a červené pozadí se mi dělat nechce. Když jsem prý zadal nějaký nesprávný typ argumentu, jak je možné, že ten kód vůbec funguje? Předem děkuji za odpověd'. |
||
AM_ Profil |
#2 · Zasláno: 29. 5. 2009, 18:54:04
Jak se zbavit chyby? opravit kód, ne ji potlačit. V dotazu je zřejmě chyba, tak si ji najdi (možná tabulka Profiles nezačíná na velké P)
|
||
Mastodont Profil |
#3 · Zasláno: 29. 5. 2009, 18:57:01
nemám práva na vypnutí hlášení chyb
Vážně? Error_reporting se dá vypnout i ve skriptu ... |
||
AM_ Profil |
#4 · Zasláno: 29. 5. 2009, 19:02:46
„Error_reporting se dá vypnout i ve skriptu ...“
Ne každý hosting povoluje ini_set |
||
Error_404 Profil |
#5 · Zasláno: 29. 5. 2009, 19:03:41 · Upravil/a: Error_404
Jak rika AM_: Vsechny Upozorneni jsou od toho, aby upozornovali na chybu. Takze zadny vypinani :)
|
||
Nox Profil |
#6 · Zasláno: 29. 5. 2009, 19:10:46
AM_
„Ne každý hosting povoluje ini_set“ Myslel jsem, že http://cz2.php.net/manual/en/function.error-reporting.php je jiný způsob a nemělo by to na tom být závislé, nebo se pletu? |
||
PHP_Nemaster Profil |
#7 · Zasláno: 29. 5. 2009, 19:39:37
No ale právě že ten kód funguje, já tam žádnou chybu nevidím. Dříve jsem používal úplně stejné kódy a nic to nehlásilo. Podle toho hlášení by však ta chyba měla být if ( mysql_num_rows( $result ) == 1 ), ale nechápu kde...
AM_ : Profiles začíná na velké P, tím jsem si jistý. |
||
PHP_Nemaster Profil |
#8 · Zasláno: 29. 5. 2009, 19:44:05
„Myslel jsem, že http://cz2.php.net/manual/en/function.error-reporting.php je jiný způsob a nemělo by to na tom být závislé, nebo se pletu?“
Děkuju za ten odkaz, už to zmizelo. |
||
Nox Profil |
#9 · Zasláno: 29. 5. 2009, 20:00:47
PHP_Nemaster
Že já blbec to sem psal.... "A popravdě to ani nechci vypnout." tak proč to vypínáš? Máš to prostě nějak špatně, tak si to oprav - nauč se opravovat kód a přemýšlet u toho, ikdyby to teďka nebyla závažná věc, naučíš se něco nového a příště závažnější problém opravíš hned (samozřejmě ošetřeny by měly být i zdánlivé triviality) Například - už máš query nachystaný v proměnné, tak si tu proměnnou vypiš a zadej do admina, buď se hned dozvíš co je špatně, nebo ti aspoň napoví, kde hledat Mj. máš ten query náchylný na SQL injection |
||
AM_ Profil |
#10 · Zasláno: 29. 5. 2009, 20:09:27
„Děkuju za ten odkaz, už to zmizelo.“
tak to blahopřeji, že jsi šikovně schoval chybu v programu. Chybu v tom dotazu máš, jinak by ti vracel validní mysql zdroj. Pokud to funguje i bez toho, tak to jen znamená, že je to napsané snad ještě hůř, protože tam máš kus kódu ještě navíc s dotazem do DB, který tam vůbec není potřeba. |
||
PHP_Nemaster Profil |
#11 · Zasláno: 30. 5. 2009, 09:19:59
Nox: Pokusil jsem se to provést v adminovi. "Napověděl" mi, že je to někde na řádku jedna, ale pořád nevím kde... :(
AM_ : Je to kód, který ověřuje, jestli se v databázi nachází zadané uživatelské jméno, ty dotazy SELECT a mysql_query jsou ( asi )nezbytné, a mysql_num_rows kontroluje, jestli tam to jméno je. Dříve mi ten kód fungoval bez upozornění, začalo to před dvěma dny... :( ___________________________________________________________________ Error SQL-query: "SELECT username, password FROM Profiles WHERE password = '".$_POST[ 'password']. "' AND username = '".$_POST[ 'username']. "'; " MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"SELECT username, password FROM Profiles WHERE password = '".$_POST['password'].' at line 1 _____________________________________________________________________ |
||
gmvasek Profil |
#12 · Zasláno: 30. 5. 2009, 16:22:09
Jenže do phpMyAdmina musíš dosadit konkrétní hodnoty, tzn. místo toho tvého dotazu něco jako:
SELECT username, password FROM Profiles WHERE password = 'bar' AND username = 'foo' |
||
ondry Profil * |
#13 · Zasláno: 31. 5. 2009, 16:59:21
co vím tak se dá použít znak @ před použitím f-ce a nic by to vypsat nemělo
|
||
AM_ Profil |
#14 · Zasláno: 31. 5. 2009, 21:08:52
„co vím tak se dá použít znak @ před použitím f-ce a nic by to vypsat nemělo“
tuto větu úplně ignorujte, chyby se řeší, a ne schovávají. Chyba tam pak bude stejně. jak píše gmvasek, dosaď si tam konkrétní hodnoty,nebo ještě lépe si za provedení query nech vypsat echo mysql_error(), to ti taky ukáže, k jaké přesně chybě došlo. |
||
ondry Profil * |
#15 · Zasláno: 1. 6. 2009, 21:12:10
„„co vím tak se dá použít znak @ před použitím f-ce a nic by to vypsat nemělo““
„tuto větu úplně ignorujte, chyby se řeší, a ne schovávají. Chyba tam pak bude stejně.“ „jak píše gmvasek, dosaď si tam konkrétní hodnoty,nebo ještě lépe si za provedení query nech vypsat echo mysql_error(), to ti taky ukáže, k jaké přesně chybě došlo.“ já to nepoužívám, ale když jsem se s tím setkal tak to bylo použito kvůli tomu aby v případném varování nebyly vypsány citlivé informace jako název proměnných, názvy tabulek, sloupců,... |
||
AM_ Profil |
#16 · Zasláno: 1. 6. 2009, 22:03:46
„já to nepoužívám, ale když jsem se s tím setkal tak to bylo použito kvůli tomu aby v případném varování nebyly vypsány citlivé informace jako název proměnných, názvy tabulek, sloupců,...“
Správně se programuje tak, že při vývoji je zapnuté maximální hlášení chyb a v ostrém provozu se zobrazování chyb vypne centrálně (a nejlépe nasměruje do souboru). Zavináč bych toleroval jen ve velice výjimečných případech, kde se možné chyby nelze zbavit a je, zdůrazňuji, důsledně ošetřena příslušným skriptem. Takže u začátečníků nejlépe vůbec, obzvláště v tomto případě, kde je nějaká bota v dotazu do DB a náhodou to i bez jeho provedení nějak funguje. |
||
Časová prodleva: 15 let
|
0