sanastasia
Goto Top

PHP unnötige Notiz

Hallo,
habe eine art Taschenrechner in PHP erstellt. Funktioniert alles einwandfrei.
Jedoch wird mir immer eine Notiz angezeigt wenn ich das Programm "leer" laufen lasse, also keine Rechenoperation und keine Zahlen eingebe.
Füge ich isset in das Programm ein, um die Notiz zu vermeiden, werden nicht mehr alle Rechenoperationen durchgeführt, sondern es wird nur die erste Rechenoperation
auf alle Auswahlmöglichkeiten angewendet.
Der Quellcode-ausschnitt um den es sich dreht, im weiteren verlauf des Quellcodes sind natürlich noch Buttons gesetzt für die jeweiligen Rechenwege.
<html>
<head>
	<meta charset="UTF-8" />  
	<title>Formular</title>
</head>
<body>
<form action = "<?php echo $_SERVER["PHP_SELF"];?>"  
	  method = "POST">  
<?php 
	switch($_POST["count"])  
{		case 1:

		$z1=$_POST["zahl1"];  
		$z2=$_POST["zahl2"];  
		$erg1=$z1+$z2;
		echo "<h1>$z1 + $z2 = $erg1</h1>";  
		break;

Die Notiz ist:
Notice: Undefined index: count in C:\xampp\htdocs\E2_rechner.php on line 10

Kann mir jemand helfen?

Grüße,
Sanastasia

Content-ID: 373733

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

SeaStorm
SeaStorm 12.05.2018 um 19:34:49 Uhr
Goto Top
Hi

Du rechnest einfach drauf los, ohne das da Werte wären, mit denen du rechnen kannst.

Du musst prüfen, ob da überhaupt was da ist, mit dem du rechnen kannst/sollst
certifiedit.net
certifiedit.net 12.05.2018 um 19:41:40 Uhr
Goto Top
Hallo,

in deinem einfachsten Fall:

if(!isset($count){$count = 0;}

Sollte helfen, wenn ich richtig verstanden habe, was du möchtest.

VG
Spirit-of-Eli
Spirit-of-Eli 12.05.2018 um 20:32:54 Uhr
Goto Top
Basic ist, die Werte vorab auch noch zu löschen.
Sanastasia
Sanastasia 12.05.2018 um 20:34:40 Uhr
Goto Top
Ok, ich hab wohl es zu umständlich erklärt.
Dann doch hier der komplette Quellcode:
<html>
<head>
	<meta charset="UTF-8" />  
	<title>Formular</title>
</head>
<body>
<form action = "<?php echo $_SERVER["PHP_SELF"];?>"  
	  method = "POST">  
<?php 

	switch($_POST["count"])  
{		case 1:

		$z1=$_POST["zahl1"];  
		$z2=$_POST["zahl2"];  
		$erg1=$z1+$z2;
		echo "<h1>$z1 + $z2 = $erg1</h1>";  
		break;
		
		case 2:
		$z1=$_POST["zahl1"];  
		$z2=$_POST["zahl2"];  
		$erg2=$z1-$z2;
		echo "<h1>$z1 - $z2 = $erg2</h1>";  
		break;
		
		case 3:
		$z1=$_POST["zahl1"];  
		$z2=$_POST["zahl2"];  
		$erg3=$z1*$z2;
		echo "<h1>$z1 * $z2 = $erg3</h1>";  
		break;
		
		case 4:
		$z1=$_POST["zahl1"];  
		$z2=$_POST["zahl2"];  
		$erg4=$z1/$z2;
		echo "<h1>$z1 / $z2 = $erg4</h1>";  
		break;
		
		default:
		echo '';  
		
		
}

?>
<p>Bitte geben Sie die beiden Zahlen in die Felder ein, mit denen Sie rechnen möchten.</p>


<p>

Zahl 1
<input type="text" name="zahl1">  
</p>
<p>
Zahl 2
<input type="text" name="zahl2">  
</p>
<p>
<input type="radio" name="count" value="1">  
+
</p>
<p>
<input type="radio" name="count" value="2">  
-
</p>
<p>
<input type="radio" name="count" value="3">  
*
</p>
<p>
<input type="radio" name="count" value="4">  
/
</p>

<p>
<input type="submit" value="Rechnen">  

<input type="reset" value="Zurücksetzen">  
</p>
</form>
</body>
</html>

Wie gesagt, es funktioniert so. Das einzige was stört ist die Notiz die immer wieder kommt.
tomolpi
tomolpi 12.05.2018 um 20:53:13 Uhr
Goto Top
Dann deaktiviere einfach die Fehlerausgabe von PHP, entweder in der Config von XAMPP oder in deinem Skript ganz oben...
kaiand1
kaiand1 12.05.2018 um 21:30:10 Uhr
Goto Top
Da du nicht Prüfst ob Count vorhanden ist und ohne das Vorhandensein dein Script Rechnet gibt es die Fehlermeldung.
Da musst du die Fehlerausgabe Deaktivieren oder eine Prüfung Einbauen das dein Script nur Rechnet wenn auch was zum Rechnen da ist.
Oder du nutzt einfach das @ Zeichen davor.
max
Lösung max 12.05.2018 aktualisiert um 23:20:15 Uhr
Goto Top
Du machst ein „Switch“ auf eine nicht definierte Variable. Das meckerte er zu Recht an, da der Wert null sein kann und der Switch nicht zwingend funktionieren muss. Besser du legst vorher eine Variable an z.B.
If (isset($_POST["count"])) {  
$count = $_POST["count"];  
} else {
$count = 0; // or Exit
}
switch ($count) {
...
}

Gruß
Max
Sanastasia
Sanastasia 13.05.2018 um 09:30:00 Uhr
Goto Top
Danke Max, das hat geholfen;)
136166
136166 13.05.2018 aktualisiert um 11:11:48 Uhr
Goto Top
Zitat von @max:

Du machst ein „Switch“ auf eine nicht definierte Variable. Das meckerte er zu Recht an, da der Wert null sein kann und der Switch nicht zwingend funktionieren muss. Besser du legst vorher eine Variable an z.B.
If (isset($_POST["count"])) {  
> $count = $_POST["count"];  
> } else {
> $count = 0; // or Exit
> }
> switch ($count) {
> ...
> }
> 

Gruß
Max
Was sich auch auf eine Zeile reduzieren lässt
$count = (isset($_POST['count']) && is_numeric($_POST['count']) )? $_POST['count'] : 0;  
Regel Nummer 1: Prüfe deine übergebenen Werte auf Richtigkeitund Format bevor du mit ihnen arbeitest. Das ist Einfallstor Nummer 1 für Skriptkiddies, und wird immer wieder vergessen! Der Grund warum sich viele Webseiten hacken lassen.
max
max 07.06.2018 um 17:19:19 Uhr
Goto Top
Was sich auch auf eine Zeile reduzieren lässt

natürlich, aber dann ist es für den User auch deutlich schwieriger zu lesen face-wink

Gruß
max