Php 替换mySQL不在mySQL表中追加/替换
我有3个参数,可以将新的/更新旧的条目附加到自定义mysql表中。然而,我不明白为什么当我按下提交按钮。。。没有发生任何事情,我也没有得到任何错误。我不知如何是好。我问了这个问题,并根据其他教程修改了我的代码,认为这是我的问题。。。运气不好: 我知道mysql注入存在一些问题——目前我只想看到它起作用,如果你有减少注入的建议,我洗耳恭听。我还是mySQL的新手。。。但是学习要缓慢,并且至少要了解如何使用字符串变量来创建修改过的查询 这是我的密码Php 替换mySQL不在mySQL表中追加/替换,php,mysql,sql-injection,Php,Mysql,Sql Injection,我有3个参数,可以将新的/更新旧的条目附加到自定义mysql表中。然而,我不明白为什么当我按下提交按钮。。。没有发生任何事情,我也没有得到任何错误。我不知如何是好。我问了这个问题,并根据其他教程修改了我的代码,认为这是我的问题。。。运气不好: 我知道mysql注入存在一些问题——目前我只想看到它起作用,如果你有减少注入的建议,我洗耳恭听。我还是mySQL的新手。。。但是学习要缓慢,并且至少要了解如何使用字符串变量来创建修改过的查询 这是我的密码 echo "<p><h5>
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);
}
谢谢:您需要使用绑定参数的prepare和execute来避免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);
同时阅读中的答案首先,您应该在HTML输出之前将isset$\u POST['submit']调用移动到。然后,尝试在其中添加一些检查和中断-例如,就在isset调用print\u r$\u POST中,然后调用exit停止脚本-这将向您显示它将进入if-Then,以及$\u POST的内容。对于MySQL注入,您希望使用prepared语句您试图从$\u POST['userid']获取一个值,但它没有定义。在表单外部设置值时,如果要使用该变量获取该值,则必须将其作为隐藏输入发送。另外,$\u POST从输入的名称而不是id获取值。您的地址输入没有任何名称。为什么使用“替换”而不是“更新”?除了所有其他好的注释外,您没有将字符串类型值括在引号中。这一点在对你上一个问题的答复中得到了明确的体现。另外,如果您以前收到过SQL注入的警告,并且您正在全神贯注地修复它,那么您为什么还没有这样做呢?@Ivan我这样做了,我的数组返回null。。。应该至少有一个用户ID,因为它是静态的且未更改。-CésarEscudero我在当前代码中将其作为一个隐藏变量进行了解释-我使用了替换,因为我想同时调用add to table或replace current value(如果存在)GregSchmidt我正在努力解决让代码正常工作的问题,接下来就是减少注入。。。我已经挣扎了几天了!