Dla odmiany - problem z php :-)

Zaczęty przez krzyszp, 19 Luty 2009, 01:45

krzyszp

No i przydażyło mi się...

Jako część zupełnie innego projektu, muszę zrobić wstawkę w php do strony (chodzi o logowanie). W jednym z podręczników znalazłem przykładowy skrypt, jednak wywala mi się na jenej linii.
Odpowiednia wstawka wygląda tak:


<?php 
//session_start();
if(isset($_POST['username']) && isset($_POST['password']))
{
  
// if user just try to login
  
$username $_POST['username'];
  
$password $_POST['password'];
  
  
$link mysql_connect('192.168.1.17','user','pass') or die ("Nie mozna sie polaczyc");
  
mysql_select_db('clients') or die ("Nie mozna wybrac bazy danych");
  
//$query = "select * from clients where Login = ',$username' and password = ',$password'";
  
  
$query "select * from clients where Login =  '".mysql_real_escape_string($username)."' and password =   '".mysql_real_escape_string(md5($password))."'";

  
$qresults mysql_query($query$link);
  
  
$results $mysql_num_rows($qresults);
  if (
$results 0)
   {
    
// if user name and password are correct;
    
$_SESSION['UserPerm'] = $username;
   }
}
?>

<html>
<body>
<h1>Welcome! </h1>
<?php 
if(isset($_POST['UserPerm']))
{
echo 
'dfgfdg''dfgfdg';
//echo stripslashes($numrows)
echo "You are logged as "$_POST['UserPerm'];
echo 
'<br>';
echo 
'<a href="logoff.php">Login off</a>';
echo 
'<br>';
}
else
{
  
// if user not logged or log-off recently
  
echo 'You are not logged.';
  echo 
'<br />';
}


// login form
echo '<form method="post" action="login_main.php">';
echo 
'<table>';
echo 
'<tr><td>Login:</td>';
echo 
'<td><input type="text" name="username"></td></tr>';
echo 
'<tr><td>Password:</td>';
echo 
'<td><input type="text" name="password"></td></tr>';
echo 
'<input type="submit" value="Login"></td></tr>';
echo 
'</table></form>';

echo 
'<br>' ;
echo 
'<a href="only_users.php">Only for registered users</a>';
?>

</body>
</html>


Niestety, przy próbie wywołania wywala się takim błędem:


Fatal error: Function name must be a string in /var/www/customers/m/login_main.php on line 17


czyli błąd jest w tym miejscu:


$results = $mysql_num_rows($qresults);


Ma ktoś może jakieś sugestie?  :-\

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

Mchl

Ja mam:


$results = mysql_num_rows($qresults);


A poza tym, polecam zamiast mysql używać mysqli
http://pl.php.net/manual/en/book.mysqli.php

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

krzyszp

Cytat: Mchl w 19 Luty 2009, 08:06
Ja mam:


$results = mysql_num_rows($qresults);



A co z tym jest źle???
Przecież do smiennej $results ma być podstawiona ilość otrzymanych wierszy w wyniku zapytania...

Cytat: Mchl w 19 Luty 2009, 08:06

A poza tym, polecam zamiast mysql używać mysqli
http://pl.php.net/manual/en/book.mysqli.php

Niestety, w tym projekcie muszę używać MySQL'a - wymóg skorzystania z istniejącej bazy, do której dane są dodawane przez oprogramowanie klienckie...

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

jurdziol

Pozdrawiam

krzyszp

No, to teraz zwątpiłem...
Jeśli zapiszę:


$results = mysql_num_rows($qresults);


to mam błąd "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/customers/m/login_main.php on line 17" (w tej właśnie linijce).

Natomiast po wywołaniu:


$results = $mysql_num_rows($qresults);


Mam błąd "Fatal error: Function name must be a string in /var/www/customers/m/login_main.php on line 17"...

Bardzo proszę, aby ktoś mi wytłumaczył, gdzie jest błąd, lub lepiej (dla pierwszej wersji), jak "dostać" prawidłową ilość zwróconych wierszy...

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka

Mchl

No to krok po kroku i od tyłu :P

MySQLi to po prostu nowa wersja biblioteki do obsługi MySQL z poziomu PHP. Ma kilka usprawnień i jest ok 40% wydajniejsza.

Błąd który miałeś wynikał dokładnie z tego krzaka $. $ oznacza zmienną, a mysql_num_rows() jest funkcją.

Kolejny błąd "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/customers/m/login_main.php on line 17" oznacza, że coś nie tak poszło z zapytaniem w tej linijce

$qresults = mysql_query($query, $link);


aby dowiedzieć się co, zmień ją na taką

$qresults = mysql_query($query, $link) or die(mysql_error().": $query");


powinno to wyświetlić informację o błędzie z serwera MySQL i samą treść zapytania.

Jeszcze wyżej masz

$query = "select * from clients where Login =  '".mysql_real_escape_string($username)."' and password =   '".mysql_real_escape_string(md5($password))."'";

O ile przepuszczanie $username przez mysql_real_escape_string jest wskazane, o tyle przepuszczanie przez nią wyniku funkcji md5() nie ma żadnego sensu. Cyfry szesnastkowe nie wymagają specjalnej obsługi :)

W nagłych wypadkach wzywać przez: mail: mchlpl[at]gmail.com | PM|mchl[a]boincatpoland.org

krzyszp

Dzięki  :)

Odpowiedź bardzo przydatna - jutro będę tworzył dalej...

Fajne zegarki :)
Należę do drużyny BOINC@Poland
 Moja wizytówka