Endlosschleife bei $_POST

Hallo zusammen,
ich habe mir ein kleines Script zur Zerlegung einer Zahl in ihre Primfaktoren geschrieben. Wenn ich die zuzerlegende Zahl im Code bereits festlege, dann funktioniert alles. Wenn ich jedoch die Zahl aus einem Formular auslese und mit $_POST übergebe, dann gibt es eine Endlosschleife. Ich weiß leider nicht warum.

Hier ein Ausschnitt meines Quelltexts:
[PHP]

<?php include('primform.html'); $zahl = 100;//$_POST['prim']; //... while($zahl != 1) //Solange noch weiter zerteilt werden kann { if($zahl % $prim[$i] == 0){ //prim enthält alle Primzahlen bis zu "zahl" $fak[] = $prim[$i]; //Im Array fak werden die Primfaktoren gespeichert $zahl = $zahl / $prim[$i]; //"zahl" wird stets geändert, da sie eben zerlegt wird $i = 0; } else $i++; //Falls die erste Primzahl (2) nicht ein Teiler ist, dann nimm die nächste (also 3) } //... ?>

[/PHP]

Die while Schleife verwandelt sich in eine Endlosschleife, sobald ich $_POST verwenden möchte. Das merke ich daran, dass ich die komplette Seite nicht mehr laden kann. Ich habe den Eindruck, dass beim Laden der Quelltext schon durchgegangen wird, obwohl der Nutzer noch gar keine Zahl eingegeben hat.

Wisst ihr, was ich ändern muss?

Vielen Dank
lg, freakXHTML

Ergänze deinen Script um folgende Elemente:

1.) Die Primzahlen-Suche darf nur gestartet werden, wenn $_POST[‚prim‘] übergeben worden ist.

[PHP]

<?php if (isset($_POST['prim']) === true) { echo 'Zahl wurde übergeben!'; } ?>

[/PHP]

2.) Baue eine Prüfung ein, ob es sich wirklich um eine einfache Zahl handelt, um zu verhindern, dass Kommazahlen oder Texte deinen Script stören. Dafür könntest du zum Beispiel diese Funktion verwenden:

[PHP]

<?php // Diese Funktion prüft, ob ein Wert eine einfache Zahl ist. function istZahl($wert) { if (preg_match("=^[0-9]+$=i", $wert)) { return true; } return false } ?>

[/PHP]

Jetzt könnte dein Script zum Beispiel so aussehen:

[PHP]

<?php include('primform.html'); function istZahl($wert) { if (preg_match("=^[0-9]+$=i", $wert)) { return true; } return false } // Wurde ein Wert übergeben? if (isset($_POST['prim']) === true) { $zahl = $_POST['prim']; // Wurde eine Zahl übergeben? if (ist_Zahl($zahl) === true) { //... while($zahl != 1) //Solange noch weiter zerteilt werden kann { if($zahl % $prim[$i] == 0){ //prim enthält alle Primzahlen bis zu "zahl" $fak[] = $prim[$i]; //Im Array fak werden die Primfaktoren gespeichert $zahl = $zahl / $prim[$i]; //"zahl" wird stets geändert, da sie eben zerlegt wird $i = 0; } else $i++; //Falls die erste Primzahl (2) nicht ein Teiler ist, dann nimm die nächste (also 3) } //... } else { echo 'Bitte geben Sie eine Zahl ein!'; } } ?>

[/PHP]

Auf diese Weise wird sichergestellt, dass die Primzahlen-Suche nur durchgeführt wird,
wenn der Benutzer eine Zahl übergeben hat.

Um eine Eingabe auf eine Ganzzahl zu überprüfen, gibt es auch eine passende PHP-Funktion: PHP: is_int - Manual .

Allerdings ist die is_int-Funktion sehr offen programmiert und teilweise auch unzuverlässig und darum in diesem Fall ungeeignet.

Siehe auch diesen Kommentar: PHP: is_int - Manual - Robin