ursusarctos
Goto Top

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:
<?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 face-wink ) 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.

Content-Key: 119109

Url: https://administrator.de/contentid/119109

Printed on: April 19, 2024 at 13:04 o'clock

Member: dog
dog Jun 25, 2009 at 23:37:01 (UTC)
Goto Top
Gehen wir das doch mal langsam an:

<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 face-wink
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'];  
auch als ein eigenes Feature von PHP namens 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>
Weder gibt es in HTML ein Element <Selektbox 1> noch erklärt dein Code wo denn $selected['Herr']... herkommen soll.

Weil ich aber so nett bin face-wink , 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
Member: UrsusArctos
UrsusArctos Jun 26, 2009 at 00:54:44 (UTC)
Goto Top
Hallo Max,
vielen Dank für Deine superschnelle Antwort – und das um diese Uhrzeit face-wink
Dieses kleine Elaborat ist einfach aus dem Umstand heraus geboren nicht ständig ein ellenlanges Formular "herumschleppen" zu müssen, deshalb baue ich mir für relevante Teile schnell ein kleines Formular, nur um Kleinigkeiten zu testen.
Das war der Grund für meine "Bastelei"…
In diesem Falle waren es, wie ganz oben im Code zu lesen ist, nur zwei kleine Funktionen:
"- 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ß"
Dieses kleine Formular hatte also nur eine wichtige Aufgabe, nämlich festzustellen, ob die Werte, die in den verschiedenen getesteten Select- und Checkboxen, nach dem Absenden auch in den Feldern erhalten bleiben.
Daher ist dieses Formular natürlich eine Kombination aus HTML und PHP – der Kürze wegen und weil zum Testen überflüssig - eben auch ohne Abfragen.

Wie auch erwähnt läuft das "richtige" Formular tadellos.
Der genannte Fehler trat nur hier auf und ich konnte ihn mir nicht erklären.

DU HAST ABER DAS RICHTIGE STICHWORT GELIEFERT – und ich laufe gerade knallrot an…
Natürlich wird dieses "Script" beim Aufruf durchlaufen, da aber schlicht noch nicht ausgefüllt, bleibt $_POST eben auch noch leer… logisch…

Zitat
Weder gibt es in HTML ein Element <Selektbox 1> noch erklärt dein Code wo denn $selected['Herr']... herkommen soll
Zitat
Na ja, manchmal belegt man Dinge einfach mit einem "ganz persönlichen" Namen, von "Knutschkugel" bis "Selektbox" eben… face-smile
Vielen Dank für Deinen Tritt ins verlängerte Rückrat (meine mangelnden Grundlagenkenntnisse), war mal wieder nötig…
Genau wie mir wird es aber vielen anderen auch gehen, "hauptberuflich" ist man als selbständiger Handwerker (bei mir Bootsbau) oder Kleingewerbetreibender gut 10 bis 12 Std täglich mit der Firma beschäftigt. Programmieren wird zu einem Hobby, das man auch fürs Geschäft nutzt, die Scripte sollen "erst mal laufen", mit den Grundlagen will man sich dann später beschäftigen und schließlich werden sie doch vernachlässigt, weil die "bessere Hälfte" ihrerseits über Vernachlässigung klagt…
Aber wer sagt eigentlich, daß der Frosch keine Haare hat…
Vielen Dank noch mal für Deinen Anstoß,
damit werde ich den (überflüssigen) Beitrag schließen.
Viele Grüße,
Ursus Arctos, der Eisbär

Übrigens nutze ich u.A. das Notepad++ v 5.0.3