我还是php的新手并且正在努力解决它,但我仍然坚持下面这篇文章:
code for deleting a row in my table
我有一个链接指向我的脚本。我在上半场运行很好但是当我按下提交并尝试执行我的删除查询时,它不会转到我的第二个if语句,更不用说进入删除查询了。
$ pgd是页面标识
我的预感是我在while语句之后构建的表单中的操作存在问题
请原谅我对我的msg的奇怪格式,但凌晨2点非常累,我保证将来更好地格式化我的问题!任何帮助表示赞赏
编辑:确定其他然后明显错误的方法= post @。@;
编辑:
嘿大家, 首先,我要感谢大家的回应。 我刚开始在上周末用PHP编码,所以请原谅我凌乱的代码。代码仍在本地运行,我的主要目标是完成功能,然后确保我的代码安全。现在回到这个问题,如果我对我的问题含糊不清,我很抱歉。我会试着重复一遍。
我的问题不是选择我要删除的项目,问题是它不会进入第二个if语句。
重新编辑: 这次使用我当前的代码:
if($_GET['delete'] == "y")
{
//content hier verwijderen
$sqlcont1="SELECT * FROM content where id ='".$_GET['id']."'";
echo $sqlcont1;
$resultcont1 = mysql_query($sqlcont1) or die (include 'oops.php');
while($rowcont1= mysql_fetch_array($resultcont1)){
echo '<form class="niceforms" action="?pg='.$pgd.'&delete=y&remove=y&id='.$_GET['id'].'" method="post">';
echo '<h1>'.$rowcont1['Titel'].'</h1>';
echo '<p>'.$rowcont1['Content'].'</p>';
echo '<input type="submit" value="Delete article">';
echo '</form>';
}
if($_GET['remove']=="y"){
echo 'rararara';
$id=$_GET['id'];
$sqlrem="DELETE FROM content WHERE id="$id;
echo $sqlrem;
mysql_query($sqlrem);
}
}
回显$ sqlrem现在给我以下内容: DELETE FROM content WHERE id = 8 作为我当前的代码,我进入第二个IF语句但现在要删除它!
@everyone: 好吧也许大声思考或跟着我的步骤工作,但代码工作,我知道它非常凌乱,它需要微调。我要感谢大家的帮助和反馈。我喜欢这个,你可能会经常看到我的问题和杂乱的代码而且没有逃脱:(
答案 0 :(得分:1)
首先,您的脚本中存在SQL注入漏洞。任何人都可以添加一些将附加到您的查询中的字符串,可能会以几乎可以使用数据库中的数据的方式对其进行更改。
使用反SQL注入方法之一来逃避您的值。例如,在php.net/manual/en/function.mysql-query.php
上阅读更多内容重点......
只有在您调用两个参数(remove
和delete
设置为y
的网址时,才会执行删除代码。这意味着您的网址应与something.php?delete=y&remove=y
类似也许你只是没有发现它。
请详细说明发生的任何错误,并告诉我上述解决方案是否有帮助。
答案 1 :(得分:0)
mysql_fetch_array()返回一个数组
你的while语句充当if,并且不会像你想象的那样通过返回的数组进行迭代
你需要像
这样的东西$all_rows = mysql_fetch_array($result);
foreach ($all_rows as $row) {
$sql = "delete from table where id = " . $row['id'];
}
答案 2 :(得分:0)
你单独在那个剧本中遇到很多问题,所以只是为了让事情变得更容易(考虑到你上传了一张照片),放一个
echo $sqlrem;
在第二个if语句中,查看是否显示了查询。如果没有,这意味着它甚至没有到达那部分代码,如果它被显示,复制它并在phpmyadmin中运行它。这应该输出更一致的错误消息。告诉我们这是什么,我们将通过它。
答案 3 :(得分:0)
我还注意到您的DELETE
SQL查询可能存在问题。如果您的$pgd'
id是整数,则不应包含'
单引号,仅适用于字符串。
**Correction**
$sqlrem = "DELETE FROM content WHERE id = " . controw1['id'];
修改强>
无论如何,为了帮助每个人,我输入了他的代码以便于查看。
我认为他的错误是$rowcont1['Tilel']
- &gt;这可能导致PHP出错,因为该列不存在。我假设,它应该是'Title'导致拼写错误。
if(_$GET['delete'] == "y") {
$sqlcont1 = "SELECT * FROM content where id ='" . $_GET['id'] . "'";
$resultcont1 = mysql_query($sqlcont1) or die (include 'oops.php');
while ($rowcont1 = mysql_fetch_array($resultcont1)) {
echo '<form class = "niceforms" action = "?pg=' .$pgd . '&delete=y&remove=y">';
echo '<h1>' . $rowcont1['Title'] . '<h1>'; // <-- error here
echo '<p>' . $rowcont1['Content'] . '</p>';
echo '<input type = "submit" value = "Delete article">';
echo '</form>';
}
if ($_GET['remove'] == "y"){
$sqlrem = "DELETE FROM content WHERE id = " . $rowcont1['id'];
mysql_query ($sqlrem);
}
}
答案 4 :(得分:0)
在我看来,你在这里将两个表单混合在一起:你想看看你是否去了删除行表单(前几行),并且你试图呈现删除行表单( while循环。)我会把这两件事分开。有一个页面只显示行删除的表单,另一个页面处理这些请求。另一个页面将您带到删除行页面。
现在,只需回显您希望在$ _GET []中收到的所有值,看看它们是否符合您的预期。