簡體   English   中英

將ID存儲到數據庫表中時會在該處拋出名稱

[英]Storing id into database table throw there name

我正在為數據輸入的小型項目。 讓我們假設一個名為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>

provider_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執行此操作。

在名稱輸入給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);
}

我注意到您在問什么,但我確實有個建議。 這是一個一般性提示,不僅限於供應商,我將以它們為例。

我會使用更好的解決方案:一個包含所有供應商名稱的下拉列表。 每個清單項目的值是供應商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;

這種方法的另一個優點是,沒有有效的供應商就無法提交表單。 通常,您應該嘗試將輸入限制為您所允許的范圍。

暫無
暫無

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

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