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? :-\
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
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...
Cytat: krzyszp w 19 Luty 2009, 01:45
$results = $mysql_num_rows($qresults);
Drobny krzak.
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...
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 :)
Dzięki :)
Odpowiedź bardzo przydatna - jutro będę tworzył dalej...