Witam!
Dlaczego wyskakuje taki błąd? wyszstko robie (pisze) tak jak jest w ksiace a mimo to coś takiego wyskakuje.
Undefined variable: uzytkownik in c:\appserv\www\zastrz_baza.php on line 45
prosze o pomoc
Witam!
Dlaczego wyskakuje taki błąd? wyszstko robie (pisze) tak jak jest w ksiace a mimo to coś takiego wyskakuje.
Undefined variable: uzytkownik in c:\appserv\www\zastrz_baza.php on line 45
prosze o pomoc
widocznie źle w książce zrobili, ale ani kodu ani nawet tytułu książki nie podałeś
chodzi o ksiazke HELIONU - PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty.
// dobra, przyznawać mi się, kto mi to zielone dokleił do posta ? to nie moje słowa [diabel]
kod pliku: zastrz_baza.php
<?php
if(!isset($HTTP_POST_VARS['uzytkownik'])&&!isset($HTTP_POST_VARS['haslo']))
{
//Użytkownik musi podać identyfikator i hasło dostępu
?>
<h1>Zaloguj się</h1>
Ta strona jest zastrzeżona.
<form method = "post" action = "zastrz_baza.php">
<table border = "1">
<tr>
<th> Użytkownik </th>
<td> <input type = "text" name = "uzytkownik"> </td>
</tr>
<tr>
<th> Hasło </th>
<td> <input type = "password" name = "haslo"> </td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = submit value = "Zaloguj się">
</td>
</tr>
</form>
<?php
}
else
{
// połącz sie z MySQL
$mysql = mysql_connect( 'localhost', 'root', '' );
if(!$mysql)
{
echo 'Brak połączenia z bazą danych.';
exit;
}
// wybierz właściwą bazę danych
$mysql = mysql_select_db( 'ee' );
if(!$mysql)
{
echo 'Błąd wyboru bazy danych.';
exit;
}
// znajdź pasujący wiersz
$zapytanie = "select count(*) from ee where
uzytkownik = '$uzytkownik' and
haslo = '$haslo'";
$wynik = mysql_query( $zapytanie );
if(!$wynik)
{
echo 'Nie można wykonać zapytania.';
exit;
}
$ile = mysql_result( $wynik, 0, 0 );
if ( $ile > 0 )
{
// podana kombinacja: identyfikator i hasło jest prawidłowa
echo '<h1>Oto ona!</h1>';
echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.';
}
else
{
// kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
echo '<h1>Odejdź stąd!</h1>';
echo 'Nie jesteś uprawniony do przeglądania tych zasobów.';
}
}
?>
w wierszu poleceń wpisuje:
create database ee;
use ee;
create table ee(
uzytkownik varchar(10) not null,
haslo varchar(30) not null,
primary key (uzytkownik)
);
insert into uwierz values
('uzytkownik', 'haslo');
insert into uwierz values
( 'testowy', password('test123') );
grant select, insert, update, delete
on ee.*
to root@localhost
identified by ' ';
</span>
```
Gdybyś zaznaczył która to jest linijka 45 to było by nam wygodniej. Ale czy to coś to nie jest Notice przypadkiem? Więc wystarczy ustawić error_reporting na niższy poziom i gotowe.
Jestem jednak prawie pewien, że to i tak nie zadziała, bo skrypt wygląda na przygotowany do jakiejś archaicznej wersji PHP. W kodzie:
$zapytanie = "select count(*) from ee where
uzytkownik = '$uzytkownik' and
haslo = '$haslo'";
powinno być $_POST["użytkownik"] (względnie $HTTP_POST_VARS["użytkownik"]) i $_POST["hasło"], bo taka metoda dostępu do zmiennych globalnych jaka jest tutaj zaprezentowana jest totalnie niebezpieczna i niedostępne bodajże od PHP 4.3. Ale można włączyć, - w php.ini ustawić register_globals na on. Nie polecam,
od PHP 4 już przygotowują ludzi na odejście register_globals a ci jak już PHP 6 na CVS bez tych funkcji to jeszcze z tego korzystają...
a kod powinien tak wyglądać:
<?php
if(!isset($_POST['uzytkownik']) || !isset($_POST['haslo'])){
//Użytkownik musi podać identyfikator i hasło dostępu
?>
<h1>Zaloguj się</h1>
Ta strona jest zastrzeżona.
<form method = "post" action = "zastrz_baza.php">
<table border = "1">
<tr>
<th> Użytkownik </th>
<td> <input type = "text" name = "uzytkownik"> </td>
</tr>
<tr>
<th> Hasło </th>
<td> <input type = "password" name = "haslo"> </td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = submit value = "Zaloguj się">
</td>
</tr>
</form>
<?php
} else {
// połącz sie z MySQL
$mysql = mysql_connect( 'localhost', 'root', '' );
if(!$mysql){
echo 'Brak połączenia z bazą danych.';
exit;
}
// wybierz właściwą bazę danych
$mysql = mysql_select_db( 'ee' );
if(!$mysql){
echo 'Błąd wyboru bazy danych.';
exit;
}
// znajdź pasujący wiersz
$zapytanie = 'select count(*) from ee where
uzytkownik = "' . mysql_real_escape_string($_POST['uzytkownik']) .'" AND
haslo = "' . mysql_real_escape_string($_POST['haslo']) . '"';
$wynik = mysql_query( $zapytanie );
if(!$wynik) {
echo 'Nie można wykonać zapytania.';
exit;
}
$ile = mysql_result( $wynik, 0, 0 );
if ( $ile > 0 ) {
// podana kombinacja: identyfikator i hasło jest prawidłowa
echo '<h1>Oto ona!</h1>';
echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.';
}
else {
// kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
echo '<h1>Odejdź stąd!</h1>';
echo 'Nie jesteś uprawniony do przeglądania tych zasobów.';
}
}
?>
lepiej pozbądź się tej książki albo zanotuj zmianny i apply'uj do następnych przykładów
Ja bym to zrobił tak (powinno działać):
<?php
if(!isset($_POST['uzytkownik']) && !isset($_POST['haslo']))
{
//Użytkownik musi podać identyfikator i hasło dostępu
?>
<h1>Zaloguj się</h1>
Ta strona jest zastrzeżona.
<form method = "post" action = "zastrz_baza.php">
<table border = "1">
<tr>
<th> Użytkownik </th>
<td> <input type = "text" name = "uzytkownik"> </td>
</tr>
<tr>
<th> Hasło </th>
<td> <input type = "password" name = "haslo"> </td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = submit value = "Zaloguj się">
</td>
</tr>
</form>
<?php
}
else
{
// połącz sie z MySQL
mysql_connect( 'localhost', 'root', '' ) or die('Brak połączenia z bazą danych');
// wybierz właściwą bazę danych
mysql_select_db('ee') or die('Błąd wyboru bazy danych');
// znajdź pasujący wiersz
$zapytanie = "select count(*) from ee where
uzytkownik = '$uzytkownik' and
haslo = '$haslo'";
$wynik = mysql_query($zapytanie);
$ile = mysql_num_rows($wynik);
// albo tak jak wtedy: $ile = mysql_result( $wynik, 0, 0 );
if ( $ile > 0 ) // chociaż bardziej if($ile == 1), bo w końcu użytkownik powinien być jeden o takich danych.
{
// podana kombinacja: identyfikator i hasło jest prawidłowa
echo '<h1>Oto ona!</h1>';
echo 'Na pewno jesteś szczęśliwy, że możesz zobaczyć tę stronę.';
}
else
{
// kombinacja: identyfikator i hasło dostępu jest nieprawidłowa
echo '<h1>Odejdź stąd!</h1>';
echo 'Nie jesteś uprawniony do przeglądania tych zasobów.';
}
}
?>
WIELKIE DZIEKI -> ADAMO ;-)
chyba jednak sie pospieszyłem ;/
jeżeli zaloguje sie jako:
użytkownik : "użytkownik"
haslo : "haslo"
-> to wszystko OK ale... jeżeli jako:
użytkownik : "testowy"
haslo : "test123"
-> to nie działa ;/ a powinno
no niekoniecznie, hasło "haslo" dodałeś do bazy jawnie za to hasło "test123" zakodowałeś w bazie przy dodawaniu funkcją "password" więc tylko jedno z tych kont może działać przy tym skrypcie, zdecyduj się jak będziesz je dodawać, jeżeli je kodujesz funkcją password to ta linia kodu:
haslo = "' . mysql_real_escape_string($_POST['haslo']) . '"';
powinna wyglądać:
haslo = password("' . mysql_real_escape_string($_POST['haslo']) . '")';