我真的无法弄清楚为什么这段代码在删除按钮代码的相关部分打破了。任何人都可以解决我在这里做错的事情吗?
我希望它只是语法,但如果它是基本的理解,我会欣赏一些输入,因为我还需要让这个表单做更多的这些更新函数。
<html>
<head>
<title>Call Log System</title>
</head>
<body>
<?php
$db_host = 'localhost';
$db_user = '*********';
$db_pwd = '********';
$database = 'call_log';
$table = 'Project_Submissions';
if (!mysql_connect($db_host, $db_user, $db_pwd))
die("Can't connect to database");
if (!mysql_select_db($database))
die("Can't select database");
//Display all fields
$result = mysql_query("SELECT * FROM {$table}");
if (!$result)
{
die("Query to show fields from table failed");
}
//Main Table
echo "<table border='1px' width='100%'>
<tr>
<th style='font-size:18px;width:20px;'>ID</th>
<th style='font-size:18px;'>Customer Name</th>
<th style='font-size:18px;'>Phone #</th>
<th style='font-size:18px;'>Address</th>
<th style='font-size:18px;'>Time Zone</th>
<th style='font-size:18px;'>E-mail</th>
<th style='font-size:18px;'>Alt Phone</th>
<th style='font-size:18px;'>Vehicle</th>
<th style='font-size:18px;'>Project Start</th>
<th style='font-size:18px;'>Project Description</th>
<th style='font-size:18px;'>RDM</th>
<th style='font-size:18px;'>Phone Attempt 1</th>
<th style='font-size:18px;'>Phone Attempt 2</th>
<th style='font-size:18px;'>Phone Attempt 3</th>
<th style='font-size:18px;'>Email Attempt</th>
<th style='font-size:18px;'>Notes</th>
<th style='font-size:18px;'>Received Date</th>
</tr>";
while ($row = mysql_fetch_array($result))
{
echo "<tr>
<td style='font-size:12px;'><center>{$row['ID']}</center></td>
<td style='font-size:12px;'>{$row['First_Name']} {$row['Last_Name']}</td>
<td style='font-size:12px;'><center><a href=\"tel:{$row['Phone']}\">{$row['Phone']}</a></center></td>
<td style='font-size:12px;'><center>{$row['Street']} {$row['City']} {$row['State_Country']}</center></td>
<td style='font-size:12px;'><center><div style=\"width:150px\">{$row['Time_Zone']}</div></center></td>
<td style='font-size:12px;'><center><a href=\"mailto:{$row['Email']}?Subject=FantomWorks\" target=\"_top\">{$row['Email']}</a></center></td>
<td style='font-size:12px;'><center>{$row['Alt_Phone']}</center></td>
<td style='font-size:12px;'><center>{$row['Year']} {$row['Make']} {$row['Model']}</center></td>
<td style='font-size:12px;'><center>{$row['Project_Start']}</center></td>
<td style='font-size:12px;width:500px;'><div style=\"overflow-x:auto; max-height:100px\">{$row['Project_Description']}</div></td>
<td style='font-size:12px;'><center>{$row['Restoration_Decision_Matrix']}</center></td>
<td style='font-size:12px;'><center>
<form action='".$_SERVER['PHP_SELF']."' method='post'>
<input type='hidden' id='ID' name='ID' value='{$row['ID']}' />
<input type='submit' name='formDelete' id='formDelete' value='Delete' />
</form>
</center></td>
<td style='font-size:12px;'><center><button type=\"submit\" form=\"form1\" value=\"Submit\">Called</button></center></td>
<td style='font-size:12px;'><center><button type=\"submit\" form=\"form1\" value=\"Submit\">Called</button></center></td>
<td style='font-size:12px;'><center><button type=\"submit\" form=\"form1\" value=\"Submit\">Emailed</button></center></td>
<td style='font-size:12px;'><center>Text Area</center></td>
<td style='font-size:12px;'><center>{$row['Received_Date']}</center></td>
</tr>";
}
//Check to see if delete button is pressed
if(isset($_POST['formDelete']))
{
if(isset($_POST['ID']) && !empty($_POST['ID']))
{
$ID = $_POST['ID'];
$result = mysql_query("DELETE FROM Project_Submissions WHERE ID ='".$ID."'";);
}
}
?>
</body>
</html>
答案 0 :(得分:2)
您的代码有拼写错误 - 字符串末尾有一个多余的分号。 ID ='".$ID."'";);
应为ID ='".$ID."'");
除此之外,您的代码包含严重的安全漏洞,它对SQL injection开放。如果有人要将3') OR TRUE; --
作为ID字段发布...您只是丢失了该表中的每条记录,因为您的删除查询现在适用于每条记录。这就是为什么清理来自用户的任何信息绝对至关重要。大多数用户不会尝试破坏您的网站,但有些用户会这样做。
mysql_*
系列函数为officially deprecated(请参阅红色通知?)。这意味着它没有被更新,任何新代码都应该停止使用它。替代品是PDO或Mysqli,两者都与您已经使用的非常相似。你学到的唯一新东西是参数化语句!
以下是如何使用PDO替换已弃用的mysql_ *函数,以及如何检查查询中的错误。
首先,我们将建立数据库连接。这取代了mysql_connect
内容:
$pdo = new PDO('mysql:host='.$db_host.';dbname='.$database , $db_user, $db_pass);
接下来,我们将使用参数
准备语句$statement = $pdo->prepare('
DELETE FROM
Project_Submissions
WHERE
ID = :id
');
查询的:id
部分称为参数。在执行语句之前,您必须告诉PDO应该去哪个值。您可以通过将值绑定到参数来实现。这是一种说“告诉PDO去那里的东西”的一种奇特方式--PDO将负责清理价值。
接下来,我们将执行语句AND绑定参数,一次全部:
$statement->execute(array(
'id'=>$_POST['ID']
));
现在,如果您想确保实际删除某些内容,可以使用$statement->rowCount()
- 它会告诉您受影响的行数。
全部放在一起:
$pdo = new PDO('mysql:host='.$db_host.';dbname='.$database , $db_user, $db_pass);
$statement = $pdo->prepare('
DELETE FROM
Project_Submissions
WHERE
ID = :id
');
$statement->execute(array(
'id'=>$_POST['ID']
));
查询安全是一个重要的主题,无论你是刚刚学习,还是想要弄清楚这些孩子们正在谈论什么的老盐。展望未来,在编写SQL查询时,记住这一点至关重要。
<强>文档强>
PDO
- http://us1.php.net/manual/en/pdo.errorinfo.php PDO::prepare
- http://us1.php.net/manual/en/pdo.prepare.php PDOStatement::execute
- http://php.net/manual/en/pdostatement.execute.php 答案 1 :(得分:1)
$result = $conn->query("DELETE FROM Project_Submissions WHERE ID =$row['ID']");
我还没有看到$ row [&#39; ID&#39;]尚未设置的位置。看起来就在该语句的上方,您将要删除的行的ID设置为$ quoteid。
如果是这样的话,你会反而想说:
$result = $conn->query("DELETE FROM Project_Submissions WHERE ID = $quoteid");
答案 2 :(得分:0)
修正了它。你去吧!
g