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

Odpowiedz Nowy wątek
2006-08-05 19:30
TOOmy
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

Pozostało 580 znaków

2006-08-05 19:33
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]


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-08-05 19:43
TOOmy
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 [email protected] 
IDENTIFIED BY ' ';

</span>

Pozostało 580 znaków

2006-08-05 20:47
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,

Pozostało 580 znaków

2006-08-05 21:16
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


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-08-05 21:19
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.';
    }
  }
?>

homepage
<font size="1">Jeśli starasz się, by Twój system był idiotoodporny, zawsze znajdzie się idiota, który jest bardziej pomysłowy od Ciebie.</span>

Pozostało 580 znaków

2006-08-06 07:53
TOOmy
0

WIELKIE DZIEKI -> ADAMO ;-)

Pozostało 580 znaków

2006-08-06 08:02
TOOmy
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

Pozostało 580 znaków

2006-08-06 09:35
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']) . '")';

Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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