Überprüfen ob Variable Integer ist und in MYSQL überprüfen
Tommi
- php
0 dedlfix
0 Tommi0 dedlfix
0 Der Martin
In einem Formular wir eine Zahl eingegeben, dieses wird an das Script übergeben. Dort soll nun überprüft werden ob es eine Korrekte Zahl ist und wenn Ja, ob sie in der Datenbank vorhanden ist.
<?php
// Ob vorhanden
if(isset($_POST['zahl']))
{
// Umwandeln in Integer
$zahl = UrlInteger($_POST['zahl']);
// Wenn grösser als 1
if ($zahl>0)
{
// Kontrolle in der Datenbank
$sql = "SELECT nummer FROM tabele WHERE nummer='$zahl'";
$result = mysql_query($sql)or die($sql.'<br>'.mysql_error());
$ausgabe= mysql_fetch_object($result);
// Wenn nicht vorhanden, dann bekommet Zahl 0
if (empty($ausgabe->nummer)) $zahl =0;
}
}
// Wenn keine Übergabe erfolgt ist, dann bekommet Zahl 0
else $zahl =0;
?>
Ich habe das so gelöst, jetzt würde ich aber gerne wissen, ob man das auch einfacher, effizienter gestalten kann
Tach!
// Umwandeln in Integer
$zahl = UrlInteger($_POST['zahl']);
Was macht diese Funktion anders als intval()?
// Wenn grösser als 1
if ($zahl>0)
">0" ist aber nicht "größer als 1"
$sql = "SELECT nummer FROM tabele WHERE nummer='$zahl'";
Du möchtest nur die Anzahl wissen und nicht alle Datensätze, also ist COUNT(*) die bessere Wahl.
$result = mysql\_query($sql)or die($sql.'<br>'.mysql\_error());
"or die()" is üblicherweise keine Fehlerbehandlung, die der Anwender erwartet. Die Ausgabe des konkreten Fehlertextes ebenfalls nicht.
Ich habe das so gelöst, jetzt würde ich aber gerne wissen, ob man das auch einfacher, effizienter gestalten kann
Nicht wesentlich. Aber wenn es robuster werden soll, muss eher noch mehr Code dazu.
dedlfix.
Danke dedfif für deine Anmerkungen.
// Wenn grösser als 1
if ($zahl>0)
"0" ist aber nicht "größer als 1"
Wie meinst du das?
und
was meinst du mit: "wenn es robuster werden soll, muss eher noch mehr Code dazu"
Danke jedenfalls...
Tommi
Tach!
// Umwandeln in Integer $zahl = UrlInteger($\_POST['zahl']);
Was macht diese Funktion anders als intval()?
// Wenn grösser als 1 if ($zahl>0)
">0" ist aber nicht "größer als 1"
$sql = "SELECT nummer FROM tabele WHERE nummer='$zahl'";
Du möchtest nur die Anzahl wissen und nicht alle Datensätze, also ist COUNT(*) die bessere Wahl.
$result = mysql\_query($sql)or die($sql.'<br>'.mysql\_error());
"or die()" is üblicherweise keine Fehlerbehandlung, die der Anwender erwartet. Die Ausgabe des konkreten Fehlertextes ebenfalls nicht.
Ich habe das so gelöst, jetzt würde ich aber gerne wissen, ob man das auch einfacher, effizienter gestalten kann
Nicht wesentlich. Aber wenn es robuster werden soll, muss eher noch mehr Code dazu.
dedlfix.
Tach!
// Wenn grösser als 1 if ($zahl>0)
"0" ist aber nicht "größer als 1"
Wie meinst du das?
Der Kommentar passt nicht zum Code.
was meinst du mit: "wenn es robuster werden soll, muss eher noch mehr Code dazu"
Robust ist eine Anwendung, wenn sie nicht nur das tut, was sie offensichtlich tun soll, sondern ebenfalls sowohl die ungewollten Aktivitäten verhindert als auch mögliche Fehlerzustände berücksichtigt (und dann nicht einfach stirbt sondern dem Anwender eine Alternative bietet, mit der er möglichst doch noch ans Ziel kommt). Das ergibt am Ende üblicherweise deutlich mehr Code als die paar Anweisungen für die Schönwettervariante.
dedlfix.
Hallo,
Danke dedfif für deine Anmerkungen.
du solltest entweder sorgfältiger lesen oder sorgfältiger schreiben.
// Wenn grösser als 1 if ($zahl>0)
"0" ist aber nicht "größer als 1"
Und nicht die Zitate so entstellen, dass der Sinn verlorengeht.
Im ursprünglichen Posting von dedlfix hieß es nämlich:
">0" ist aber nicht "größer als 1"
Im Text (Kommentar) hattest du geschrieben, der Wert solle größer 1 sein, im Code fragst du aber auf größer 0 ab.
was meinst du mit: "wenn es robuster werden soll, muss eher noch mehr Code dazu"
Fehlerüberprüfung, sinnvolle Reaktion auf fehlerhafte Eingaben oder Verarbeitungsfehler.
Tach!
[...]
dedlfix.
Oh, und bitte lass die Vollzitate bleiben. Das ist unnötig und lästig.
Zitiere die Abschnitte, auf die du dich direkt beziehst, und lass den Rest weg.
Ciao,
Martin