我有一个3个参数,应该将新的/更新旧条目附加到自定义mysql表中。但是,当我按下提交按钮时,我无法弄清楚为什么 ...没有任何反应(也没有任何错误)。我不知道该怎么做。我已经问了这个问题before,并且基于其他教程认为我的代码已经修改了一些问题......没有运气:(
我理解mysql injections
存在问题 - 目前我只是希望看到它起作用,如果你有减轻注射的建议,我很满意。我仍然是mySQL的新手...但是学习很慢并且(最低限度地)理解字符串变量如何用于创建更改的查询。
这是我的代码;
echo "<p><h5>Change address:</h5>";
//get user id when the login/visit page
$userid = get_current_user_id();
$loop = new WP_Query( $args );
//form start
echo '<form method = "post" action = "'. $_SERVER['PHP_SELF'] .'">';
//dropdown menu for collecting SKU of product
echo '<br><select name="sku">';
echo '<option>-- Select product--</option>';
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<option value=' . $product->get_sku() . '>' . $product->get_sku() . ' </option>';
endwhile;
echo '</select>';
//hidden input for userid
echo '<input type="hidden" id="userid" name="userid" value="' . $userid . '">';
//textbox for address
echo '<br><input type="text" value="Insert new address here" id="address" name="address" size="40" />';
//submit button
echo '<br><input type="submit" name="submit">';
echo '</form>';
//write to database
if(isset($_POST['submit'])) {
$user = $_POST['userid'];
$sku = $_POST['sku'];
$address = $_POST['address'];
$con2 = mysqli_connect("IP","user","password","wpdb");
$updateaddress = "REPLACE INTO wp_newaddress(user, sku, address) VALUES($user, $sku, $address)";
$retval = mysqli_query($con2,$updateaddress);
if($retval)
{
echo 'Data Updated';
}else{
echo 'Data Not Updated';
}
mysqli_close($con2);
}
谢谢:)
答案 0 :(得分:0)
您需要使用prepare和execute with bound parameters来避免SQL注入风险。
每次准备和执行后都需要检查错误情况,并将任何错误输出到错误日志中。如果你不这样做,你就不会看到错误。
当然,您还应该查看PHP错误日志(通常与您的http服务器错误日志相同),但这不用说。每个PHP开发人员都应该关注错误日志(即使很多开发人员都不知道这一点)。
以下是一个例子:
$user = $_POST['userid'];
$sku = $_POST['sku'];
$address = $_POST['address'];
$con2 = mysqli_connect("IP","user","password","wpdb");
$updateaddress = "REPLACE INTO wp_newaddress (user, sku, address) VALUES (?, ?, ?)";
$stmt = mysqli_prepare($con2,$updateaddress);
if ($stmt) {
mysqli_stmt_bind_param($stmt, 'sss', $user, $sku, $address);
$ok = mysqli_stmt_execute($stmt);
if ($ok) {
echo 'Data Updated';
} else {
echo 'Data Not Updated';
error_log(mysqli_stmt_error($stmt));
}
mysqli_stmt_close($stmt);
} else {
error_log(mysqli_error($con2));
}
mysqli_close($con2);
中的答案