2017-02-02 10 views
0

テーブルがあり、PHPウェブインタフェースを使用して行を削除したい。これを行うには、私は2つのPHPファイルを持っており、どこかで間違いがあっているはずです。私は、playernameが文字で書かれているという事実と関係があると思います。なぜなら、これを取った例は、整数として削除されるはずの値を持っていたからです。ここで PHP上のSQLテーブルにDELETEを使用

は(あなたはおそらく、テーブルを呼び出す部分を無視することができます!)二つのファイルです:

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」と呼びます):

Warning: pg_query(): Query failed: ERROR: syntax error at or near "Müller" LINE 1: DELETE FROM pplayers WHERE name = Thomas Müller^in /srv/pc8/home/h1354320/SR/www/premove.php on line 13 Delete failed.

申し訳ありませんが、フォーマットが正しくありません。私はそれが読みやすいと思う。 ありがとうございます!クエリを閉じる必要があり

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

:これは意味をなさないよう

+1

クエリの名前を引用符で囲む必要があります。 –

+0

これを正しく行うにはどうすればよいですか?クエリで引用符を追加しようとするたびに、別のエラーメッセージが表示されます。 – hacker1337ninja

答えて

1

syntax error at or near "Müller" LINE 1: DELETE FROM pplayers WHERE name = Thomas Müller^in

あなたは、クエリ完全に混乱しているようです。部分or die...も間違っています。それは構文的に良くなるだろう:

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

しかし、あなたのtest_input()はかなりゴミです。クエリのために適切にエスケープされたデータを取得するための専用関数があります - >pg_escape_string()

+0

大きなありがとう!これはそれでした。 – hacker1337ninja

2

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

+0

質問に答えるときには、解決策そのものを提供するのではなく、なぜあなたのコードブロックが問題を解決するのかを説明することが役立ちます。質問者がロジックでどこが間違っているかを理解するのに役立ちます。 –

+0

次回 :) – Anonymous

関連する問題