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

Javascript 从数据库中检索值,存储在输入文本和文本区域中,更改,使用PHP将新值传递给DB?,javascript,php,jquery,html,mysql,Javascript,Php,Jquery,Html,Mysql,我正在尝试使用PHP和MySQL更改数据库中的值 我从数据库中获取值,并将它们存储在每个输入的占位符中,但当我再次提交表单时,它会使用空值提交输入,我尝试再次将它们存储在每个输入的值属性中。旧值覆盖了我在输入字段中写入的内容,因此数据库中没有任何更改 如何将旧值保留在输入字段中,但如果这些字段的内容发生更改,则新值将传递回数据库,而不是旧值 这是我的密码: function list_products () { $get = mysql_query('SELECT `id`, `SKU`, `s

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

我从数据库中获取值,并将它们存储在每个输入的占位符中,但当我再次提交表单时,它会使用空值提交输入,我尝试再次将它们存储在每个输入的值属性中。旧值覆盖了我在输入字段中写入的内容,因此数据库中没有任何更改

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

这是我的密码:

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>
        ';
    };
}
}
更新数据功能:

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我已经尝试了值字段,但它不起作用。无论如何,感谢您的帮助

您可以在文件
update\u 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);
但这不是一种专业的方式。 您可以做的是创建update语句并测试每个输入的循环;如果不为空,则添加到update语句
,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()
dbo()
扩展。

用mysql
UPDATE
语句显示部分代码plsPlaceholders仅供查看。它们未与
$\u POST
对象一起传递。请显示更新statement@MaveRickupdate语句位于update_产品功能中,谢谢
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);
}