zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden $_POST: Undefined Index

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 28.12.2010, 14:22
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard $_POST: Undefined Index

Moin,

folgendes Problem: Ich übergebe die Inhalte eines GB-Formulars per POST. Normalerweise funktioniert das ja wunderbar, zumindest bei anderen Scripts. Beim aktuellen bekomme ich allerdings für jede Variable diese Meldung:

Zitat:
Notice: Undefined index: gbname in /xyz/index.php on line 31
Was die Meldung bedeutet ist mir klar. Das kuriose daran ist: In die Datenbank werden die Werte übernommen. Bevor die Werte an den SQL-Befehl übergeben werden, weise ich die Variablen des $_POST-Arrays noch an normale aus, um sie auch weiterzuverarbeiten.

PHP-Code:
$gbname $_POST['gbname']; 
Und genau hier fliegt er raus. Wenn ich direkt unter der Zeile aber schreibe

PHP-Code:
echo$gbname
wird mir der im Feld enthaltene String ausgegeben, die Fehlermeldung kommt nicht. Mit

PHP-Code:
print_r($_POST); 
erhalte ich das vollständige $_POST-Array:

Zitat:
Array ( [gblanguage] => de [gbname] => Testname [gbmail] => Testmail [gbhomepage] => Testhomepage [gbnachricht] => Testnachricht )

Wieso kann ich auf die Variablen zugreifen, und bekomme dennoch die Fehlermeldung, der Index sei nicht definiert?!
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 28.12.2010, 14:30
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Das ist mit deinen Frakmenten schwer zu sagen. Es könnte sein, dass da irgendwas mit Reihenfolgen nicht stimmt oder sonstwas. Hast du mal vollständigeren Quellcode, den du uns zur Verfügung stellen kannst, in dem man auch einen Zusammenhang erkennen kann?

Die Fehlermeldung bezieht sich ja auf das Array.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 28.12.2010, 14:34
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Praktikant Beitrag anzeigen
Das ist mit deinen Frakmenten schwer zu sagen. Es könnte sein, dass da irgendwas mit Reihenfolgen nicht stimmt oder sonstwas. Hast du mal vollständigeren Quellcode, den du uns zur Verfügung stellen kannst, in dem man auch einen Zusammenhang erkennen kann?

Die Fehlermeldung bezieht sich ja auf das Array.
Mmmmmmh... dachte mir schon dass das zu wenig ist... . Der gesamte Quellcode ist allerdings etwas groß. Ich versuchs mal mit 'nem bisschen mehr .

Hier das Formular:

HTML-Code:
<div class="gbform">
<form action="index.php?c=<?php echo$page['Kategorie']; ?>&p=<?php echo$page['ID']; ?>&gb=0" method="post">
<input type="hidden" name="gblanguage" value="<?php echo$language; ?>">
<p class="gbformnamepre"><?php if ( $language == 'de' ) { echo "Name:"; } elseif ( $language == 'en' ) { echo "Name:"; } elseif ( $language == 'fr' ) { echo "Nom:"; } ?></p>
<p class="gbformname"><input id="gbname" type="text" name="gbname"></p>
<p class="gbformmailpre"><?php if ( $language == 'de' ) { echo "eMail:"; } elseif ( $language == 'en' ) { echo "E-Mail:"; } elseif ( $language == 'fr' ) { echo "Email:"; } ?></p>
<p class="gbformmail"><input id="gbmail" type="text" name="gbmail"></p>
<p class="gbformhppre"><?php if ( $language == 'de' ) { echo "Homepage:"; } elseif ( $language == 'en' ) { echo "Website:"; } elseif ( $language == 'fr' ) { echo "Page Web:"; } ?></p>
<p class="gbformhp"><input id="gbhomepage" type="text" name="gbhomepage"></p>
<p class="gbformnachrichtpre"><?php if ( $language == 'de' ) { echo "Nachricht:"; } elseif ( $language == 'en' ) { echo "Message:"; } elseif ( $language == 'fr' ) { echo "Message:"; } ?></p>
<p class="gbformnachricht"><textarea id="gbnachricht" name="gbnachricht"></textarea></p>
<p class="gbformsubmit"><input type="submit" value="Eintragen"></p>
<div class="clear"></div>
</form>
			</div>
Das annehmende PHP-Script:

PHP-Code:
        if ( isset ( $_GET['gb'] ) ) {            
            
// Eintrag verarbeiten
            
if ( $_GET['gb'] == '0' ) {
                
$gbname $_POST['gbname'];
                
$c $_GET['c'];
                
$p $_GET['p'];
                
header("location: index.php?c=$c&p=$p&gb=1");
            }        
        }        
        else {            
        } 

Geändert von acb1980 (28.12.2010 um 14:34 Uhr) Grund: HTML-Code lesbarer...
Mit Zitat antworten
  #4 (permalink)  
Alt 28.12.2010, 14:37
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Zitat:
Zitat von acb1980 Beitrag anzeigen
Das annehmende PHP-Script:
Und wo ist der Part mit dem $_POST? Wohin du weiterleitest ist für das Thema relativ uninteressant...
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #5 (permalink)  
Alt 28.12.2010, 14:39
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Praktikant Beitrag anzeigen
Und wo ist der Part mit dem $_POST? Wohin du weiterleitest ist für das Thema relativ uninteressant...
Ich hab inzwischen nochmal alles weggemacht, um alle anderen Fehler auszuschließen. Er fliegt direkt in der vierten Zeile des geposteten Codes ($gbname = $_POST['gbname']; ) raus...
Mit Zitat antworten
  #6 (permalink)  
Alt 28.12.2010, 14:42
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Jo, weil er den Index "gbname" nicht findet.
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
  #7 (permalink)  
Alt 28.12.2010, 14:46
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Praktikant Beitrag anzeigen
Jo, weil er den Index "gbname" nicht findet.
Soweit war ich auch schon. Wenn ich aber direkt unter diese Zeile schreibe

PHP-Code:
echo$gbname
Dann gibt er mir genau den Text aus, der auch gespeichert sein sollte. Irgendwie scheint er den Index doch zu finden. Und mit

PHP-Code:
print_r($_POST); 
zeigt er auch im Array an, dass es den Index gibt...
Mit Zitat antworten
  #8 (permalink)  
Alt 28.12.2010, 14:58
Neuer Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 25.12.2010
Beiträge: 21
acb1980 befindet sich auf einem aufstrebenden Ast
Standard

Habe jetzt mal die Fehlermeldungen ausgeschaltet und das Script soweit fertig geschrieben:

PHP-Code:
        if ( isset ( $_GET['gb'] ) ) {            
            
// Eintrag verarbeiten
            
if ( $_GET['gb'] == '0' ) {
                
$c $_GET['c'];
                
$p $_GET['p'];
                
$gbname $_POST['gbname'];
                
$gbmail $_POST['gbmail'];
                
$gbhomepage $_POST['gbhomepage'];
                
$gbnachricht $_POST['gbnachricht'];
                
$gblanguage $_POST['gblanguage'];
                if ( 
$settings['guestbookvalidate'] == '0' ) { $gbsichtbar '1'; } else { $gbsichtbar '0'; }
                
$table $tableprefix 'guestbook';
                  
$sql "INSERT INTO $table
                                    ( ID, Name, eMail, Homepage, Text, Datum, Kommentar, Aenderung, Aenderungautor, Sprache, Sichtbar, Gelesen )
                                  VALUES
                                    ( NULL, '
$gbname', '$gbmail', '$gbhomepage' , '$gbnachricht', NOW(), '', '', '', '$gblanguage', '$gbsichtbar', '0' );
                    "
;

                
mysql_query($sql) OR die(mysql_error());
                
header("location: index.php?c=$c&p=$p&gb=1");
            }        
        }        
        else {            
        } 
Das funktioniert auch tadellos, allerdings ist mir jetzt aufgefallen, dass der Datensatz doppelt erzeugt wird - einmal mit und einmal ohne Inhalt (nur das Datum und feste Variablen werden gesetzt).

D.h. aus irgendeinem Grund läuft das Script doppelt durch. Oberhalb von diesem Script befindet sich nichts, nur die Datenbankanbindung. Nach dem Script kommt die Prüfung, ob die Sprache am Link angehängt ist, wenn nicht wird diese angehängt (mit header("location: "). Logischerweise wird da das Script nochmal aufgerufen. ABER: dem wollte ich ja gerade entgehen, indem ich direkt nach dem Eintrag in die DB per header("location: ") neu lade und die Get-Variable "gb" auf '1' setze. Damit wird das Script ja im zweiten Durchgang übergangen. Irgendwie scheint der header da nicht stattzufinden und das Script wird daher zweimal aufgerufen...
Mit Zitat antworten
  #9 (permalink)  
Alt 28.12.2010, 15:08
Benutzerbild von Praktikant
Semantikbremse.
XHTMLforum-Kenner
 
Registriert seit: 22.04.2008
Beiträge: 4.985
Praktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz seinPraktikant kann auf vieles stolz sein
Standard

Ist das Datum unterschiedlich genug, dass zwischendurch eine Eingabe von Daten stattfinden kann? Was passiert in else {} oder ist der Teil tatsächlich leer?
Wie wird das Formular aufgerufen?
__________________
Rettet die Erde.... sie ist der einzige Planet mit Schokolade!
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 28.12.2010, 21:57
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Zitat:
Zitat von acb1980 Beitrag anzeigen
PHP-Code:
if ( isset ( $_GET['gb'] ) ) {            
            
// Eintrag verarbeiten
            
if ( $_GET['gb'] == '0' ) {
                
$gbname $_POST['gbname'];
                
$c $_GET['c'];
                
$p $_GET['p'];
                
header("location: index.php?c=$c&p=$p&gb=1");
            }        
        }        
        else {            
        } 
Wahrscheinlich liegt genau dort der Fehler.
Du weist der Variablen $gbname den Wert von $_POST['dbname'] zu und anschließend folgt dann eine Weiterleitung.
Da die Weiterleitung aber den aktuellen Scriptlauf nicht beendet wird das Script noch bis zum Ende abgearbeitet und anschließend weitergeleitet.
Bei erfolgter Weiterleitung sind die Variablen aber leer.

Ich vermute, dass Du erstmal alle Variablen aus den POST-Inhalten füllst und dann weiterleitest um den Datensatz zu speichern.

Kann das so oder so ähnlich sein?
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Undefined index express Serveradministration und serverseitige Scripte 3 15.08.2009 21:09
error_reporting(E_ALL); paracelsus Serveradministration und serverseitige Scripte 37 05.06.2008 08:36
Problem mit Kontaktformular: Notice: Undefined variable ChOpSueY! Serveradministration und serverseitige Scripte 44 28.11.2007 15:20
Das 1000. Formular-Problem shogun Serveradministration und serverseitige Scripte 27 21.09.2007 19:04


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:25 Uhr.