Fehlermeldung Undefined index bei check- und selectboxen
Hallo,
und zunächst einmal ein Dankeschön an die Helferlein in diesem Forum im Voraus.
Es geht um eine Fehlermeldung, die ich bei den Selekt- und Checkboxen eines Formulares erhalte.
Grundsätzlich läuft das gesamte Formular in allen Teilen und Funktionen tadellos und ich könnte also durchaus mit der Fehlermeldung leben, aber diese kleine "Notice" ärgert mich einfach und viel schlimmer, ich komme nicht auf eine Lösung.
Ich habe es mal in einem Testformular zusammengefaßt und nachstehend gepostet:
Die Fehlermeldungen lauten:
Für die Selektbox 1
Notice: Undefined index: kdanredeselekt3 in D:\Programme\UsbWebserver\Root\ testform.php on line 31
sowie innerhalb deren Selektfeld gleiches für jeden Wert.
Für die Selektbox 2
erstaunlicherweise keine Meldung, aber der eingestellte Wert wird nach submit nicht übernommen…
Für die Checkbox 1
Notice: Undefined index: dseundagbkenntnis in D:\Programme\UsbWebserver\Root\testform.php on line 59
Hier die komplette Testdatei:
Was ich zu gerne wissen würde ist, weshalb die beiden Variablen überhaupt als (Array?) Index angesprochen werden, das ist doch paradox, denn sie können sowieso nur einen einzigen Wert, nämlich den ausgewählten, annehmen.
Leider habe ich nirgendwo konkrete Hinweise zu diesem kleinen Problem gefunden, deshalb hoffe ich, daß mir in diesem Forum jemand helfen und es mir auch (verständlich ) erklären kann.
Vielen Dank noch einmal für Eure Mühe und Geduld im Voraus,
viele Grüße,
Ursus Arctos, der Eisbär
Nachtrag: Ich sehe gerade, daß sich beim Posten die Codezeilenangaben leicht verschoben haben,
statt der Zeile 31 betrifft es in dieser Ansicht die Zeile 30 und
statt der Zeile 59 betrifft es hier die Zeile 60,
sorry.
und zunächst einmal ein Dankeschön an die Helferlein in diesem Forum im Voraus.
Es geht um eine Fehlermeldung, die ich bei den Selekt- und Checkboxen eines Formulares erhalte.
Grundsätzlich läuft das gesamte Formular in allen Teilen und Funktionen tadellos und ich könnte also durchaus mit der Fehlermeldung leben, aber diese kleine "Notice" ärgert mich einfach und viel schlimmer, ich komme nicht auf eine Lösung.
Ich habe es mal in einem Testformular zusammengefaßt und nachstehend gepostet:
Die Fehlermeldungen lauten:
Für die Selektbox 1
Notice: Undefined index: kdanredeselekt3 in D:\Programme\UsbWebserver\Root\ testform.php on line 31
sowie innerhalb deren Selektfeld gleiches für jeden Wert.
Für die Selektbox 2
erstaunlicherweise keine Meldung, aber der eingestellte Wert wird nach submit nicht übernommen…
Für die Checkbox 1
Notice: Undefined index: dseundagbkenntnis in D:\Programme\UsbWebserver\Root\testform.php on line 59
Hier die komplette Testdatei:
<?php
/************
** testform.php
**
** Formular zum Testen diverser Selekt- und Checkboxen
**
** Die Boxen sollen ALLE folgendes leisten:
** - nur einfache Auswahlmöglichkeit - keine multiple
** - nach Submit sollen die eingestellten Werte in den Boxen erhalten bleiben,
** damit in der Praxis der User - bei Fehlermeldungen - nicht erneut alle Felder
** ausfüllen muß
************/
// error_reporting vor der endgültigen Nutzung im I-Net löschen !!!!!
error_reporting(E_ALL);
// error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// error_reporting(E_ERROR | E_WARNING | E_PARSE);
// error_reporting(0);
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data" method="post" name="Kontaktformular">
<br>
<br>
<!-- SELEKTBOXEN ANFANG -->
<!-- Version 3 ANFANG ok -->
<hr1>Selektbox 1</hr><br>
<?php
$kdanredeselekt3 = $_POST['kdanredeselekt3'];
$selected[$kdanredeselekt3] = "selected";
?>
<select id="Input-Selekt-3" name="kdanredeselekt3"><Selektbox 1>
<option value="Herr" <?php echo $selected['Herr']; ?> >Herr</option>
<option value="Frau" <?php echo $selected['Frau']; ?> >Frau</option>
<option value="Firma" <?php echo $selected['Firma']; ?> >Firma</option>
<option value="Verein" <?php echo $selected['Verein']; ?> >Verein</option>
</select>
<!-- Version 3 ENDE ok -->
<br>
<br>
<!-- Version 5 ANFANG -->
<hr1>Selektbox 2</hr><br>
<select id="select-ressort" name ="ressort">
'.(($ressort != 'Verein' && $ressort != 'Informationen' && $ressort != 'Tiergesundheit' && $ressort != 'Service' && $ressort != 'Projekte')?'
<option value="Verein" selected="selected">Verein</option>':'').'
<option value="Informationen" '.(($ressort == 'Informationen') ? 'selected="selected"' :'').'>Informationen</option>
<option value="Tiergesundheit" '.(($ressort == 'Tiergesundheit') ? 'selected="selected"' :'').'>Tiergesundheit</option>
<option value="Service" '.(($ressort == 'Service') ? 'selected="selected"' :'').'>Service</option>
<option value="Projekte" '.(($ressort == 'Projekte') ? 'selected="selected"' :'').'>Projekte</option>
</select>
<!-- Version 5 ENDE -->
<!-- SELEKTBOXEN ENDE -->
<br>
<br>
<!-- CHECKBOX ANFANG -->
<hr1>Checkbox 1</hr><br>
<!-- Version 1 ANFANG ok -->
<?php
$dseundagbkenntnis = $_POST['dseundagbkenntnis'];
$checked[$dseundagbkenntnis] = "checked";
?>
<div id="AGB-Kenntnis-Div">Bitte bestätigen Sie die
Kenntnisnahme der Datenschutzerklärung und der
AGB *
<input name="dseundagbkenntnis" value="Kenntnis bestätigt"<?php if (isset($_POST['dseundagbkenntnis'])) echo $checked[$dseundagbkenntnis]; ?> type="checkbox">
</div>
<!-- Version 1 ENDE ok -->
<!-- CHECKBOX ENDE -->
<br>
<br>
<!-- BUTTONS -->
<div id="Buttons-Div" class="Angaben-Divs">
<input id="Button-Abschicken" name="sendenbutton" value="uuuund ab" type="submit"></div>
</form>
Was ich zu gerne wissen würde ist, weshalb die beiden Variablen überhaupt als (Array?) Index angesprochen werden, das ist doch paradox, denn sie können sowieso nur einen einzigen Wert, nämlich den ausgewählten, annehmen.
Leider habe ich nirgendwo konkrete Hinweise zu diesem kleinen Problem gefunden, deshalb hoffe ich, daß mir in diesem Forum jemand helfen und es mir auch (verständlich ) erklären kann.
Vielen Dank noch einmal für Eure Mühe und Geduld im Voraus,
viele Grüße,
Ursus Arctos, der Eisbär
Nachtrag: Ich sehe gerade, daß sich beim Posten die Codezeilenangaben leicht verschoben haben,
statt der Zeile 31 betrifft es in dieser Ansicht die Zeile 30 und
statt der Zeile 59 betrifft es hier die Zeile 60,
sorry.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119109
Url: https://administrator.de/contentid/119109
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
2 Kommentare
Neuester Kommentar
Gehen wir das doch mal langsam an:
Was auch immer du hier gebastelt hast, PHP-Code ist es nicht
Ein Programmiereditor mit Syntax-Highlighting hätte dir das auch verraten
Das ist auch absolut klar.
Dein $_POST wird ohne jegliche Bedingung aufgerufen. Und $_POST ist nunmal leer, wenn noch kein Formular abgesendet wurde.
Selbiges gilt für deinen zweiten Fehler. Also immer prüfen ob das Formular auch abgesendet wurde:
Ehrlich gesagt verstehe ich dein Problem nicht ganz. $_POST ist ein Array, der als Schlüssel alle Formularfelder enthält und das ist auch das einzig sinnvolle. Ich will dir aber nicht vorenthalten, dass sowas:
auch als ein eigenes Feature von PHP namens
Dir fehlen da noch einige Grundlagen dazu wie und in welcher Reihenfolge PHP Variablen definiert.
Übrigens ist mir völlig unklar, was du hier basteln wolltest:
Weder gibt es in HTML ein Element
Weil ich aber so nett bin , hab ich deinen Code mal so umsortiert, dass er gehen sollte (nicht getestet):
Der Ansatz ist sehr detailliert und wer viel mit Formularen zu tun hat wird sich dafür auch Helper-Funktionen basteln...
Grüße
Max
<select id="select-ressort" name ="ressort">
'.(($ressort != 'Verein' && $ressort != 'Informationen' && $ressort != 'Tiergesundheit' && $ressort != 'Service' && $ressort != 'Projekte')?'
<option value="Verein" selected="selected">Verein</option>':'').'
<option value="Informationen" '.(($ressort == 'Informationen') ? 'selected="selected"' :'').'>Informationen</option>
<option value="Tiergesundheit" '.(($ressort == 'Tiergesundheit') ? 'selected="selected"' :'').'>Tiergesundheit</option>
<option value="Service" '.(($ressort == 'Service') ? 'selected="selected"' :'').'>Service</option>
<option value="Projekte" '.(($ressort == 'Projekte') ? 'selected="selected"' :'').'>Projekte</option>
</select>
Was auch immer du hier gebastelt hast, PHP-Code ist es nicht
Ein Programmiereditor mit Syntax-Highlighting hätte dir das auch verraten
Notice: Undefined index: kdanredeselekt3 in D:\Programme\UsbWebserver\Root\ testform.php on line 31
Das ist auch absolut klar.
Dein $_POST wird ohne jegliche Bedingung aufgerufen. Und $_POST ist nunmal leer, wenn noch kein Formular abgesendet wurde.
Selbiges gilt für deinen zweiten Fehler. Also immer prüfen ob das Formular auch abgesendet wurde:
<?php
if(isset($_POST['sendenbutton'])) {
$kdanredeselekt3 = $_POST['kdanredeselekt3'];
}
?>
Was ich zu gerne wissen würde ist, weshalb die beiden Variablen überhaupt als (Array?) Index angesprochen werden, das ist doch paradox, denn sie können sowieso nur einen einzigen Wert, nämlich den ausgewählten, annehmen.
Ehrlich gesagt verstehe ich dein Problem nicht ganz. $_POST ist ein Array, der als Schlüssel alle Formularfelder enthält und das ist auch das einzig sinnvolle. Ich will dir aber nicht vorenthalten, dass sowas:
$kdanredeselekt3 = $_POST['kdanredeselekt3'];
register_globals
vorhanden ist - und weil das nur Sicherheitslücken produziert hat fliegt es in der nächsten Version von PHP raus.Dir fehlen da noch einige Grundlagen dazu wie und in welcher Reihenfolge PHP Variablen definiert.
Übrigens ist mir völlig unklar, was du hier basteln wolltest:
<select id="Input-Selekt-3" name="kdanredeselekt3"><Selektbox 1>
<option value="Herr" <?php echo $selected['Herr']; ?> >Herr</option>
<option value="Frau" <?php echo $selected['Frau']; ?> >Frau</option>
<option value="Firma" <?php echo $selected['Firma']; ?> >Firma</option>
<option value="Verein" <?php echo $selected['Verein']; ?> >Verein</option>
</select>
<Selektbox 1>
noch erklärt dein Code wo denn $selected['Herr']
... herkommen soll.Weil ich aber so nett bin , hab ich deinen Code mal so umsortiert, dass er gehen sollte (nicht getestet):
<?php
/************
** testform.php
**
** Formular zum Testen diverser Selekt- und Checkboxen
**
** Die Boxen sollen ALLE folgendes leisten:
** - nur einfache Auswahlmöglichkeit - keine multiple
** - nach Submit sollen die eingestellten Werte in den Boxen erhalten bleiben,
** damit in der Praxis der User - bei Fehlermeldungen - nicht erneut alle Felder
** ausfüllen muß
************/
// error_reporting vor der endgültigen Nutzung im I-Net löschen !!!!!
error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors','On');
$possibleTitles = array('Herr','Frau','Firma','Verein');
$selectedTitle = NULL;
$possibleResorts = array('Informationen','Tiergesundheit','Service','Projekte');
$selectedResort = NULL;
$activeAGBValue = "Ja";
$isActiveAGB = false;
if(isset($_POST['form_submitted'])) {
$errors = 0;
if(in_array(@$_POST['title'], $possibleTitles))
$selectedTitle = $_POST['title'];
else
$errors++;
if(in_array(@$_POST['resort'], $possibleResorts))
$selectedResort = $_POST['resort'];
else
$errors++;
if(@$_POST['agb'] == $activeAGBValue)
$isActiveAGB = true;
else
$errors++;
if($errors > 0) {
echo "Sie haben Fehler gemacht";
} else {
//formular weiterverarbeiten...
}
}
?>
<form action="" enctype="multipart/form-data" method="post" name="Kontaktformular">
<br>
<br>
<!-- SELEKTBOXEN ANFANG -->
<!-- Version 3 ANFANG ok -->
<hr1>Selektbox 1</hr><br>
<select name="title">
<?php foreach($possibleTitles as $title): ?>
<option <?php echo (($title == $selectedTitle)? 'selected="selected"' : '') ?>><?php echo $title ?></option>
<?php endforeach; ?>
</select>
<!-- Version 3 ENDE ok -->
<br>
<br>
<!-- Version 5 ANFANG -->
<hr1>Selektbox 2</hr><br>
<select id="select-ressort" name ="resort">
<?php foreach($possibleResorts as $resort): ?>
<option <?php echo (($resort == $selectedResort)? 'selected="selected"' : '') ?>><?php echo $resort ?></option>
<?php endforeach; ?>
</select>
<!-- Version 5 ENDE -->
<!-- SELEKTBOXEN ENDE -->
<br>
<br>
<!-- CHECKBOX ANFANG -->
<hr1>Checkbox 1</hr><br>
<!-- Version 1 ANFANG ok -->
<div id="AGB-Kenntnis-Div">
Bitte bestätigen Sie die Kenntnisnahme der Datenschutzerklärung und der AGB *
<input name="agb" value="<?php echo $activeAGBValue ?>" type="checkbox" <?php echo (($isActiveAGB)? 'checked="checked"' : '') ?>>
</div>
<!-- Version 1 ENDE ok -->
<!-- CHECKBOX ENDE -->
<br>
<br>
<!-- BUTTONS -->
<div id="Buttons-Div" class="Angaben-Divs">
<input id="Button-Abschicken" name="form_submitted" value="uuuund ab" type="submit">
</div>
</form>
Der Ansatz ist sehr detailliert und wer viel mit Formularen zu tun hat wird sich dafür auch Helper-Funktionen basteln...
Grüße
Max