使用html,php,js从我的数据库中删除行时出现问题

时间:2013-08-22 07:20:09

标签: php javascript html

我正在制作一个我有这张桌子的应用程序:

<?php
require_once 'Connect2db3.php';
?>    
<form>    
<fieldset>
<article class="rondehoeken"> 
<header>
    <div class="streep1"></div>
    <div class="streep2"></div>
    <div class="streep3"></div>
    <div class="streep4"></div>
    <div class="streep5"></div>
    <h1 id="artikel-titel" >Op Vooraad</h1>
</header>

<div id="artikel-container">    
<table class="table 1">
<thead>
 <title>Inventory Grid.html</title>
    <meta charset = "UTF-8" />
    <style type = "text/css">
    table, td, th {
      border: 1px solid black;
    } 
    </style>
</thead>    
<tbody>
 <?php
$con=mysqli_connect("localhost","root","admin","inventarisdb");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM BCD");

echo "<table border='0'>
<tr>
<th>Categorie</th>
<th>SerieNummer</th>
<th>MacAdress</th>
<th>ProductCode</th>
<th>Prijs</th>
<th>RekNummer</th>
<th>PaletNummer</th>
<th>Hoeveelheid</th>
<th>Aantekeningen</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['Categorie'] . "</td>";
  echo "<td>" . $row['SerieNummer'] . "</td>";
  echo "<td>" . $row['MacAdress'] . "</td>";
  echo "<td>" . $row['ProductCode'] . "</td>";
  echo "<td>" . $row['Prijs'] . "</td>";
  echo "<td>" . $row['RekNummer'] . "</td>";
  echo "<td>" . $row['PaletNummer'] . "</td>";
  echo "<td>" . $row['Hoeveelheid'] . "</td>";
  echo "<td>" . $row['Aantekeningen'] . "</td>";
  echo '<td><input type="hidden" class="entryid" name="id" value='.$row['ID'].' /><a href="#" class="delete">delete</a></td>';
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);
?>

</article>
</fieldset>
</form>

在标题中:

删除表格:

<?php
$db = array (
    'host' => 'localhost',
    'user' => 'root',
    'pass' => 'admin',
    'dbname' => 'inventarisdb'
);

if(!mysql_connect($db['host'], $db['user'], $db['pass']))
{
    trigger_error('Fout bij verbinden: '.mysql_error());
}
elseif(!mysql_select_db($db['dbname']))
{
    trigger_error('Fout bij selecteren database: '.mysql_error());
}
else
{
    $sql = "SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'";
    if(!mysql_query($sql))
    {
        trigger_error('MySQL in ANSI niet mogelijk');
    }
}

$id = $_GET['id'];
$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'";
?> 

此表从另一个表中查找数据,并提供从数据库中删除该表中的行的选项。

我刚刚说过的所有内容都适用于此脚本,但实际从数据库中删除的数据除外。按下删除后,执行删除操作并提示所有人说要删除一行。它会从表中删除它,但是当您检入数据库或只是使用表刷新页面时,该行仍然存在并且尚未删除

为什么会发生这种情况或做什么的任何想法?或者也许如何更容易?

4 个答案:

答案 0 :(得分:3)

我认为这不会起作用

$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'";

您应该使用 AND 或OR分隔参数,具体取决于您的成功删除条件不需要逗号,还提供每个时间的列名。

这样的东西
$sql="DELETE FROM BCD WHERE id='$Categorie' AND  serial_number='$SerieNummer', //etc

最好根据主键而不是这样的值范围进行删除

也不要使用mysql_函数,将mysqli或PDO与参数化查询一起使用

答案 1 :(得分:2)

因为在您的代码中很明显,您不会执行查询。

答案 2 :(得分:1)

您的隐藏输入名为id并且您正在调用$id = $_GET['id'],您查询中的所有其他变量都是未定义的,因为如果您已定义它们,则尚未显示已定义它们的位置。

替换:

$id = $_GET['id'];
$sql="DELETE FROM BCD WHERE id='$Categorie', '$SerieNummer', '$MacAdress', '$ProductCode', '$Prijs', '$RekNummer','$PaletNummer' ,'$Hoeveelheid', '$Aantekeningen'";

with:

$id = intval($_GET['id']); // assuming your id column is integer type.
$sql="DELETE FROM BCD WHERE id=$id";

另请注意,mysql_函数已弃用。您应该使用mysqlipdo

答案 3 :(得分:0)

根据您的示例代码演示,我得出了与@BabakBandpay相同的结论; 你从未真正运行DELETE查询

无论这是否属实,虽然移动到MySQLi库是一个很好的步骤,但您仍然使用非常易受SQL注入攻击的代码。请尝试使用预准备语句:http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

以下是基于代码(和API文档)的示例:

<?php

    $mysqli = new mysqli('localhost', 'root', 'admin', 'inventarisdb');

    /* check connection */
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }

    // ... the rest of your code

    $id = $_GET['id'];
    $stmt = $mysqli->prepare("DELETE FROM BCD WHERE id=?");
    $stmt->bind_param("i", $id);

    $success = $stmt->execute();

    $mysqli->close();
?> 

这段代码虽然没有经过测试,但并不是真正的生产质量,仅仅因为绑定语句的性质而更加安全:

  

绑定变量将由服务器自动转义。

当我仍然使用PHP编码时,我更喜欢PDO,但使用MySQLi的OOP版本是一个不错的折衷方案,所以我强烈建议阅读文档中的示例。

编辑:作为附录,我还建议您通过过滤器模块(http://www.php.net/manual/en/book.filter.php)运行输入变量。假设$id应该是一个整数,我会将赋值更新为:

$id = filter_var($_GET['id'], FILTER_SANITIZE_NUMBER_INT);

这将删除$_GET['id']中不是数字或+/-符号的所有内容。