2013-04-23 86 views
0

我有一個選擇多個像這樣的形式:選擇多個(PHP和MySQL)

<select name="states[]" size="5" multiple> 
    <option value="2">state 1</option> 
    <option value="3">state 2</option> 
    <option value="4">state 3</option> 
    <option value="5">state 4</option> 
    <option value="6">state 5</option> 
</select> 

我想一定要選擇一個以上的國家的可能性,然後進行查詢到我的數據庫和顯示所選每個州的描述。

所以這就是我要使用PHP和MySQL查詢:我有一個代碼

$state = $_POST['states']; 
$data = mysql_query("SELECT * from states WHERE id_state = '$state'",$db); 

while($row = mysql_fetch_array($data)){ 
    $result=$row['description']; 
} 

echo $result; 

,並沒有顯示任何東西。

我該如何解決這個問題?

+2

你的MySQL查詢是不安全的。 – Blender 2013-04-23 02:11:02

+0

開始使用數據庫驅動程序的PDO。接下來,您可以使用'var_dump($ _ POST)'來查看傳入後置數組的結構。 – Daniel 2013-04-23 02:15:21

回答

1

這就需要一個簡單的foreach去通過陣列,並根據每個值作爲這樣得到的結果,

foreach($_POST['states'] as $state) { 
    $data = mysql_query("SELECT * from states WHERE id_state = '$state'",$db); 
    $row = mysql_fetch_array($data); 
    echo $row['description']; 
} 

此外,由於你不保護你的查詢在某種和使用MySQL的這已被棄用PHP 5.5.0的,我建議你尋找到PDO的mysqli預處理語句

+0

非常感謝您的回覆,我完全按照您告訴我的方式工作,非常感謝您的幫助,我只需在代碼之前添加一個if,因爲它顯示錯誤。但現在我解決了這個問題:) – 2013-04-23 16:06:28

+0

我很高興我的解決方案爲你工作的完美。 – 2013-04-25 02:31:46

0

你可以通過在A迭代建立字符串rray:

$state = ""; 

foreach($_POST['states'] AS $s) 
{ 
    // Sanitize $s here 
    $state .= "`id_state` = " . $s . " OR"; 
} 

if($state) 
{ 
    $state = substr($state, 0, -3); 

    $data = mysql_query("SELECT * from states WHERE $state",$db); 

    while($row = mysql_fetch_array($data)){ 
     echo $row['description']; 
    } 
} 

當然,你應該使用類似MySQLiPDO來處理數據庫交互。他們將有方法來輕鬆消毒輸入,所以你可以避免顯而易見的SQL injection

坦米爾也有一個很不錯的IN選擇方法。這只是一個選擇。

7

試試這個

$state = $_POST['states']; // return Array 
$count_states = count($state); 

if($count_states > 0) { 
    $states = implode(',', $state); 
    $data = mysql_query("SELECT * from states WHERE id_state IN ($states)",$db); 

    while($row = mysql_fetch_array($data)){ 
     echo $row['description']; 
    } 
} 
+0

您好坦米爾,感謝您的回放,我試着你告訴我,並以某種方式工作,當我選擇多個選項,然後我寫這個來顯示結果:echo $ result;但它只顯示我選擇的最後一個選項。 – 2013-04-23 15:47:51

1

$_POST['states']擁有與所選國家的所有的ID的數組。

當然,你可以查詢數據庫,每貼STATE_ID,但方式更好,速度更快,將是使一個查詢,看起來像這樣,只使用一個查詢:

SELECT description FROM states WHERE id_state=1 OR id_state=2 etc etc 

這也可能開始使用數據庫抽象層如PDO是一個很好的觀點。 張貼狀態的數量是可變的,我們需要做的聲明還變量:

// The [connection setup][2] by PDO is done in $conn, with some proper exception handlers 
// e.g. $conn = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 

// Fill an array with count() number of elements with value 'id_state=?' 
$place_holders = array_fill(0, count($_POST['state']), 'id_state= ?'); 

//implode the array 
$place_holders = implode(' OR ', $place_holders); 

// prepare the query 
$st = $conn->prepare("SELECT description FROM state WHERE $place_holders"); 

// execute to above prepared query with the $_POSTED states 
$st->execute($_POST['state']); 

// traverse the result 
foreach($st->fetchAll() AS $r){ 
    // do some magic 
} 
0
Example (pages for edit): 

//On select_multiple.php (Form): 

<?php 
//Conn 
include('incl_config.php'); 

//Multiple data to bring 
$sql = " select COD_DXS,VALOR_DXS from hc_dxsindromico where ESTADO_DXS='1' "; 
[email protected]_query($sql);  
?> 

//In the form select: 
<select multiple="multiple" size="7" name="dxsindromico[]"> //look yes or yes brackets [] 
    <option value="" selected="selected">Choose one or more options</option> 
     <?php 
     while($row=mysql_fetch_array($result)){ 
    ?> 
     <option value="<?php echo $row['COD_DXS']; ?>" style="color:#F00;"><?php echo $row['VALOR_DXS'];?></option> 
     <?php } ?> 
</select> 

//////////// On grabar_mtr.php /////////////// 

<?php 
include('incl_config.php'); 
/*Multiple selection form in HTML5, PHP and Bootstraps 
Created by: www.nycsoluciones.com 
Version: 1.1*/ 

//we use a foreach to traverse the array (values of our select and save them in the table dxsindromico_data) 

if(isset($_POST['dxsindromico'])){ 
    foreach($_POST['dxsindromico'] as $insertar) { 
     //echo $insertar; 
     $sqli="insert into dxsindromico_data(DXSINDROMICO_HC) values('$insertar')"; 
     //echo $sqli; 
     //exit; 
     $resulti=mysql_query($sqli); 
    } 
} else{ 
    foreach($_POST['dxsindromico'] as $insertar) { 
     //echo $insertar; 
     $sqli="insert into dxsindromico_data(DXSINDROMICO_HC) values('$insertar')"; 
     $resulti=mysql_query($sqli); 
    } 
} 
?>