Tommi: Überprüfen ob Variable Integer ist und in MYSQL überprüfen

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

  1. 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.

    1. 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.

      1. 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.

      2. 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

        --
        Der Professor sitzt beim Essen in der Mensa. Ein Student setzt sich ihm unaufgefordert gegenüber.
        Professor: Seit wann essen denn Schwein und Adler an demselben Tisch?
        Student:   Na gut, dann flieg' ich eben zum nächsten Tisch.
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(