将id存入数据库表会抛出名称

时间:2014-09-23 10:17:46

标签: php jquery mysql ajax

我正在从事小型项目的数据录入工作。 假设一个名为material字段的表格 id , name , visible , position

和其他名为received_material字段的表格 id , material_id , quantity , supplier

和一个用于接收材料的简单html表单,这里的结构

<form method="post" action="<?php echo SERVER['PHP_SELF'] ?>">
    <label for="date">date</label>
    <input type="text" name="date" />

    <label for="name">Material Name</label>
    <input type="text" id="name" name="name" />

    <label for="quantity">Weight</label>
    <input type="text" name="quantity" />

    <label for="supplier">Supplier</label>    
    <input type="text" name="supplier" />

    <input type="submil" value="submit"/>
</form>

<script>
    $('#name').autocomplete({source : 'supplier_chk.php'});
</script>

这里的supplier_check.php脚本......

<?php include 'includes/session.php'; ?>
<?php include 'includes/functions.php'; ?>

<?php if(!logged_in()) {
    redirect_to('login.php');
}
?>
<?php if ( logged_in_role('administrator') || logged_in_role('store') ) { ?>
<?php echo msg(); ?>

<?php 

$search = escape_string($_GET['term']);
$sql = "SELECT id, supplier_name FROM `supplier`
        WHERE `supplier_name` LIKE '%$search%'";
$result = mysqli_query($connection,$sql);
confirm_query($sql);

$json = [];
    while ( $row = mysqli_fetch_assoc($result) )
    {
        $json[] = $row['supplier_name'];
    }
    echo json_encode($json);

}

?>

我正在使用JQuery UI进行名称自动填充。获取材质名称抛出ajax方法。它可以轻松自动填充材料名称,但我可以存储材料ID而不是材料名称..请帮助如何使用jquery / javascript或php执行此操作。

2 个答案:

答案 0 :(得分:1)

在名称输入之前添加隐藏字段给id获取元素..

这里是html示例

<form method="post" action="<?php echo SERVER['PHP_SELF'] ?>">
    <label for="date">date</label>
    <input type="text" name="date" />

    <label for="name">Material Name</label>
    <input type="hidden" id="id" name="id" />
    <input type="text" id="name" name="name" />

    <label for="quantity">Weight</label>
    <input type="text" name="quantity" />

    <label for="supplier">Supplier</label>    
    <input type="text" name="supplier" />

    <input type="submil" value="submit"/>
</form>


<script>
$('#name').autocomplete({
    minLength: 0,
    source : 'material_chk.php',
    focus: function( event, ui ) {
    $( "#name" ).val( ui.item.label );
    return false;
    },
    select: function( event, ui ) {
    $( "#name" ).val( ui.item.label );
    $( "#id" ).val( ui.item.id );

    return false;
    }
});
</script>

在material_chk.php中

<?php 
$search = escape_string($_GET['term']);
$size = isset($_GET['size'])? escape_string($_GET['size']): null;
$sql = "SELECT * FROM `materials`
        WHERE `name` LIKE '%$search%'";
$result = mysqli_query($connection,$sql);
confirm_query($sql);
$json = [];
    while ( $row = mysqli_fetch_assoc($result) )
    {
        $json[] = array("id"=>$row['id']),"label"=>$row['item_name']);
    }
    echo json_encode($json);
}

答案 1 :(得分:0)

我注意到你要问的是什么,但我确实有提示。这是一个一般性提示,不仅限于供应商,我将以它们为例。

我会使用更好的解决方案:包含所有供应商名称的下拉列表。每个列表项的值是供应商ID。因此,您直接提交供应商ID。

<select id="suppliers" name="supplierSelector">
  <option value="1">Philips</option>
  <option value="2">Sony</option>
  <option value="3">Samsung</option>
  <option value="4">Akai</option>
</select>

您还可以在下拉列表下方输入搜索文本输入。键入该搜索框的任何内容都将限制下拉列表。这可以在Javascript中完成。

但基本上我的解决方案是让用户使用他们的名字选择正确的供应商ID。在PHP中将是:

$sql    = 'SELECT id, supplier_name FROM supplier';
$result = mysqli_query($connection,$sql);

echo '<select id="suppliers" name="supplierSelector">'.PHP_EOL;

while ($supplier = mysqli_fetch_assoc($result))
{ 
  extract($supplier);
  echo '<option value="'.$id.'">'.$supplier_name.'</option>'.PHP_EOL;
}

echo '</select>'.PHP_EOL;

此方法的附加优势是,如果没有有效的供应商,则无法提交表单。通常,您应该尝试将输入限制为您知道允许的内容。