对PHP上的SQL表使用DELETE

时间:2017-02-02 23:15:43

标签: php html sql

我有一个表,我想使用PHP Web界面删除一行。要做到这一点,我有两个PHP文件,在某处必须有一个错误。我认为这与playername以字符编写的事实有关,因为我从中获取的示例具有应该作为整数删除的值。

以下是两个文件(您可以忽略刚调用该表的部分!):

1)pdelete.php     

<?php
$query =  'SELECT p.name, p.club, f.link, ROUND(2016-p.birthyear, 0) AS "age", p.position
FROM pplayers p, pflags f
WHERE p.country = f.country
ORDER BY name';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
?>

<form action="premove.php" method="POST">
<table border="1">

<tr> <th>Name</th>
 <th>Team</th>
 <th>Nationalität</th>
 <th>Alter</th>
 <th>Position</th>
 <th><i>Select</i></th>
</tr>

<?php while ($x = pg_fetch_object($result)) {
  echo "<tr>" .
       "<td> $x->name </td>" .
       "<td> $x->club </td>" .
       "<td> $x->link </td>" .
       "<td> $x->age </td>" .
       "<td> $x->position </td>" .
       "<td> <input type=\"radio\" name=\"name\" value=\"" . $x->name . "\"/> </td><tr>\n" ;

  }
?>

<tr>
  <td colspan=6> <center><input type="submit" value="Delete selected"> </center></td>
</tr>
</table>

2)premove.php     

<body>

<?php
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

pg_query("DELETE FROM pplayers WHERE name = " . test_input($_POST[name])) or die('Delete failed.');


echo "Spieler " . $_POST[name] . "aus der Datenbank entfernt!";
?>

</body>

我收到的错误消息(在此示例中,我要删除的播放器称为“ThomasMüller”):

  

警告:pg_query():查询失败:错误:语法错误在“Müller”或附近第1行:删除来自pplayers WHERE name =ThomasMüller^ in / srv / pc8 / home / h1354320 / SR / www / premove。第13行的PHP   删除失败。

抱歉格式不正确。我希望它有点可读。 在此先感谢!!

2 个答案:

答案 0 :(得分:2)

pg_query("DELETE FROM pplayers WHERE name = '" . test_input($_POST[name])."'") or die('Delete failed.');

答案 1 :(得分:1)

  在“Müller”或附近的

语法错误第1行:删除来自pplayers WHERE name =ThomasMüller^ in

你似乎完全弄乱了查询,因为这没有道理:

pg_query("DELETE FROM pplayers WHERE name = " . test_input($_POST[name])) or die('Delete failed.');

您需要关闭查询。部分or die...也是错误的。这在语法上会更好:

pg_query(sprintf("DELETE FROM pplayers WHERE name = '%s'",  test_input($_POST[name]))) or die('Delete failed.');

但是你的test_input()非常垃圾。有专门的功能可以正确地转发数据进行查询 - &gt; pg_escape_string()