Php If语句不';即使条件为真,也不能执行
我在这里完全不知所措。我编写了一个相对简单的PHP脚本,它根据HTML表单中的用户输入更新数据库记录。该脚本包含一个基于隐藏输入执行的“if”语句。我知道语句执行是因为SQL查询执行时没有问题。我遇到的问题是,如果设置了查询对象,那么应该在另一个if语句中执行,但显然不是这样,因为其中的$message变量没有赋值。我知道已设置查询对象,因为当我回显它时,它显示为“1”。下面是有问题的代码块:Php If语句不';即使条件为真,也不能执行,php,Php,我在这里完全不知所措。我编写了一个相对简单的PHP脚本,它根据HTML表单中的用户输入更新数据库记录。该脚本包含一个基于隐藏输入执行的“if”语句。我知道语句执行是因为SQL查询执行时没有问题。我遇到的问题是,如果设置了查询对象,那么应该在另一个if语句中执行,但显然不是这样,因为其中的$message变量没有赋值。我知道已设置查询对象,因为当我回显它时,它显示为“1”。下面是有问题的代码块: <?php if(isset($_POST['submitted']) == 1) { $n
<?php
if(isset($_POST['submitted']) == 1) {
$name = mysqli_real_escape_string($dbc, $_POST['name']);
$q = "UPDATE ".$_POST['table']." SET name = '".$name."' WHERE id = ".$_POST['id'];
$r = mysqli_query($dbc, $q);
echo $r;
print_r($_POST);
echo mysqli_error($dbc);
if ($r) {
$message = '<p>Operation executed successfuly</p>';
} else {
$message = '<p>Operation did not execute because: '.mysqli_error($dbc);
$message .= '<p>'.$q.'</p>';
}
}
?>
EDIT2:好的,我提出了一个解决问题的“修复”,也就是说,我在$message的回显之前将if条件向上移动,并将条件更改为isset($\u POST['submitted']
。我想这是必须的。我想在处理提交的数据和解析PHP文件时,我应该阅读更多关于操作顺序的信息,因为我很困惑为什么这个“修复”会起作用……这个(有条件的)陈述是一个误判:
if(isset($_POST['submitted']) == 1)
您需要做的是将它们分成两个单独的语句:
if(isset($_POST['submitted']) && $_POST['submitted']== 1)
或者只需删除==1
您的代码也会面临严重的SQL注入。从用户输入更新表和设置列根本不安全
充其量只能使用事先准备好的陈述
如果(isset($\u POST['submitted'])==1)
首先,这不是使用该方法的方法。顺便说一句,$q=“UPDATE”。$\u POST['table']。"
你确定你真的想这样做吗?你在这里自找麻烦。说。了解。我建议使用PDO
,我希望它比使用非参数化查询更容易、更干净、更安全。另外,可以帮助你在MySQLi
和PDO
之间进行选择。好的,我删除了==1。它执行,no有问题。我将研究带有参数化查询的预处理语句。我们需要查看更多代码。您的问题开始不清楚POST数组的值及其来源。在我看来,您可能得到了$\u POST['id']
来自上一个查询/在填充表单/隐藏元素中,可能需要获取id。好的,谢谢,我会研究它,但这对解决主要问题没有帮助…@iprit1915错误报告显示了什么?可能有一些错误你看不到。我们不知道POST数组中的值。你没有连接吗使用mysqli api?@iprit1915执行ect。此外,在使用UPDATE进行查询时,请使用mysqli\u受影响的行()
,否则,您可能会得到另一个误报。好的,我设置了错误报告(E\u ALL)但这并没有对输出产生影响。我正在用隐藏的输入将GET变量传递给POST,但这不可能是原因,当然……我的意思是在按下submit按钮后GET变量消失了,但我在查询中传递POST变量。我不确定你说的连接api是什么意思,你是说有db吗连接?它存储在$dbc变量中。
if(isset($_POST['submitted']) == 1)
if(isset($_POST['submitted']) && $_POST['submitted']== 1)
$q = "UPDATE :table SET :name = :name WHERE id = :id;
$q = "UPDATE ? SET name = :name WHERE id = :id;