簡體   English   中英

如何在動態下拉列表中將值存儲在數據庫中?

[英]How do I store value in my database in a dynamic dropdown list?

這是PHP / mySQL中的動態下拉列表。 我想將名稱存儲在數據庫服務器中,但是標簽輸出整數值。

如果我將代碼從<option value="<?php echo $row["id"]; ?>">更改為<option value="<?php echo $row["name"]; ?>">顯示my_sqli_fetch_array預期參數1錯誤。

我的目標是存儲在下拉列表中顯示的相應$ row [“ name”]而不是$ row [“ id”]。

<?php

$link = mysqli_connect("localhost","root", "");
mysqli_select_db($link,"loginsystem");

?>

<form name="form1" action="" method="post">
<table>
<tr>
<td>Select Assembly Line</td>
<td><select id ="assemblylinedd" onChange="change_assemblyline()">
<option>Select</option>

<?php
$i=1;
$res=mysqli_query($link, "SELECT * FROM assemblyline");
$count=mysqli_num_rows($res);
if ($count >0){
while($row=mysqli_fetch_array($res))
{
?>
<option value="<?php echo $row["id"]; ?>"><?php echo $row["name"]; ?></option>
}

<?php $i++;} }else{
echo "No record Found !";
} ?>

</select></td>
</tr>

腳本代碼:

<script type="text/javascript">
function change_assemblyline()
{
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET","ajax.php?assemblyline="+document.getElementById("assemblylinedd").value, false);
    xmlhttp.send(null);
    alert(xmlhttp.responseText);
    document.getElementById("devices").innerHTML=xmlhttp.responseText;

}

這是我的ajax.php

$link = mysqli_connect("localhost","root", "");
mysqli_select_db($link,"loginsystem");

$assemblyline = isset($_GET['assemblyline']) ? $_GET['assemblyline'] : '';
$devices = isset($_GET['devices']) ? $_GET['devices'] : '';


if($assemblyline!="")
{   

    $res=mysqli_query($link, "SELECT * FROM devices WHERE devices_id=$assemblyline");
    echo "<select id='devicesdd' onchange='change_devices()'>";
    while($row=mysqli_fetch_array($res))

    {

    echo "<option value='$row[id]'>";echo $row["name"]; echo "</option>";

    }
    echo "</select>";

}

請不要忽略onchange_devices(),因為在下一個連續的下拉列表中,它也一樣。

雖然,這是您在DB中保存設備名稱的要求,但建議保存數字ID。

原因:名稱可能會更改,但是ID將保留。

如果說您的設備id:名稱為99 : iPhone 6並保存在DB: iPhone 6 ,則名稱將更改為iPhone6

在這種情況下,如果您搜索名稱為iPhone6記錄,顯然,上面的記錄將不會顯示。

如果保存數字ID,則無論名稱更改如何,它都會顯示。

回到您的問題:

我不能在這里寫代碼。 但是偽代碼邏輯會有所幫助(希望如此):

  1. 采取隱藏字段device_name

  2. 更改下拉列表時,使用jQuery將值分配給隱藏字段。

  3. $("#assemblylinedd option:selected").text();

  4. 現在,提交后,您將在隱藏字段中獲得device_name

  5. $devices = isset($_GET['device_name']) ? $_GET['device_name'] : '';

將此保存到數據庫。

$link = mysqli_connect("localhost","root", "");
mysqli_select_db($link, "loginsystem");

$assemblyline = isset($_GET['assemblyline']) ? $_GET['assemblyline'] : '';
$devices = isset($_GET['devices']) ? $_GET['devices'] : '';


if(!empty(trim($assemblyline)))
{   
    $res = mysqli_query($link, "SELECT * FROM devices WHERE devices_id = '$assemblyline'");

    echo "<select id='devicesdd' onchange='change_devices()'>";

    while($row = mysqli_fetch_array($res))
    {

        echo "<option value='" . $row["id"] . "'>" . $row["name"] . "</option>";

    }

    echo "</select>";
}
  • 我添加了一個正確的空支票,而不是您的!= "" ,該支票以前並未阻止傳遞單個空格。
  • 我已經引用了您的查詢值,我肯定會使用准備好的語句,而不是直接傳遞值。
  • 我已經引用了您的$row[id]
  • 我已經正確連接了您的字符串。

注意:最好返回一個帶有ID和名稱的JSON數組對象,而不是通過AJAX輸出HTML,這將使您的代碼庫在將來更加整潔和適應。

閱讀材料

empty

trim

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM