-1

削除リンクをクリックしながら、データベースから行を削除しようとしています。しかし、以下のエラーメッセージを受け取りました:

SQL構文にエラーがあります。1行目の''の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

以下はコードです:

remove_db.php

<html>
<body>

<?php
//session_start();
$myusername = $_SESSION['uname'];


$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="vacation_tool"; // Database name
$tbl_name="login"; // Table name

// Connect to server and select databse.
$con = mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$query="select EmployeeID,FirstName,LastName,ManagerName from users";

$result=mysql_query($query);

$num=mysql_numrows($result) or die ("error in function_name: <br>Sql: " . $sql . "<br>" . mysql_error());

//mysql_close();
?>
<div id="bv_Text2" style="position:absolute;left:480px;top:250px;width:550px;height:16px;z-index:5;" align="left">
<table border="1" cellspacing="2" cellpadding="2">
<tr width = "100%">
<td width = "15%" align = "center"><font style="font-size:13px" color="#000000" face="Arial"><b>Employee ID</b></font></td>
<td width = "20%" align = "center"><font style="font-size:13px" color="#000000" face="Arial"><b>First Name</b></font></td>
<td width = "20%" align = "center"><font style="font-size:13px" color="#000000" face="Arial"><b>Last Name</b></font></td>
<td width = "20%" align = "center"><font style="font-size:13px" color="#000000" face="Arial"><b>Manager Name</b></font></td>

</tr>
</div>


<?php
$i=0;
while ($i < $num) {

$f1=mysql_result($result,$i,"EmployeeID");
$f2=mysql_result($result,$i,"FirstName");
$f3=mysql_result($result,$i,"LastName");
$f4=mysql_result($result,$i,"ManagerName");

?>
<div id="bv_Text2" style="position:absolute;left:480px;top:260px;width:144px;height:16px;z-index:6;" align="left">
<tr>
<td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo $f1; ?></font></td>
<td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo $f2; ?></font></td>
<td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo $f3; ?></font></td>
<td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo $f4; ?></font></td>
<td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo '<td><a href="remove.php?EmployeeID=' . $num['EmployeeID'] . '">Remove</a></td>'; ?></font></td>
</tr>
</div>
<?php
$i++;
}
?>
</body>
</html>

およびremove.php:

<?php

session_start();
$myusername = $_SESSION['uname'];

$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="vacation_tool"; // Database name
$tbl_name="login"; // Table name

// Connect to server and select databse.
$con = mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form

if (isset($_GET['EmployeeID']))
 {
 // get id value
 $EmployeeID = $_GET['EmployeeID'];

 // delete the entry

 $query = "DELETE FROM users WHERE EmployeeID = $EmployeeID";

 $result = mysql_query($query) or die(mysql_error());

 // redirect back to the view page
 header("Location: remove_user.php");
 }
 else
 // if id isn't set, or isn't valid, redirect back to view page
 {
 echo "Error";
 }

 ?>

私を助けてください。

4

3 に答える 3

2

交換

$query = "DELETE FROM users WHERE EmployeeID = $EmployeeID";

$query = sprintf("DELETE FROM users WHERE EmployeeID ='%s'",
mysql_real_escape_string($EmployeeID));
于 2012-10-28T20:37:38.990 に答える
0

あなたのコードの状態

<a href="remove.php?EmployeeID=' . $num['EmployeeID'] . '">Remove</a></td>'; ?></font>

しかし、EmployeeID$f1ではなく にあり$numます。$num配列でさえありません。

したがって、上記のエラー ( を使用する必要がありました$f1) に加えて、他のいくつかのことをうまく行っていません。

  • 発生する可能性のあるすべての警告、エラーなどを通知するように PHP を構成していません。
  • 外部から値を受け入れてクエリで使用しているため、SQL インジェクション攻撃にさらされています (EmployeeID = (int)$_GET['EmployeeID']少なくとも使用してください)。
  • 関数を使用していますがmysql_*、その使用はお勧めできません。代わりに PDO または mysqli を使用してください。
  • PHP コードを HTML プレゼンテーションから分離していません。

上記のヒントを気にせずにプログラミングすることは完全に可能ですが、それらに従う方がはるかに簡単で、生産的で、単純に楽しいことがわかります。ひいきの口調で申し訳ありませんが、これは難しい方法でわかりました。

于 2012-10-28T20:38:41.253 に答える
0

間違った従業員 ID を渡しているようです。従業員 ID は $f1 に割り当てられ、URL で $num['employeeID'] を使用していますが、これは空である必要があります。

削除リンクは次のようにする必要があります:

  <td align = "center"><font style="font-size:13px" color="#000000" face="Arial"><?php echo '<td><a href="remove.php?EmployeeID=' . $f1 . '">Remove</a></td>'; ?></font></td>

自分で解決できるように、段階的なデバッグを行うことは常に役に立ちます。この場合 :

  1. HTMLソースを表示し、URLを見てください
  2. print $_GET['employeeID']
  3. 削除SQLを出力します

注: mysql_query 関数は非推奨です。PDO または mysqli 関数を使用します。また、$_GET は、DML ステートメントで直接使用する前にサニタイズする必要があります。完全に脆弱です。

于 2012-10-28T20:39:33.373 に答える