2017-04-12 2 views
1

Ich bin neu in PHP-Codierung. Ich habe andere Vorlieben für den Benutzer, um von meiner HTML-Seite auszuwählen. Ich möchte alle vom Benutzer ausgewählten Kontrollkästchen abrufen und die Hotelnamen anzeigen, die alle diese Einstellungen enthalten. Wenn beispielsweise ein Benutzer die Kontrollkästchen "Roof top", "Sea side" und "Swimming pool" auswählt, müssen die Hotels, gegen die in den entsprechenden Spalten in der Datenbank mytrip.db eine 1 platziert ist, auf einmal abgerufen werden angezeigt werden. Mein Code nimmt nur einen Checkbox-Wert an und zeigt nur den Hotelnamen an. Ich möchte die Hotels anzeigen, die alle Präferenzen enthalten. Mein Code ist unten:Wie können Werte aus der SQLite 3-Datenbank auf der Basis mehrerer in PHP auf einmal ausgewählten Kontrollkästchen abgerufen werden?

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>PHP: Get Values of Multiple Checked Checkboxes</title> 
<link rel="stylesheet" href="css/php_checkbox.css" /> 
</head> 
<body> 
<div class="container"> 
<div class="main"> 
<h2>PHP: Get Values of Multiple Checked Checkboxes</h2> 
         <select id="mySelect" name="list"> 
         <option selected>Select a place</option> 
         <option value="1">Lahore</option> 
         <option value="2">Dubai</option> 
         <option value="3">New York</option> 
         <option value="4">Canberra</option> 
         <option value="5">London</option> 
         </select> 
<form action="php_checkbox.php" method="post"> 
<label class="heading">Select Your Preferences:</label> 
<input type="checkbox" name="check_list[]" value="Swimming pool"><label>Swimming pool</label> 
<input type="checkbox" name="check_list[]" value="Roof top"><label>Roof top</label> 
<input type="checkbox" name="check_list[]" value="Sea side"><label>Sea side</label> 



<input type="submit" name="submit" Value="Submit"/> 

</html> 
<?php include 'checkbox_value.php';?> 
</form> 
</div> 
</div> 
</body> 
</html> 

checkbox_value.php Code ist unten:

<?php 
class MyDB extends SQLite3 
    { 
     function __construct() 
     { 
     $this->open('mytrip.db'); 
     } 
    } 
    $db = new MyDB(); 
    if(!$db){ 
     echo $db->lastErrorMsg(); 
    } else { 

    } 
if(isset($_POST['submit'])){ 
if(!empty($_POST['check_list'])) { 
// Counting number of checked checkboxes. 
$checked_count = count($_POST['check_list']); 
echo "You have selected following ".$checked_count." option(s): <br/>"; 
$prefarray=array(); 
$i=0; 
// Loop to store and display values of individual checked checkbox. 
foreach($_POST['check_list'] as $selected) { 
$prefarray[$i]= $selected; 

echo "<p>".$prefarray[$i] ."</p>"; 
echo "<p>".$selected ."</p>"; 
$i++; 
} 
echo "<p>".$i ."</p>"; 
$sql =<<<EOF 

     SELECT hotel_name from Dubai WHERE $prefarray[i]==1 AND $prefarray[i-1]==1 ; 
EOF; 

    $ret = $db->query($sql); 
    while($row = $ret->fetchArray(SQLITE3_ASSOC)){ 
     echo "<p> <br /></p>\n"; 
     echo "\n". $row['hotel_name'] . "\n"; 
    } 





    $db->close(); 
echo "<br/><b>Note :</b> <span>Similarily, You Can Also Perform CRUD Operations using These Selected Values.</span>"; 
} 
else{ 
echo "<b>Please Select Atleast One Option.</b>"; 
} 
} 
?> 

Das Problem mit diesem Code ist, dass es nur ein Kontrollkästchen Wert anzeigt, wenn ich Abfrage verwenden

SELECT hotel_name FROM Dubai WHERE $selected==1 

Ich habe versucht, die ausgewählten Kontrollkästchenwerte zu speichern, indem ich ein Array "Prefarray" machte. Aber wenn ich die Abfrage ausführen, die ich in meinem checkbox_value.php-Code veröffentlicht habe, gibt es mir einen Fehler von "Undefined offset 3 in prefarray". Ich möchte, dass die Datenbankabfrage nur die Checkbox-Werte enthält, die vom Benutzer ausgewählt wurden. Zum Beispiel, wenn der Benutzer 2 von drei Kontrollkästchen ausgewählt dann meiner Frage wie

SELECT hotel_name FROM Dubai WHERE $checkbox==1 AND $checkbox2==1; 

Jede Hilfe zwei dieser Aufgaben aussehen sollte anerkannt werden zu erreichen!

Antwort

1

Ich habe Ihren Code repariert und refaktoriert (konnte mich nicht stoppen).

Ich habe die Spaltennamen in die richtigen geändert. Es gab einen redundanten Code, der nichts getan hat, also habe ich ihn losgeworden. Die Hauptsache, nach der Sie gesucht haben, ist das Verketten jeder ausgewählten Spalte in foreach loop. Ich überprüfe auch ausgewählte Werte gegen hartcodierten $hotelOptions für den Schutz gegen SQL-Injektion. Hier

ist, was ich habe:

checkbox_value.php:

<?php 
class MyDB extends SQLite3 
{ 
    function __construct() 
    { 
     $this->open('mytrip.db'); 
    } 
} 
$db = new MyDB(); 
if(!$db){ 
    echo $db->lastErrorMsg(); 
} else { 

} 

$hotelOptions = array('swimming_pool', 'roof_top', 'sea_side'); 

if (isset($_POST['submit'])) { 
    if (!empty($_POST['check_list']) && is_array($_POST['check_list'])) { 
     // Counting number of checked checkboxes. 
     $checked_count = count($_POST['check_list']); 
     echo "You have selected following ".$checked_count." option(s): <br/>"; 
     // Loop to store and display values of individual checked checkbox. 
     $where = ''; 
     foreach($_POST['check_list'] as $selected) { 
      echo "<p>".$selected ."</p>"; 
      if (array_search($selected, $hotelOptions) !== false) { 
       $where .= " AND {$selected} = 1"; 
      } 
     } 
     $where = substr($where, 5, strlen($where)); 

     $sql = "SELECT hotel_name FROM Dubai WHERE {$where};"; 

     $ret = $db->query($sql); 
     while($row = $ret->fetchArray(SQLITE3_ASSOC)){ 
      echo "<p> <br /></p>\n"; 
      echo "\n". $row['hotel_name'] . "\n"; 
     } 
     $db->close(); 
     echo "<br/><b>Note :</b> <span>Similarily, You Can Also Perform CRUD Operations using These Selected Values.</span>"; 
    } else { 
     echo "<b>Please Select Atleast One Option.</b>"; 
    } 
} 

html Layout:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/> 
    <title>PHP: Get Values of Multiple Checked Checkboxes</title> 
    <link rel="stylesheet" href="css/php_checkbox.css"/> 
</head> 
<body> 
<div class="container"> 
    <div class="main"> 
     <form action="checkbox_value.php" method="post"> 
      <h2>PHP: Get Values of Multiple Checked Checkboxes</h2> 
      <select id="mySelect" name="list"> 
       <option selected>Select a place</option> 
       <option value="1">Lahore</option> 
       <option value="2">Dubai</option> 
       <option value="3">New York</option> 
       <option value="4">Canberra</option> 
       <option value="5">London</option> 
      </select> 
      <p class="heading">Select Your Preferences:</p> 

      <input type="checkbox" name="check_list[]" value="swimming_pool" id="checkbox_1"> 
      <label for="checkbox_1">Swimming pool</label> 

      <input type="checkbox" name="check_list[]" value="roof_top" id="checkbox_2"> 
      <label for="checkbox_2">Roof top</label> 

      <input type="checkbox" name="check_list[]" value="sea_side" id="checkbox_3"> 
      <label for="checkbox_3">Sea side</label> 

      <div> 
       <input type="submit" name="submit" Value="Submit"/> 
      </div> 
      <?php include 'checkbox_value.php';?> 
     </form> 
    </div> 
</div> 
</body> 
</html> 
+0

Nach dem Ausführen von Code ich bin immer „Warnung: SQLite3: : query(): Anweisung kann nicht vorbereitet werden: 1, in der Nähe von "; ": Syntax e rror in checkbox_value.php in Zeile 35 ". Und auch in der Funktion fetchArray(). Bitte führen Sie, wie kann ich es implementieren? – MinjaNinja

+0

versuchen Sie '$ sql =" SELECT hotel_name VON Dubai WHERE ". $ Wo."; ";' – xReprisal

+0

immer noch die gleiche Warnung und Fehler erhalten. – MinjaNinja

Verwandte Themen