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-Key: 373733

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

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

Member: SeaStorm
SeaStorm May 12, 2018 at 17:34:49 (UTC)
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
Member: falscher-sperrstatus
falscher-sperrstatus May 12, 2018 at 17:41:40 (UTC)
Goto Top
Hallo,

in deinem einfachsten Fall:

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

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

VG
Member: Spirit-of-Eli
Spirit-of-Eli May 12, 2018 at 18:32:54 (UTC)
Goto Top
Basic ist, die Werte vorab auch noch zu löschen.
Member: Sanastasia
Sanastasia May 12, 2018 at 18:34:40 (UTC)
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.
Member: tomolpi
tomolpi May 12, 2018 at 18:53:13 (UTC)
Goto Top
Dann deaktiviere einfach die Fehlerausgabe von PHP, entweder in der Config von XAMPP oder in deinem Skript ganz oben...
Member: kaiand1
kaiand1 May 12, 2018 at 19:30:10 (UTC)
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.
Member: max
Solution max May 12, 2018 updated at 21:20:15 (UTC)
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
Member: Sanastasia
Sanastasia May 13, 2018 at 07:30:00 (UTC)
Goto Top
Danke Max, das hat geholfen;)
Mitglied: 136166
136166 May 13, 2018 updated at 09:11:48 (UTC)
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.
Member: max
max Jun 07, 2018 at 15:19:19 (UTC)
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