如何在动态下拉列表中将值存储在我的数据库中?

时间:2018-06-13 04:24:20

标签: php html sql

这是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(),因为它在下一次连续下拉列表时也是如此。

2 个答案:

答案 0 :(得分:0)

但是,您需要在DB中保存设备名称,建议保存数字ID。

原因:名称可能会发生变化,但是,ID仍会存在。

如果说您的设备ID:名称为99 : iPhone 6并且您保存在数据库中: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'] : '';

  6. 将此保存到DB。

答案 1 :(得分:0)

$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