PHP form dropdowns kullanarak bir MySQL sorgu oluşturma - kullanıcı açılan göz ardı ederse, o parametresi tarafından filtre yok

3 Cevap php

Ben 2 dropdowns kullanıcı seçme seçeneklerinden inşa edilecek basit bir MySQL sorgusu oluşturma.

Ben yaşıyorum sorun ben aslında bir seçeneği yoksa, bu açılır parametresi tarafından filtre olmadığını varsayılan aşağı her damla istiyorum olmasıdır.

Yani, onlar gelirse, ve sadece her şeyi görmelisiniz bir açılan seçim olmadan teslim çarptı. Onlar gelir ve sadece bir dropdowns seçim, sorgu temelde diğer açılan göre filtreleme yok sayacaktır.

I <OPTION VALUE='any'>Choose yapmaya çalıştık ama benim sorgu 'herhangi bir' ile ne yapacağını biliyor ve sadece sonucu gösterir vermedi.

İşte benim kodudur. Eğer sağlayabilir her türlü yardım için çok teşekkür ederim.

FORM

<form method="POST"  action="<?php echo $_SERVER['REQUEST_URI']; ?>">


<select name="GameType"> 
<OPTION VALUE='any'>Choose Game Type
<option value="Game1">Option 1</option>
<option value="Game2">Option 2</option>
<option value="Game3">Option 3</option>
</select>


<select name="Instructor"> 
<OPTION VALUE='any'>Choose Instructor
<option VALUE="InstructorA">Instructor A</option>
<option value="InstructorB">Instructor B</option>
<option value="InstructorC">Instructor C</option>
</select>

<input type='submit' value='Search Videos'>  
        </form>

MYSQL

<?PHP

 connection stuff

$db_handle = mysql_connect($server, $user_name, $password);
$db_found = mysql_select_db($database, $db_handle);

if ($db_found) {
$SQL = "SELECT * FROM Videos WHERE GameType=\"{$_POST['GameType']}\" AND Instructor=\"{$_POST['Instructor']}\"";
$result = mysql_query($SQL);

while ($db_field = mysql_fetch_assoc($result)) {

echo $db_field['ShortDescription'] . ", ";
echo $db_field['LongDescription'] . ", ";
echo $db_field['GameType'] . ", ";
echo $db_field['NumberOfPlayers'] . ", ";
echo $db_field['Instructor'] . ", ";
echo $db_field['Stakes'] . ", ";
echo $db_field['UserPermissionLevel'] . ", ";
echo $db_field['DateCreated'] . "<BR>";

}

mysql_close($db_handle);

}
else {
print "Database NOT Found ";
mysql_close($db_handle);
}




?>

3 Cevap

Geçen hafta, ben mikesdotnetting bulunan bir tekniği kullanarak buna benzer bir sorun için bir çözüm uyguladı. Ben de onun ardından kriterleri eşleştirme hareketli, WHERE yan tümcesinde kullanıcıdan bir boş giriş testini açıklamaktadır.

Yani, örneğin, onu benzetmek için:

"SELECT * FROM Videos 
  WHERE (GameType IS NULL OR GameType = $_POST['GameType']) 
    AND (Intructor IS NULL OR Instructor = $_POST['Instructor'])"

Ayrıca bu teknik, sizin seçili seçeneği geçersiz gerektirir unutmayın:

<OPTION VALUE=''>Choose Game Type</option>

Eğer böyle bir şey yapabilirsiniz:

$w=array();
if (!empty($_GET['rooms'])) $w[]="rooms='".mysql_real_escape_string($_GET['rooms'])."'";
if (!empty($_GET['space'])) $w[]="space='".mysql_real_escape_string($_GET['space'])."'";
if (!empty($_GET['max_price'])) $w[]="price < '".mysql_real_escape_string($_GET['max_price'])."'";

if (count($w)) $where="WHERE ".implode(' AND ',$w); else $where='';
$query="select * from table $where";

Bu kod boş bir değer için yazılmış olduğunu unutmayın (<OPTION VALUE=''>)

Ayrıca kod, SQL enjeksiyon korkunç muzdarip unutmayın

"Herhangi bir" seçilirse nerede yan tümcesi bölümünü bırakarak PHP SQL sorgusu oluşturun.