Undefined variable: uzytkownik in c:\appserv\www\zastrz_baza

0

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

0

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]

0

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> ```
0

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,

0

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

0

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.';
    }
  }
?>
0

WIELKIE DZIEKI -> ADAMO ;-)

0

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

0

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']) . '")';

1 użytkowników online, w tym zalogowanych: 0, gości: 1