Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Checkbox mit SQL Select-Befehl paaren

Einklappen

Neue Werbung 2019

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

  • PHP Checkbox mit SQL Select-Befehl paaren

    Hallo,

    ich bin schon den ganzen Nachmittag am Verzweifeln, da ich offenbar keine Lösung für mein Problem finde.

    Ich habe zwei Checkboxes, die wiederum dahinter zwei Eingabefelder haben. Ich möchte, dass wenn eine der beiden Checkboxen ausgewählt ist, dahinter noch weitere Parameter eingegeben werden können und meine Datenbank, entsprechend zu den Eingaben verändert wird.

    Mein Problem ist, dass die Datenbank einfach nicht geupdatet wird. Das Programm an sich gibt keinen Fehlercode aus, jedoch bleibt die Veränderung aus.

    So weit bin ich bereits:

    HTML-Code:
            <form action="Device4.php" method="POST">
            <input type ="checkbox" name="kriterium1"    value="kriterium1" >    
            Nur Geräte anzeigen die innerhalb der nächsten     <input type="int" name="intervall" value="">    Tage gewartet werden müssen</br>
    
            <input type ="checkbox" name="kriterium2"    value="kriterium2">    
            Nur Geräte anzeigen, deren Stromverbrauch zwischen    <input type="float" name="Minimum"> und <input type="float" name="Maximum"> liegen
            <input type="submit" value="Sortieren"/>

    Habe mir hier eine Funktion überlegt, mit der ich die "Suchfunktion" in der Datenbank durchführen könnte.

    PHP-Code:
    function selection($kriterium1,$kriterium2,$minimum,$maximum,$intervall){

            
    $auswahl;


            if(
    $kriterium1="kriterium1" and !$intervall=="" and $kriterium2==""){
                 
    $auswahl="SELECT * FROM Devices WHERE DATE_ADD(LastService, INTERVAL ServiceInterval WEEK) < DATE_ADD(CURRENT_TIMESTAMP, INTERVAL $intervall DAY)";
            }

            if(
    $kriterium1=="" and $kriterium2="kriterium2"and !$minimum=="" and !$maximum==""){
                 
    $auswahl="SELECT * FROM Devices WHERE PowerConsumption BETWEEN $minimum and $maximum";
            }

            if(
    $kriterium1="kriterium1" and $kriterium2="kriterium2" and !$intervall=="" and !$minimum=="" and !$maximum==""){
                 
    $auswahl="SELECT * FROM Devices WHERE DATE_ADD(LastService, INTERVAL ServiceInterval WEEK) < DATE_ADD(CURRENT_TIMESTAMP, INTERVAL $intervall DAY) AND WHERE PowerConsumption BETWEEN $minimum and $maximum";
            }    

    Und hier die Ausführung der Funktion.

    PHP-Code:
    @$kriterium1=$_POST['kriterium1'];
            @
    $kriterium2=$_POST['kriterium2'];
            @
    $minimum=$_POST['Minimum'];
            @
    $maximum=$_POST['Maximum'];
            @
    $intervall=$_POST['intervall'];

            if(!
    $kriterium1=="" or !$kriterium2){

                
    $auswahl=selection($kriterium1,$kriterium2,$minimum,$maximum,$intervall);

            }
            else{

                
    $auswahl ="SELECT * FROM Devices";
            } 
    PHP-Code:



            $conn 
    connect();

            global 
    $auswahl;
            
    $querymysqli_query($conn,$auswahl);

            echo
    '<table>';
                    echo
    '<tr>';
                            echo
    '<td>ID</td>';
                            echo
    '<td>Name</td>';
                            echo
    '<td>Supply</td>';
                            echo
    '<td>LastService</td>';
                            echo
    '<td>ServiceInterval</td>';
                            echo
    '<td>PowerConsumption</td>';
                    echo
    '</tr>';

                while(
    $fetch $query->fetch_assoc()){
                    echo
    '<tr>';

                            echo
    '<td>'$fetch['ID'] .'</td>';
                            echo
    '<td>'$fetch['Name'] .'</td>';
                            echo
    '<td>'$fetch['Supply'] .'</td>';
                            echo
    '<td>'$fetch['LastService'].'</td>';
                            echo
    '<td>'$fetch['ServiceInterval'] .'</td>';
                            echo
    '<td>'$fetch['PowerConsumption'] .'</td>';                    

                    echo
    '</tr>';
                }
            echo
    '</table>';

            
    close($conn); 

  • #2
    Mein Problem ist, dass die Datenbank einfach nicht geupdatet wird
    Für ein Update nutze auch Update, für ein Insert Insert.
    Select holht nur Daten aus der Db.

    PHP-Code:
    @$kriterium1=$_POST['kriterium1']; 
    ist nicht so toll, eher mit isset prüfen ob es den $_POST wert gibt, dann validieren, dann gegen sql injection schützen http://php.net/manual/de/mysqli.real-escape-string.php
    dann das Statement zusammenbauen, Ausgabe und Fehler testen.

    Kommentar


    • #3
      Hallo,

      danke erstmal für deine Antwort. So weit funktioniert alles, habe es zum Laufen bekommen. Die Suchfunktion, die mir die jeweiligen Daten aus der Datenbank auslesen soll funktioniert für die erste und die zweite Checkbox, solange sie nur einzeln ausgewählt sind. Sobald ich aber beide auswähle, bekomme ich immer kein Ergebnis. Ich habe den Code so gemacht:

      Zunächst die Eingabefelder und den Button erstellt:

      HTML-Code:
              <form action="Device4.php" method="POST">
              <label class="container">
              <input type ="checkbox" id="eingabe" name="kriterium1"    value="kriterium1">    
              Nur Geräte anzeigen die innerhalb der nächsten
              <input type="number" id="eingabe" name="intervall" value="">    
             Tage gewartet werden müssen</br>
              </label>
      
              <label class="container">
              <input type ="checkbox" name="kriterium2"    value="kriterium2">    
              </label>
              Nur Geräte anzeigen, deren Stromverbrauch zwischen    
             <input type="float" id="eingabe" name="Minimum"> und <input type="float" id="eingabe" name="Maximum">
              liegen
              <input type="submit" id="button" value="Sortieren">
      Und dann der Fall, dass beide Checkboxes ausgewählt sind:

      PHP-Code:

              
      @$kriterium1=$_POST['kriterium1'];
              @
      $kriterium2=$_POST['kriterium2'];
              @
      $minimum=$_POST['Minimum'];
              @
      $maximum=$_POST['Maximum'];
              @
      $intervall=$_POST['intervall'];

      if(!
      $kriterium1="" and !$kriterium2="" and !$intervall=="" and !$minimum=="" and !$maximum==""){
      $auswahl"SELECT *
      FROM Devices
      WHERE PowerConsumption BETWEEN '
      $minimum' and '$maximum'
      AND
      WHERE DATE_ADD(LastService, INTERVAL ServiceInterval WEEK) < DATE_ADD(CURRENT_TIMESTAMP, INTERVAL '
      $intervall' DAY)";

      Kommentar


      • #4
        einmal WHERE reicht völlig aus.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          akretschmer Vielen Dank. Hat geklappt. Kann geschlossen werden

          Kommentar


          • #6
            Zitat von Leon2602 Beitrag anzeigen
            Kann geschlossen werden
            Und der Code entsorgt werden.

            Kommentar

            Lädt...
            X