Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL语句中使用PHP变量_Php_Html_Mysql_Variables - Fatal编程技术网

如何在SQL语句中使用PHP变量

如何在SQL语句中使用PHP变量,php,html,mysql,variables,Php,Html,Mysql,Variables,在任何人说之前,我会在修复这个错误之后保护自己不受SQL注入的影响。我正在制作一个将新闻报道提交到数据库的应用程序。此页面用于从数据库中删除报表 我所尝试的: 为SQL和语音标记添加括号的所有可能方法。我的ICT老师和我已经看了将近2个小时,找不到解决办法。我也搜索过Google和Stack Overflow,但找不到答案 好的,当我回显报告时,会显示正确的报告id。当我输入实际id时,例如5,报告被删除。但当我放入$report\u id时,没有任何内容被删除 有人能告诉我,为了让它正常工作,

在任何人说之前,我会在修复这个错误之后保护自己不受SQL注入的影响。我正在制作一个将新闻报道提交到数据库的应用程序。此页面用于从数据库中删除报表

我所尝试的: 为SQL和语音标记添加括号的所有可能方法。我的ICT老师和我已经看了将近2个小时,找不到解决办法。我也搜索过Google和Stack Overflow,但找不到答案

好的,当我回显报告时,会显示正确的报告id。当我输入实际id时,例如5,报告被删除。但当我放入$report\u id时,没有任何内容被删除

有人能告诉我,为了让它正常工作,我需要做些什么修正吗

下面是代码(编辑:这是固定的代码。我在表单底部添加了隐藏字段,还有其他一些小更改(比如去掉额外的表单标签)):


足球中心-删除报告
足球中心-删除新闻报道

你的两种说法是混合的。试试下面

  // Delete the score data from the database
  $query = "DELETE FROM news_reports WHERE report_id = ".$report_id;  
  mysqli_query($dbc, $query) or die("mysql_query failed - Error: " . mysqli_error($dbc));

您正在使用
post
方法发送
表单
,并使用
get
检索表单。这可能是问题的根源


另外,您没有发送
id
参数,因此
$\u get[id]
$\u post[id]

如果id是一个数字,则不必将id用单引号括起来

$query = "DELETE FROM news_reports WHERE report_id = '".$report_id."' LIMIT 1"
但这不是问题所在。您没有在确认请求中包含ID,也不允许从会话变量中检索该值。在“显示表单确认删除”部分添加一个id为的隐藏输入框

(并有一个不同的代码分支进行确认!和一个无效ID的测试!并将此移动到POST,至少是这样!)

$query = "..." or die(...);
为什么?

另外,还有两个表单开始标记——嵌套表单是无效的

我假设
id
变量来自表单以外的其他源,因为没有表单元素提交它


最后,确保在表单中指定
get
post
。我建议使用
post
,然后将
$\u GET[“submit”]
$\u GET[“confirm”]
更改为
$\u post[“submit”]
$\u post[“confirm”]

,您需要在代码中检查以下内容

  • 表单中的ID元素在哪里
  • 您已将POST方法置于表单中,但从$\u GET检索数据时,应将其更改为$\u POST
  • 将mysqli_错误放在mysqli_查询语句之后

    $query = "DELETE FROM news_reports WHERE report_id = ".$report_id;
    
    mysqli_query($dbc, $query);  or die("mysql_query failed - Error: " . mysqli_error());
    
然后检查mysql中的错误,如果它不起作用



希望,它能帮助您解决问题。

+1为了预防无聊的SQL注入序列,您如何发送
id
变量?我假设您的gets var、submit、confirm和id都存在,对吧……在php开始时,尝试对它们中的每一个进行响应script@SAVAFA啊,好问题!等待你在这里干什么?表格中的表格?!但是我在那里没有看到任何输入name=“id”?默认的表单方法是GET(),但是您关于缺少有效的
id
id的观点是正确的。关于默认值,您是对的,但是他将方法设置为
post
alreadyohh。他有一个嵌套的表单。前面两行有一个表单头,没有
方法=
。您好,谢谢您的帮助。我在表单中添加了输入id,效果非常好+1.这是正确的答案。
die
语句为misplaced@Matanya没错,但是字符串的计算结果应该是布尔值true,所以这不会导致问题……发送数据库链接是否正确,请在此处查看:@bwoebi,您是对的。lcolli98,您能
var\u dump($query)
并向我们显示输出吗?嗨,在我将ID添加到表单中后,一切都已修复!当我使用POST时,不会检索ID,只会使用GET。你知道这是为什么吗?嗨,or die是想看看我是否能得到确切的问题:)当我使用POST时,ID不会被检索到,只有get。你知道为什么吗?嗨,我在表单中添加了ID,效果很好!当我使用POST时,不会检索ID,只会使用GET。你知道为什么吗?嗨,谢谢你!当我使用POST时,不会检索ID,只会使用GET。你知道这是为什么吗?
$query = "DELETE FROM news_reports WHERE report_id = ".$report_id;

mysqli_query($dbc, $query);  or die("mysql_query failed - Error: " . mysqli_error());