从数据库中检索值,存储在输入文本和textarea中,更改,使用PHP将新的值传递给DB?

时间:2014-03-25 11:19:25

标签: javascript php jquery html mysql

我正在尝试使用PHP和MySQL更改数据库中的值。

我从数据库获取值并将它们存储在每个输入的占位符中,但是当我再次提交表单时,它提交带有空值的输入,我尝试将它们再次存储在Value属性中,每次输入旧值都会覆盖什么我写入输入字段,因此数据库中没有任何内容发生变化。

如何在输入字段中保留旧值,但如果这些字段的内容发生更改,则新值将传递回数据库而不是旧值。

这是我的代码:

function list_products () {
$get = mysql_query('SELECT `id`, `SKU`, `sub`, `pname`, `desc`, `price`, `ship`, `qty`, `cat` FROM `products` ORDER BY `id` DESC');
if (mysql_num_rows($get) == 0) {
    echo "There are no product to display!";
} else {
    while ($get_row = mysql_fetch_assoc($get)) {
        echo 
        '<h5>'.$get_row['pname'].' id: '.$get_row['id'].'</h5> 
        <form action="delete_product.php" method="post">
            <input type="hidden" value="'.$get_row['id'].'" name="id">
            <input type="submit" name="submit" value="DELETE" class="btn btn-lg btn-danger">
        </form>
        <form action="update_p.php" method="post">
            <input type="hidden" placeholder="'.$get_row['id'].'" name="id" value="'.$get_row['id'].'">
            <label>SKU:</label>
            <input type="text" placeholder="'.$get_row['SKU'].'" name="SKU" value="'.$get_row['SKU'].'" required="">
            <label>Name:</label>
            <input type="text" placeholder="'.$get_row['pname'].'" name="pname" required="" value="'.$get_row['pname'].'">
            <label>Subtitle:</label>
            <textarea rows="2" maxlength="46" name="desc" placeholder="'.$get_row['sub'].'" required="">'.$get_row['sub'].'</textarea>
            <label>Description:</label>
            <textarea rows="4" name="desc" placeholder="'.$get_row['desc'].'" required="">'.$get_row['desc'].'</textarea>
            <label>Price:</label>
            <input type="text" placeholder="'.number_format($get_row['price'], 2).'" name="price" value="'.number_format($get_row['price'], 2).'" required="">
            <label>Shipping:</label>
            <input type="text" placeholder="'.number_format($get_row['ship'], 2).'" name="ship" value="'.number_format($get_row['ship'], 2).'" required="">
            <label>Quantity:</label>
            <input type="text" placeholder="'.$get_row['qty'].'" name="qty" value="'.$get_row['qty'].'" required="">
            <label>Category:</label>
            <input type="text" placeholder="'.$get_row['cat'].'" name="cat" value="'.$get_row['cat'].'" required=""><br>
            <input type="submit" name="submit" value="EDIT" class="btn btn-success btn-lg">
        </form>
        <hr>
        ';
    };
}
}

update_p.php页面:

if (empty($_POST) === false && empty($errors) === true) {
$id = $_POST['id'];
$update_data = array(
    'pname'     => $_POST['pname'],
    'desc'      => $_POST['desc'],
    'price'     => $_POST['price'],
    'ship'      => $_POST['ship'],
    'qty'       => $_POST['qty'],
    'cat'       => $_POST['cat']
);
update_product($id, $update_data);

update_data函数:

function update_product($id, $update_data) {
    $update = array();
    array_walk($update_data);
    foreach($update_data as $field=>$data) {
        $update[] = '`' . $field . '` = \'' . $data . '\'';
    }   
    mysql_query("UPDATE `products` SET " . implode(', ', $update) . " WHERE `id` = $id");
}

@MaveRick感谢您的努力,但我的问题是如何在我们将信息发送到服务器之前覆盖页面上输入字段的值,我认为它可以使用JavaScript而不是php来完成更清楚这些输入字段是指已经存储的数据库中的值,我想通过从数据库中检索这些字段的内容并在实际输入字段中打印它们,让用户可以在管理面板中更改它们。如果客户按下编辑(提交)而没有触摸任何东西,相同的值将再次发送到数据库,这样就不会有任何改变,而在另一种情况下,客户在任何这些字段中添加或更改了任何值,然后新的价值将通过。希望我现在澄清我的问题。无论如何,谢谢你的帮助。

@Prafful Garg我已经尝试了价值领域,但是感谢你的帮助无论如何它都不起作用

1 个答案:

答案 0 :(得分:1)

您可以从文件update_p.php中的数据库中再次检索数据,如下所示:

if (empty($_POST) === false && empty($errors) === true) {
$id = $_POST['id'];
$get = mysql_query("SELECT * FROM `products` WHERE `id` = '$id';");
$get_row = mysql_fetch_assoc($get);

$update_data = array(
    'pname'     => (empty($_POST['pname'])?$get_row['pname']:$_POST['pname']),
    'desc'      => (empty($_POST['desc'])?$get_row['desc']:$_POST['desc']),
    'price'     => (empty($_POST['price'])?$get_row['price']:$_POST['price']),
    'ship'      => (empty($_POST['ship'])?$get_row['ship']:$_POST['ship']),
    'qty'       => (empty($_POST['qty'])?$get_row['qty']:$_POST['qty']),
    'cat'       => (empty($_POST['cat'])?$get_row['cat']:$_POST['cat'])
);
update_product($id, $update_data);

但这不是一种专业的方法。 你可以做的是一个循环来创建更新语句并测试每个输入;如果不为空,则添加到更新语句, name=value否则跳过此输入并处理数组POST中的下一个。类似于以下内容:

function update_product($id, $update_data) {
    $update = array();
    array_walk($update_data);
    foreach($update_data as $field=>$data) {
        $update[] = '`' . $field . '` = \'' . $data . '\'';
    }  
    $query = "UPDATE `products` SET `id` = '$id'";
    foreach($update_data AS $k=>$v){
        if(!empty($v) && strlen($v)>0) 
           $query .= ", `".$k."` = '".$v."'";
    }
    $query .= " WHERE `id` = '$id';";
    mysql_query($query);
}

重要提示: mysql()易受攻击且已弃用,请尽量避免使用mysql()并使用mysqli()或{{而不是1}}扩展名。