Tanja: ein kleiner fehler der unauffindbar scheint

hi leute
bin absoluter Anfänger in PHP und hab da jetzt ein riesen problem, hab mir selbst ein Loginskript durch alle möglichen Foren im internet zusammengestellt. Wenn ich es jetzt ausführe zeigt es immer:

Notice: Undefined index: benutzer in .. on line 45
Notice: Undefined index: benutzer in .. on line 47
Notice: Undefined index: .. on line 48

Ich finde einfach keine antwort, hab wirklich schon überall nachgesehn. Hier mein Code:

<?php
session_start();

error_reporting(E_ALL);
ini_set('display_errors', 1);

$db = @new mysqli ('host', 'name', 'passwort', 'datenbank');
   if (mysqli_connect_errno() ) {
   die
('Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldet: '.mysqli_connect_error() );

mysql_select_db('datenbank') or die ('Datenbank konnte nicht ausgewählt werden');
}
?>

<html>
<head>
<title>Loginbereich</title>
</head>

<body style="padding-top:250px">
<center>
  <h1> Loginbereich </h1>
</center>
<center style="font-family:comic sans ms">
  <form action='meinephp.php' method='POST'>
    <table>
      <tr>
        <td align=center> Benutzername: </td>
<td align=center> Passwort: </td>
      </tr>
      <tr>
<td> <input name="benutzer" type="text" size="40"> </td>
<td> <input name="password" type="password" size="40"> </td>
      </tr>
    </table>
    <br />
      <input type="submit" value="Absenden" name="sendDaten">
      <input type="reset" value="Abbrechen">
  </form>

<?php
if (!$_POST['benutzer'])
{
  $benutzer = $_POST['benutzer'];
  $password = md5($_POST['password']);
}
if( isset($_POST['benutzer'], $_POST['password'])
   AND
     strcmp(trim($_POST['benutzer']),'') != 0
   AND
     strcmp(trim($_POST['password']),'') != 0 )
{
  $sql = 'SELECT
            benutzer,
            password
  FROM
    login
    WHERE
    benutzer = '.$benutzer;

$ergebnis = mysql_query($sql); //or die ('Die Daten konnten nicht geladen werden!'.mysqli_connect_error());
$row = mysql_fetch_array($ergebnis);

if ($row[2] == $benutzer && $row[4] == $password)
     {
$_SESSION['benutzer'];
echo " <p> Sie werden eingeloggt! </p> ";
     }
else
{
echo 'Benutzername und/oder Passwort waren falsch.';
}
}
?>

</center>
</body>
</html>

Wäre sehr dankbar wenn mir jemand helfen könnte.
Danke schon mal im Vorraus..
Liebe Grüße Tanja

  1. Ahoi,

    Notice: Undefined index: benutzer in .. on line 45
    Notice: Undefined index: benutzer in .. on line 47
    Notice: Undefined index: .. on line 48

    Diese Fehlermeldung heißt, dass der Index "benutzer" zu dem Zeitpunkt an der Stelle nicht definiert ist. Das ist doch ein prächtiger Anhaltspunkt.

    Dank und Gruß,

    frankx

    1. Ahoi,

      Diese Fehlermeldung heißt, dass der Index "benutzer" zu dem Zeitpunkt an der Stelle nicht definiert ist. Das ist doch ein prächtiger Anhaltspunkt.

        
      <?php  
      error_reporting(E_ALL);  
      $a["a"]="a";  
      echo $a["a"];  
      echo $a["b"];  
      echo $b["a"];  
      
      

      gibt:

      a
      Notice: Undefined index:  b in D:\eigene Dateien von MB\medionrobi\Desktop\undefined_index.php on line 5

      Notice: Undefined variable: b in D:\eigene Dateien von MB\medionrobi\Desktop\undefined_index.php on line 6

      Dank und Gruß,

      frankx

      1. Aber ich gib ihnen doch den wert. Code:

        $benutzer = $_POST['benutzer'];
        $password = md5($_POST['password']);

        und in diesen Zeilen zeigt es gleichzeitig den Fehler!

        danke für die schnelle antwort.
        Liebe Grüße Tanja

        1. Aber ich gib ihnen doch den wert. Code:

          nein, befüllt wird das Array über einen davor stattfindenden HTTP-POST (sollte der überhaupt gemacht werden).

          $benutzer = $_POST['benutzer'];
          $password = md5($_POST['password']);
          und in diesen Zeilen zeigt es gleichzeitig den Fehler!

          Im Array $_POST existiert kein Key benutzer bzw. password - wenn das PHP sagt, ist das so sicher wie das Amen im Gebet.

          Im übrigen ist das Umkopieren von Variablen nicht sehr speicherschonend.

          1. »» Aber ich gib ihnen doch den wert. Code:
            nein, befüllt wird das Array über einen davor stattfindenden HTTP-POST (sollte der überhaupt gemacht werden).

            »» $benutzer = $_POST['benutzer'];
            »» $password = md5($_POST['password']);
            »» und in diesen Zeilen zeigt es gleichzeitig den Fehler!

            Im Array $_POST existiert kein Key benutzer bzw. password - wenn das PHP sagt, ist das so sicher wie das Amen im Gebet.
            Im übrigen ist das Umkopieren von Variablen nicht sehr speicherschonend.

            Ok und wie kann ich dieses Problem am besten lösen?!
            ich kenn mich wirklich überhaupt nicht aus..
            liebe grüße Tanja

            1. Ahoi,

              Ok und wie kann ich dieses Problem am besten lösen?!
              ich kenn mich wirklich überhaupt nicht aus..

              Naja, wenn du hier weiterkommen willst, sollte dir aber schon der Unterschied zwischen Post und Get bekannt sein und wie/wann diese Variablen auf den Server übertragen werden.

              Übrigens ist ein Notiz ja auch "nur" eine Notiz.

              Dank und Gruß,

              frankx

          2. echo $begrüßung;

            » Aber ich gib ihnen doch den wert. Code:
            nein, befüllt wird das Array über einen davor stattfindenden HTTP-POST (sollte der überhaupt gemacht werden).

            Und ob das passiert ist, testet man im Allgemeinen vor dem ersten Lesezugriff mit isset() oder auch empty() und gestaltet den weiteren Ablauf des Scripts angemessen.

            Im übrigen ist das Umkopieren von Variablen nicht sehr speicherschonend.

            Der Speicher wird nur minimal belastet, weil zunächst nur eine Variablenverwaltungsstruktur angelegt wird. Eine Kopie des Wertes wird erst dann angelegt, wenn eine der Variablen geändert wird, beide Werte also auseinanderlaufen. Bis dahin sind PHP-intern beide Variablen quasi Referenzen auf den selben Variablencontainer. Siehe References Explained (by Derick Rethans). Sinnlos ist das Umkopieren trotzdem. Es erhöht nur die Komplexität und das Verständnis des Codes.

            echo "$verabschiedung $name";

            1. Der Speicher wird nur minimal belastet, weil zunächst nur eine Variablenverwaltungsstruktur angelegt wird. Eine Kopie des Wertes wird erst dann angelegt, wenn eine der Variablen geändert wird, beide Werte also auseinanderlaufen. Bis dahin sind PHP-intern beide Variablen quasi Referenzen auf den selben Variablencontainer.

              Natürlich aber es benötigt dennoch Rechenzeit. Zwar ist das im Fall von 2 Variablen nicht wirklich ausschlaggebend, aber es kommt nicht selten vor, dass das komplette $_POST- und $_GET-Array in ein neues kopiert und um ein paar Indizes erleichtert wird.

              TYPO3 macht das z.B. so - hier stehen alle in piVars() zur Verfügung, rausgeschnipselt werden nur einige globale Variablen (wie etwa die ID oder der Sprachparameter). Hier ist es allerdings eine integrale Funktion des Framesworks die etwas mehr tut, als nur eine simple Kopie zu erstellen.

              Sinnlos ist das Umkopieren trotzdem. Es erhöht nur die Komplexität und das Verständnis des Codes.

              Das sowieso

    2. Ahoi,

      »» Notice: Undefined index: benutzer in .. on line 45
      »» Notice: Undefined index: benutzer in .. on line 47
      »» Notice: Undefined index: .. on line 48

      Diese Fehlermeldung heißt, dass der Index "benutzer" zu dem Zeitpunkt an der Stelle nicht definiert ist. Das ist doch ein prächtiger Anhaltspunkt.

      Dank und Gruß,

      frankx

      Das er dort noch nicht definiert ist kann ich auch "raus lesen" aber warum nicht und was muss ich ändern das dies geht?!

      Liebe Grüße Tanja

  2. Hallo Tanja,

    bin absoluter Anfänger in PHP und hab da jetzt ein riesen problem, hab mir selbst ein Loginskript durch alle möglichen Foren im internet zusammengestellt.

    Warum quälst Du Dich - gerade am Anfang - durch Foren und bastelst Dir selber was zusammen, wenn es für solche grundlegenden Dinge fertige Lösungen gibt? Zumal Du als Anfängerin wahrscheinlich keinen Überblick über die ganzen Sicherheitsrisiken hast. Prinzipiell ist es natürlich löblich, "self" etwas auszuprobieren, aber für den produktiven Einsatz würde ich Dir empfehlen, Dich in eines der PHP-Frameworks/-Pakete einzulesen. Ich persönlich benutze z.B. PEAR - Cake oder Zend wären andere alternativen.

    Grüße, luti

  3. Hi,

    if (!$_POST['benutzer'])

    falls $_POST['benutzer'] false ist (also z.B. nicht existiert)

    {
      $benutzer = $_POST['benutzer'];

    lies es aus.

    if( isset($_POST['benutzer'], $_POST['password'])

    hier weißt Du plötzlich, wie Du die Existenz prüfen kannst ...

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.