Ankündigung

Einklappen
Keine Ankündigung bisher.

DB-Abfrage per Checkbox

Einklappen

Neue Werbung 2019

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

  • DB-Abfrage per Checkbox

    Liebe Freunde,
    nach mehreren Stunden bei Google habe ich mich entschlossen, mich hier zu registrieren, um meine Frage zur formulieren:

    Ich habe ein Formular mit einer Volltextsuche und einem Select-Element, dessen Inhalt sich aus dem entsprechenden Feld-Inhalten der Datenbank (eine Tabelle) generiert. Es handelt sich um verschiedene Objektarten (Buch, Brief, Foto, etc.). In einer Option "Erweiterte Suche" befinden sich weitere 19 Select-Felder, die ebenso funktionieren.Die Abfrage und Ausgabe funktionieren soweit. Leider habe ich Formular und Ausgabe nicht selbst programmiert, sondern nur mit viel "try and error" modifiziert.

    Bei einigen Datensätzen ist im Feld "archiv_link" eine URL eingetragen. Wie muss ich nun im Formular eine Checkbox anlegen, die sicherstellt, dass – unabhängig von allen anderen Formulareingaben – immer nur die Ergebnisse mit einer URL ausgegeben werden?

    Bei der Textausgabe konnte ich mit »if« und »!==""« arbeiten, um unnötige Umbrüche und/oder Überschriften zu vermeiden.
    PHP-Code:
    <?php 
    if ($value['archiv_titel'] !== "") {
    echo 
    '<br> Titel: ' $value['archiv_titel'];
    }
    ?>
    Dann müsste eine Checkbox doch etwa so aussehen(?):
    HTML-Code:
    <input type="checkbox" name="digital" value=" !== "" "> Nur digitalisierte Objekte
    Aber wie geht es dann weiter?

    Viele Grüße
    Mathias

  • #2
    Willkommen im Forum.

    du benutzt Codeblöcke, das ist löblich

    also deine Checkbox muss dann eher so aussehen:
    PHP-Code:
      <input type="checkbox" name="digital"Nur digitalisierte Objekte 
    die Checkbox muss sich in einem Form Element befinden und diese Muss ein Senden Knopf haben. Beim Absenden des Formulars musst du dann dein SQL query anpassen. Also etwa so:

    PHP-Code:
    $istPostAnfrage $_SERVER['REQUEST_METHOD'] === 'POST';
    $gibtEsEineCheckboxDigital = isset($_POST['digital']);
    $istCheckboxAusgewaehlt $_POST['digital'] === 'on';

    $sql ="SELECT FROm.." //das ist angenommen deine SQL anweisung, wenn am ende kein ORDER  BY, GROUP BY oder Limit steht, kannst du folgendes machen:

    if($istPostAnfrage AND $gibtEsEineCheckboxDigital AND $istCheckboxAusgewaehlt){
    $sql .=" AND archive_title != '' ";
    }
    //hast du ORDER BY GROUP BY LIMIT in deiner SQL Anwiesung, musst du die da raus nehmen und nach dem If mit .= anhängen 
    Hoffe ich habe es verständlich erklärt
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

    Kommentar


    • #3
      Hallo Scorp,

      mit so einer raschen Antwort habe ich gar nicht gerechnet... Dake!

      Ich habe eben alles eingefügt:


      PHP-Code:
      <input type="checkbox" name="digital"> Nur digitalisierte Objekte   

        <?php
        $istPostAnfrage 
      $_SERVER['REQUEST_METHOD'] === 'POST';
        
      $gibtEsEineCheckboxDigital = isset($_POST['digital']);
        
      $istCheckboxAusgewaehlt $_POST['digital'] === 'on';
        
      $mysql_query "SELECT archiv_Nr FROM archiv GROUP BY archiv_Nr ORDER BY archiv_Nr ASC";

        
      ?>
      Funktioniert so leder nicht, aber es kommt auch keine Fehlermeldung...

      Also für das momentane Select-Eingabefeld mit der Entitäten für »archiv_link« gibt es folgenden Code, der sich bis auf den für das Volltextfeld (search_string) immer wiederholt.

      PHP-Code:
      <span class="feldtitel">Link:</span> 
       <select class="select" name="link">
       <?php
       $mysql_query 
      "SELECT archiv_link FROM archiv GROUP BY archiv_link ORDER BY archiv_link ASC";
       
      $result_mysql mysql_query($mysql_query$link);
       if(
      $result_mysql){
       echo 
      ' <option value="NULL" selected="selected"> - beliebig - </option> ';
       while (
      $row mysql_fetch_assoc($result_mysql)) {
       
      $selected '';
       if((isset(
      $_POST['link']) == true) && ($_POST['link'] == $row['archiv_link'])){
       
      $selected ' selected="selected" ';
       }
       echo 
      '
       <option value="' 
      $row['archiv_link'] . '" ' $selected '>' $row['archiv_link'] . '</option>
       '
      ;
       }
       }else{
       echo 
      '<option value="">Keine Auswahl möglich</option>';
       }
       
      ?>
       </select>
      Das müsste doch die Basis sein. Sorry, wenn ich mich so dumm anstelle, aber ich steige da nicht durch.

      Viele Grüße
      Mathias

      Kommentar


      • #4
        naja du hast das if statement gar nicht übernommen und hast dein $mysql_query nicht erweitert und mysql_* Funktionen musst du mit mysqli_* ersetzen die funktion gibt es in PHP nicht mehr, wenn du dein Script auf ein Hoster hochlädst wird dein Script nicht funktionieren
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

        Kommentar


        • #5
          Zitat von BlackScorp Beitrag anzeigen

          PHP-Code:
          $istPostAnfrage $_SERVER['REQUEST_METHOD'] === 'POST';
          $gibtEsEineCheckboxDigital = isset($_POST['digital']);
          $istCheckboxAusgewaehlt $_POST['digital'] === 'on'
          Eigentlich lese ich hier nur mit, aber welchen Sinn macht das denn alles?
          Wenn $gibtEsEineCheckboxDigital true ist, MUSS es dann nicht zwingend auch eine "Post-Anfrage" sein?
          Und da der Checkbox selber keinerlei value mitgegeben wurde: ist dann nicht $istCheckboxAusgewaehlt immer dann true, wenn auch $gibtEsEineCheckboxDigital true ist?

          Aus meiner Sicht ist alles außer isset($_POST['digital']) überflüssig, aber ich lerne ja auch gerne was dazu.
          Deswegen meine Nachfrage...

          Kommentar


          • #6
            Zitat von Deprecated Beitrag anzeigen

            Eigentlich lese ich hier nur mit, aber welchen Sinn macht das denn alles?
            Wenn $gibtEsEineCheckboxDigital true ist, MUSS es dann nicht zwingend auch eine "Post-Anfrage" sein?
            Naja ich war mir halt nicht sicher es gibt welche die machen eine form ohne eine Action, dadurch kommt eine GET anfrage, ich hatte schon mal dass ich Beispiel Code gezeigt habe und da waren keine Variablen, diese "istPostAnfrage" ist einfach nur für mich, damit ich dann, bei miserfolg sagen kann "was gibt denn die Variable aus"

            Zitat von Deprecated Beitrag anzeigen
            Und da der Checkbox selber keinerlei value mitgegeben wurde: ist dann nicht $istCheckboxAusgewaehlt immer dann true, wenn auch $gibtEsEineCheckboxDigital true ist?

            Aus meiner Sicht ist alles außer isset($_POST['digital']) überflüssig, aber ich lerne ja auch gerne was dazu.
            Deswegen meine Nachfrage...
            Ich arbeite halt immer mit einem error_reporting(-1) weil der mir auch notices und warnung zeigt, wenn du keine post anfrage schickst oder wegen einem HTML Code Fehler dann das Feld verloren geht, dann wird eine Notice angezeigt "undefined index bla bla" aber wahrschienlich hast du Recht,

            PHP-Code:
            $istCheckboxAusgewaehlt = isset($_POST['digital']) && $_POST['digital'] === 'on' 
            das wäre dann wohl "korrekter"


            MathiasB

            also noch mal zu Verständnis, dein <input Tag der befindet sich in einem <form Tag? Und du hast ein "Absenden" Button?

            dann müsstest du den Code so abändern

            PHP-Code:
            <input type="checkbox" name="digital"> Nur digitalisierte Objekte   

              <?php
              $istPostAnfrage 
            $_SERVER['REQUEST_METHOD'] === 'POST';

              
            $istCheckboxAusgewaehlt = isset($_POST['digital']) &&  $_POST['digital'] === 'on';
              
            $mysql_query "SELECT archiv_Nr FROM archiv "
            if($istPostAnfrage &&  $istCheckboxAusgewaehlt){
             
            $mysql_query .= " WHERE  archiv_link != ''";
            }
             
            $mysql_query .=" GROUP BY archiv_Nr ORDER BY archiv_Nr ASC";

              
            ?>
            aber der Code ist unschön. Wir nutzen bei der Progarmmierung das "EVA-Prinzip" also Eingabe -> Verabeitung -> Ausgabe. Das wird hier nicht gemacht, dadurch ist der Code unübersichtlich und macht eventuell unnötige Dinge.
            Außerdem wie bereits davor erwähnt. mysql_ Funktionen gibt es nicht mehr in den neuen PHP Versionen und ich würde jemanden auf deine SQL queries drauf schauen lassen, nicht dass du noch Sicherheitslücken drin hast. Du musst eingaben mit mysqli_real_escape_string escapen, dabei ist es wichtig dass um den escapten String im SQL query auch ein hochkomma steht.

            Es seidenn du nutzt das alles nur in deinem lokalen intranet, dann ist es egal
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar

            Lädt...
            X