我正在从事小型项目的数据录入工作。
假设一个名为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执行此操作。
答案 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;
此方法的附加优势是,如果没有有效的供应商,则无法提交表单。通常,您应该尝试将输入限制为您知道允许的内容。