Ankündigung

Einklappen
Keine Ankündigung bisher.

Spalten nicht zulassen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Spalten nicht zulassen

    Hallo,

    ich will über folgendes Formular in einer bestimmten Datenbankspalte eine Suche realisieren, was auch klappt.
    Nun würde ich aber gern nur bestimmte Spalten erlauben, was ich mit der for- und if-Schleife versucht habe zu lösen.
    Nur wird jetzt leider bei jeder Ausgabe die gültigen und ungültigen Spalten ausgegeben, es sollte aber nur bei einer nicht erlaubten Wahl die ungültige Spalte erscheinen.
    Was muss ich da ändern?

    Code:
    <form method="post">
      <select name="spalte">
        <option value="name">Name</option>
        <option value="jahrgang">Jahrgang</option>
        <option value="test">Test (nicht erlaubt)</option>
      </select>
      <input name="suchen">
      <input type="submit">
      <input type="hidden" name="check" value="100" />
    </form>
    PHP-Code:
    <?php
    if ( $_POST['check'] == 100 ) {

    $spalten = array('name''jahrgang');

    for (
    $x=0$x<3$x++) {
      if ( 
    $_POST['spalte'] == $spalten[$x] ) {
        
    $sql "SELECT * FROM tabelle WHERE `" $_POST['spalte'] . "` LIKE '%" $_POST['suchen'] . "%'";
        
    // ...Ausgabe
        
    }
      else { 
        echo 
    'UNGÜLTIG!!! - '
        echo 
    $spalten[$x]; 
        echo 
    '
    '
    ; }
    } }
    ?>


  • #2
    Dann merk dir doch, ob du UNGÜLTIG schon ausgegeben hast oder brech den Schleifendurchlauf mittels break; ab.

    Kommentar


    • #3
      Hi,
      wenn man jetzt z.b. die zweite Option ausgewählt hat, dann wird die erste schon als Ungültig ausgegeben (obwohl sie erlaubt ist), daher kann ich das nicht abbrechen, sonst kommts zu keiner Ausgabe.
      Oder kann man das irgendwie anders überpüfen?

      Kommentar


      • #4
        OK also einen Fehler hast du schon drinne, die Schleife wird 1x zuviel ausgeführt.

        Code:
        for ($x=0; $x<3; $x++) {
        0, 1, 2 sind jeweils kleiner 3.
        $spalte ist aber nur 2 Elemente groß.

        Verwende dies hier:
        Code:
        for ($x = 0, $max = count($spalte); $x < $max; ++$x) {
        (++$x ist schneller als $x++ und hier kommt es nicht auf die Zuweisungsreihenfolge an)

        Kommentar


        • #5
          Danke für den Tipp!
          Kann man noch mehr optimieren?

          Benötige ich dann überhaupt noch den else Teil, da werden doch dann nur die Spalten zugelassen, die im Array sind?!

          Kommentar


          • #6
            PHP-Code:
            $spalten = array('name''jahrgang'); 
            if (
            in_array($_POST['spalte'], $spalten
            {
              
            $sql "...";
            }
            else
            {
              echo 
            "UNGÜLTIG...";

            Kommentar


            • #7
              Du kannst auch mit array_intersect () die gemeinsamen Elemente von
              $_POST[spalte] und $spalten bestimmen und diese dann mit foreach durchlaufen. Damit könntest Du auch mehrfache Spalten zur Suche angeben. Bei der bisherigen Lösung würde ich es wie Dibo machen: erst ablehnen, wer dann durchkommt wird in die Query verbaut.
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar

              Lädt...
              X