从我的sql表中删除一行

时间:2011-05-26 00:09:24

标签: php mysql

我还是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: 好吧也许大声思考或跟着我的步骤工作,但代码工作,我知道它非常凌乱,它需要微调。我要感谢大家的帮助和反馈。我喜欢这个,你可能会经常看到我的问题和杂乱的代码而且没有逃脱:(

5 个答案:

答案 0 :(得分:1)

首先,您的脚本中存在SQL注入漏洞。任何人都可以添加一些将附加到您的查询中的字符串,可能会以几乎可以使用数据库中的数据的方式对其进行更改。

使用反SQL注入方法之一来逃避您的值。例如,在php.net/manual/en/function.mysql-query.php

上阅读更多内容

重点......

只有在您调用两个参数(removedelete设置为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 []中收到的所有值,看看它们是否符合您的预期。