Notice: Undefined index: id

Klar. Liegt immer noch am selben: Error-Reporting umstellen. Denn Notizen werden auch ausgegeben. Aber etwas ist mir noch aufgefallen. Mit den IDs. Wenn du das Formular abgeschickt hast kannst du ja logischerweise keine ID von der URL holen. Da ist es in der POST Variable gespeichert. Also in die IF-Else Abfrage noch eine Variable einbauen welche dafür sorgt dass die richtige ID gesetzt ist.
Hier nochmals der überarbeitete Code mit umgestelltem Error-Reporting
PHP:
<?php
error_reporting(E_ALL ^ E_NOTICE);
require("inc/wmaconfig.inc.php");
require("inc/wmafunc1.php");

// Daten speichern
if($_SERVER['REQUEST_METHOD'] == 'POST') // Beim Senden vom Formular
{
	$error = ''; // Fehlervariable
	
	// Variablen holen und Vorbereiten
	$id= $_POST['id']; // ID festlegen bei POST
	$vorname = mysql_prepare_string(trim($_POST['vorname']));
	$nachname = mysql_prepare_string(trim($_POST['nachname']));
	$strasse = mysql_prepare_string(trim($_POST['strasse']));
	$plz = mysql_prepare_string(trim($_POST['plz']));
	$telnr = mysql_prepare_string(trim($_POST['telnr']));
	$homepage = mysql_prepare_string(trim($_POST['homepage']));
	$email = mysql_prepare_string(trim($_POST['email']));
	
	// Daten checken
	// Wenn die Eingabe Leer ist (trim löscht unnötige Leerzeichen)
	// Dann wird die Fehlermeldung angehängt. 
	// Zum Schluss wissen wir welche Daten falsch waren.
	$error .= (empty($vorname)) ? 'Kein Vorname angegeben!<br>' : '';
	$error .= (empty($nachname)) ? 'Kein Nachname angegeben!<br>' : '';
	$error .= (empty($strasse)) ? 'Keine Strasse angegeben!<br>' : '';
	$error .= (empty($plz)) ? 'Keine Plz angegeben!<br>' : '';
	$error .= (empty($telnr)) ? 'Keine Telnr. angegeben!<br>' : '';
	$error .= (empty($homepage)) ? 'Keine Hp angegeben!<br>' : '';
	$error .= (empty($email)) ? 'Keine EMail angegeben!<br>' : '';
	
	// Wenn $error leer ist 
	// war kein Fehler also können wir speichern
	if(empty($error))
	{
		//Updaten
		$sql = sprintf("UPDATE `%s` SET vorname='%s', nachname='%s', strasse='%s', hsnr='%s', plz='%s', ort='%s', telnr='%s', homepage='%s', email='%s' WHERE id = '%u'",
						$tab, $vorname, $nachname, $strasse, $plz, $telnr, $homepage, $email, $id);
		// Fehler anhängen
		$res = @mysql_query($sql) or $error .=  "Fehler: " . mysql_error();
		
		if ($res)
		{
			// Erfolgsmeldung setzen oder umleiten
			$error .= "Erfolgreich";
			// header("Location: url");
		}
	}
}
else // Wenn nicht das Formular abgeschickt wurde
{
	// Probieren die ID von der URL zu holen
	$id = $_GET['id'];
}

// Daten laden
$sql = sprintf("SELECT * FROM `$tab` WHERE `id` = '%u'", $id);
$res = @mysql_query( $sql ) or $error .= "Fehler: " . mysql_error() ); // Fehler bei Falscher ID
$data = mysql_fetch_assoc( $res );
?>

Wenn jetzt noch eine Warnung kommt stimmt was komplett mit der Server-Config nicht. Tut mir Leid wegen der falschen Version aber ich weiß nicht was du in den inkludierten Dateien machst und deine DB-Aussieht darum kann ich nichts testen.

Gruß Daniel

Hallo Daniel,

habe mit deiner neuen Vorgabe getestet.
Fehler: $res = @mysql_query( $sql ) or $error .= "Fehler: " . mysql_error() ); // Fehler bei Falscher ID

Eine ) zuviel. Die habe ich entfernt und bekomme nach wie vor den undefined index: id.

Kann es sein das es vielleicht an php Version 5.23 oder Mysql 5.0.45 liegt? Ich teste das ganze mit xampp 1.6.3a.

Was ich noch gerne wisen würde ist, wo ich denn diesen Code einsetzen muß?
Code:
function mysql_prepare_string($Param, $resource=null)
{
    // String holen
    $string = $Param;

    // Je nach aktivierten Modulen Quotes und Slashes entfernen
    if(get_magic_quotes_gpc())
    {
        if(ini_get('magic_quotes_sybase'))
        {
            $string =  str_replace("''", "'", $string);
        }
        else
        {
            $string = stripslashes($string);
        }
    }
    // Wenn keine Resource angegeben wurde
    if(is_null($resource))
    {
        // Mysql-Escape Funktion ohne Resource ausführen
        return mysql_real_escape_string($string);
    }
    else
    {
        // Mysql-Escape Funktion mit Resource ausführen
        return mysql_real_escape_string($string, $resource);
    }
}

Ich werde dann diese Tage mal xampp neu installieren und mal schauen ob es daran gelegen hat.

Erst nochmal vielen Dank für deine Mühe.
 
Sorry, scheint heute nicht mein Tag zu sein.
Xampp. Okay. Geh mal in die Datei: c:\Programme\Xampp\apache\bin\php.ini
Dann such nach der Zeile (kann auch sein dass die Zeile ein bisschen anders aussieht):
error_reporting = E_ALL
und änder sie zu:
error_reporting = E_ALL & ~E_NOTICE

Das sollte das Problem fix beheben.
 
Steht so eingestellt:
Code:
  - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
;   - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
;   - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
;   - Show all errors except for notices and coding standards warnings
;
error_reporting  =  E_ALL & ~E_NOTICE
 
Du muss natürlich darauf auch noch die error_reporting Zeile aus dem Coding nehmen sonst konfigurierst du natürlich alles wieder um.
 
Du meinst die Codezeile in den Phpdateien. Die sind ja schon nicht mehr drin.

Wie war das doch noch gleich in der php.ini?

Mit ; davorstehend sind deaktiviert ohne sind aktiviert ?
 
Der ; leitet einen Kommentar ein, sind also nicht aktiviert. So wie es in deiner Angabe weiter oben war, wäre es schon richtig. Und wenn dann die Zeile vom error_reporting im PHP Code weg ist dürfte die Fehlermeldung nicht mehr erscheinen. Stellst du vielleicht in deinen inkludierten Dateien auch das error-reporting um?
Wenn nicht kann ich dir nur zu einer Neuinstallation von Xampp raten weil da stimmt sonst was mit der PHP Config nicht wenn du gar nicht ausstellen kannst dass Notizen angezeigt werden.
 
Ja, mensch stimmt. Ich hatte den error_ ... auch noch in einer der includierten Dateien drin. Jetzt kommt diese Fehlermeldung nicht mehr, aber aus dieser Zeile erhalte ich jetzt eine Fehlermeldung:
Code:
$sql = sprintf("UPDATE `%s` SET vorname='%s', nachname='%s', strasse='%s', hsnr='%s', plz='%s', ort='%s', telnr='%s', homepage='%s', email='%s' WHERE id = '%u'",
                        $tab, $vorname, $nachname, $strasse, $plz, $telnr, $homepage, $email, $id);

Fehlermeldung:
Warning: sprintf() [function.sprintf]: Too few arguments

Frage:
Gehört das $tab da mit rein?
In der includierten Datei habe ich $tab="adressen"; Also $tab ist Name der Tabelle, in diesem Fall adressen.

Danke für die tolle Hilfe.
 
Zurück