Autor Zpráva
PHP_Nemaster
Profil
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
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
nemám práva na vypnutí hlášení chyb
Vážně? Error_reporting se dá vypnout i ve skriptu ...
AM_
Profil
Error_reporting se dá vypnout i ve skriptu ...
Ne každý hosting povoluje ini_set
Error_404
Profil
Jak rika AM_: Vsechny Upozorneni jsou od toho, aby upozornovali na chybu. Takze zadny vypinani :)
Nox
Profil
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
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
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
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
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
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
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 *
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
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 *
„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
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.

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:

0