Notice: Undefined index: id

Scriptschreiber

Grünschnabel
Ich erhalte die Fehlermeldung "Undefined index: id". Was mache ich falsch?
Code:
<?php
error_reporting(E_ALL);
require("inc/wmaconfig.inc.php");
require("inc/wmafunc1.php");

$sql = "SELECT * FROM $tab WHERE id = '".( $_GET['id'] )."'";
$res = @mysql_query( $sql ) or die( "Fehler: " . mysql_error() );
$data = mysql_fetch_assoc( $res );

 ?>
Ich wäre dankbar für jeden Tip.
 
Klar. Wenn du das error-reporting auf E_ALL setzt wirst du auch die Notizen angezeigt bekommen. Und sofern du die URL mit datei.php?id=3 aufrufst ist der Arrayindex id vom Array $_GET nicht definiert. In php ist das kein Problem, aber löst eine Warnung aus. E_ALL ^ E_NOTICE wäre dann Alle Meldungen ohne Notizen. Einfach mal in der PHP-Manual unter der Funktion error_reporting lesen.

Gruß Danile
 
Hallo,

auch wenn ich die Zeile error_reporting(E_ALL); weglasse bekomme ich diese Meldung.

Ich bin dabei eine Adressverwaltung mit Php und Mysql zu realisieren. Ich bin in Sachen Phpprogrammierung eben noch ein Neuling.

Das eintragen mit php in die Datenbank funktioniert soweit. Auch das ausgeben der Daten funktioniert. Diese werden anklickbar ausgegeben. Wenn ich nun auf einer der eingetragenen Daten klicke, erhalte ich das Formular mit den Daten der jeweils zugeordneten id (edit.php?id=1). Jetzt möchte ich diese editieren (also ändern) und anschließend wieder in der Datenbank speichern. Klicke ich auf absenden erhalte ich eben die von mir beschriebene Fehlermeldung.

Vielen Dank für die superschnelle Antwort.

Gruß
Freddy
 
was kommt wenn du dein SQL Befehl in das tauschst:

PHP:
$sql = "SELECT * FROM `$tab` WHERE `id` = '".( $_GET['id'] )."'";
 
Dann scheint die Standard-Konfiguration in der PHP.ini E_ALL zu sein. wenn du E_ALL ^ E_NOTICE einfügst werden keine Notizen ausgegeben.

Das mit der Meldung ist klar. Gehen wir das Szenario mal durch. Du holst die Daten aus der DB und gibst sie verlinkt aus (edit.php?id=1). Jetzt kommst du auf eine Seite wo du die neuen Daten eingeben kannst (mit einem Formular). Wenn du nun das Formular absendest, werden die bisherigen GET-Daten (id in der URL) nicht übermittelt. Du musst diese bspw. extra in dein Formular mit einbauen. Bspw. mit einem <input type="hidden"..> . Ich hoffe dieses Skript ist nur zur Übung. Weil Sicherheit bietet dieses noch keine (Thema: Sql-Injections).

[EDIT] Wenn du die Zeile der Fehlermeldung ansiehst wird dir auffallen dass es nicht die Zeile des SELECT-Sqls ist welche die Meldung ausspuckt, sondern eher die Zeile des UPDATE-SQL. Denn er findet wie gesagt nach dem Submit die Variable id nicht mehr. Wenn du dann noch beim Formular method="POST" angegeben hast werden die Formulardaten in die Variable $_POST gespeichert.
 
Zuletzt bearbeitet:
Was ist wenn du den SQL Befehl mit die() ausgibst, und das was rauskommt, in phpMyAdmin eingibst?

Welche Fehlermeldung kommt dann?
 
Dann scheint die Standard-Konfiguration in der PHP.ini E_ALL zu sein. wenn du E_ALL ^ E_NOTICE einfügst werden keine Notizen ausgegeben.

Das mit der Meldung ist klar. Gehen wir das Szenario mal durch. Du holst die Daten aus der DB und gibst sie verlinkt aus (edit.php?id=1). Jetzt kommst du auf eine Seite wo du die neuen Daten eingeben kannst (mit einem Formular). Wenn du nun das Formular absendest, werden die bisherigen GET-Daten (id in der URL) nicht übermittelt. Du musst diese bspw. extra in dein Formular mit einbauen. Bspw. mit einem <input type="hidden"..> . Ich hoffe dieses Skript ist nur zur Übung. Weil Sicherheit bietet dieses noch keine (Thema: Sql-Injections).

[EDIT] Wenn du die Zeile der Fehlermeldung ansiehst wird dir auffallen dass es nicht die Zeile des SELECT-Sqls ist welche die Meldung ausspuckt, sondern eher die Zeile des UPDATE-SQL. Denn er findet wie gesagt nach dem Submit die Variable id nicht mehr. Wenn du dann noch beim Formular method="POST" angegeben hast werden die Formulardaten in die Variable $_POST gespeichert.

Das Formular sieht so aus:
Code:
<?php
error_reporting(E_ALL);
require("inc/wmaconfig.inc.php");
require("inc/wmafunc1.php");

$sql = "SELECT * FROM `$tab` WHERE `id` = '".( $_GET['id'] )."'";
$res = @mysql_query( $sql ) or die( "Fehler: " . mysql_error() );
$data = mysql_fetch_assoc( $res );

 ?>


<html><body>
<table align='center' cellspacing='0' callpadding='0'>
<tr>
<form action="update.php" method="post" name="edit">

      <td>Vorname:</td>
      <td><input type="text" name="vorname" size="35" value="<?= $data['vorname'] ?>"></td></tr>
      <tr>
      <td>Nachname:</td>
      <td><input type="text" name="nachname" size="35" value="<?= $data['nachname'] ?>"></td></tr>
      <tr>
      <td>Strasse Hsnr:</td>
      <td><input type="text" name="strasse" size="27" value="<?= $data['strasse'] ?>"> <input name="hsnr" type="text" size="3" value="<?= $data['hsnr'] ?>"></td></tr>
      <td>PLZ/Ort:</td>
      <td><input type="text" name="plz" size="3" value="<?= $data['plz'] ?>"> <input name="ort" type="text" size="27" value="<?= $data['ort'] ?>"></td></tr>
      <tr>
      <td>Telefon:</td>
      <td><input type="text" name="telnr" size="35" value="<?= $data['telnr'] ?>"></td></tr>
      <tr>
      <td>Homepage:</td>
      <td><input type="text" name="homepage" size="35" value="<?= $data['homepage'] ?>"></td></tr>
      <tr>
      <td>Emailadresse:<br>
      <td><input type="text" name="email" size="35" value="<?= $data['email'] ?>"></td></tr>
      <tr>
      <tr><td></td><td></td></tr>
      <tr><td></td><td><button type="submit" name="senden">Aktualisieren</button></td></tr>

</form></table>
</body></html>

und so die update.php:

Code:
<?php
require("inc/wmaconfig.inc.php");
require("inc/wmafunc1.php");

$sql = "UPDATE SET vorname, nachname, strasse, hsnr, plz, ort, telnr, homepage, email FROM $tab WHERE id = '".$_GET["id"]."'";
$res = mysql_query( $sql ) or die( "Fehler: " . mysql_error() );
$data = mysql_fetch_assoc( $res );

if ($res)
	{
		echo "Erfolgreich";
	}
	else
	{
		echo "Fehler";
	}



?>

und so das Eintragsformular:
Code:
<?php
error_reporting(E_ALL);
echo"<body>
<table align='center' cellspacing='0' callpadding='0'>
<tr>
<form action='check.php'  method='post'>
  <td><font class='font'>Vorname:</td>
  <td><input name='vorname' type='text' size='35'></td>
  </tr>
  <tr>
  <td><font class='font'>Nachname:</td><td><input name='nachname' type='text' size='35'></td>
  </tr>
  <tr>
  <td><font class='font'>Strasse Hsnr:</td><td><input name='strasse' type='text' size='27'>&nbsp;<input name='hsnr' type='text' size='3'></td>
  </tr>
  <tr>
  </tr>
  <tr>
  <td><font class='font'>PLZ/Ort:</td><td><input name='plz' type='text' size='3'>&nbsp;<input name='ort' type='text' size='27'></td>
  </tr>
  <tr>
  <td><font class='font'>Telefon</td><td><input name='telnr' type='text' size='35'></td>
  </tr>
  <tr>
  <td><font class='font'>Homepage:</td><td><input name='homepage' value='http://' type='text' size='35'></td>
  </tr>
  <tr>
  <td><font class='font'>Emailadresse:</td><td><input name='email' type='text' size='35'></td>
  </tr>
  <tr><td></td><td></td></tr>
<tr><td></td><td><font class='font'><input  type='submit' name='senden' value='Absenden'> <font class='font'><input  type='reset' value='Reset'></td></tr>

</form></table>
";

?>

Sicher sind da noch Fehler. Natürlich ist das alles noch zu Übungszwecken. :)
 
Ich hab da sowieso noch eine Frage an die Profis:

Welches Php 5 / Mysql Buch würdet Ihr empfehlen was wirklich gut verständlich ist.

Ich habe derzeit 3 Bücher hier:
PHP 5 "Das bhv Taschenbuch
PHP 4/5 Befehlsreferenz von Franzis
PHP 5 / Mysql 5 von Kannengieser 2. überarbeitete Ausgabe Februar 2007

Gibt es ein besseres. Ich wäre für jeden Tip dankbar.

Gruß
Freddy
 
Zurück