2011-06-01 48 views
0
<form action="editauthor.php" method="post"> 
    <label>Author Name:</label> 
    <input type="text" name="txtUser" value="<?=$name;?>" /><br /><br /> 
    <label>Email:</label> 
    <input type="text" name="txtEmail" value="<?=$email;?>" /><br /><br /> 
    <input type="hidden" name="id" value="<?=$id?>" /> <!-- use hidden to hide id for using, but not display, here id is not important --> 
    <input type="submit" value="Edit" name="submit" /> 
</form> 
<?php 
    if(isset($_POST['submit'])) { 
    $con = @mysql_connect("localhost","root",""); 
    mysql_select_db("jokes",$con); 

    $name = $_POST['txtUser']; 
    $email = $_POST['txtEmail']; 

    $sql = "UPDATE authors 
       SET name = '".$_POST['txtUser']."', 
        email = '".$_POST['txtEmail']."' 
      WHERE id = ".$_GET['id']""; 

    $result = @mysql_query($sql, $con) or die(mysql_error()); 
    if($result) { 
     echo "New Author has been edited successfully!"; 
    } else { 
     echo "Cannot update this kind of author into the database. ".mysql_error(); 
    } 
    } ?> 

...它產生以下錯誤:MySQL的語法錯誤

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

+0

這個問題不在php代碼中,而是在sql代碼中。顯示'$ sql'的轉儲,因爲沒有人知道你的變量的內容。 – KingCrunch 2011-06-01 14:35:58

+5

你聽說過SQL注入嗎? – 2011-06-01 14:36:11

回答

1

你缺少點這裏WHERE id = ".$_GET['id']"";

+1

是的,但在這裏輸入代碼示例時可能只是一個錯字。錯誤消息顯然是一個SQL語法錯誤,而缺少的。是一個PHP錯誤。 – 2011-06-01 14:41:19

1

在SQL語句結尾擺脫兩個引號

$sql = "UPDATE authors SET name = '".$_POST['txtUser']."', email = '".$_POST['txtEmail']."' WHERE id = ".$_GET['id']; 
+0

這樣的SQL語句末尾不需要空引號。除非您有單引號填寫或另一個非空白值,否則可以省略。 – 2011-06-01 14:39:51

+0

它仍然不起作用 – 2011-06-01 18:01:07

1

正確的答案已經發布,但讓我給你一些建議。

在未來,嘗試這樣做:

$result = @mysql_query($sql, $con) or die($sql.'<hr>'.mysql_error()); 

那麼你可以隨時看到mysql的一句話給你的問題。如果你不知道爲什麼它會打擾你,請複製粘貼它,然後在你的phpMyAdmin中試用它。

祝您好運與您的項目:]

3

問題是,你正在使用$ _GET [「身份證」],你的ID不是_GET方法及其在$ _ POST,所以您的查詢就會有這樣的事情

其中id = 後「=」因爲沒有價值$ _GET [「身份證」] 只是將其更改爲$ _ POST

+0

+1:這是錯誤原因 – 2011-06-01 14:46:53

+0

接受答案然後:) – 2011-06-01 15:32:58

+0

在另一個PHP文件中,我已經使用了action =「editauthor.php?id = $ id&name = $ name&email = $ email「...但是sql結果顯示id =什麼都沒有,並且仍然發生同樣的錯誤。 – 2011-06-01 17:59:57

0
<?php 
    if(!empty($_POST)) 
    { 
     $con = @mysql_connect("localhost","root",""); 
     mysql_select_db("jokes",$con); 

     $name = $_POST['txtUser']; 
     $email = $_POST['txtEmail']; 
     $sql = "UPDATE authors SET name = '" . $_POST['txtUser'] . "', email = '" . $_POST['txtEmail'] . "' WHERE id = '" . $_GET['id'] ."'"; 

     $result = @mysql_query($sql, $con) or die(mysql_error()); 

     if($result) 
     { 
      echo "New Author has been edited successfully!"; 
     } 
     else 
     { 
      echo "Cannot update this kind of author into the database. " . mysql_error(); 
     } 

    } 
    else 
    { 
     $name = ''; 
     $email = ''; 
     $id = ''; 
    } 
?> 

<form action="./editauthor.php" method="post"> 
    <label>Author Name:</label> 
    <input type="text" name="txtUser" value="<?= $name ?>" /><br /><br /> 
    <label>Email:</label> 
    <input type="text" name="txtEmail" value="<?= $email ?>" /><br /><br /> 
    <input type="hidden" name="id" value="<?= $id ?>" /> <!-- use hidden to hide id for using, but not display, here id is not important --> 
    <input type="submit" value="Edit" name="submit" /> 
</form> 
+0

漂亮的代碼,$ id的值在$ _POST中。它有什麼作用? – 2011-06-02 03:40:52

0

最有可能的是造成了'一個語法錯誤,沒有價值在txtUsertxtEmail字段。你的代碼容易受到SQL注入攻擊,現在注入「攻擊」只是導致語法錯誤。

例如Miles O'Brien填寫表單,讓您的查詢就會變成:

UPDATE authors 
... 
WHERE name='Miles O'Brien' 
        ^---syntax error here 

真的需要去拜訪http://www.bobby-tables.com,然後rejigger你的代碼看起來像這樣:

  SET name = '" . mysql_real_escape_string($_POST['txtUser']) . "', 
       email = '" . mysql_real_escape_string($_POST['txtEmail']) . "' 
0

用途:

$sql = sprintf("UPDATE AUTHORS 
        SET name = '%s', 
         email = '%s' 
       WHERE id = %d ", 
       mysql_real_escape_string($_POST['txtUser']), 
       mysql_real_escape_string($_POST['txtEmail']), 
       mysql_real_escape_string($_POST['id'])); 

它會保護你免受SQL injection attacks,並糾正你用來獲得身份證的方法 - 表格是pos噸,只有一個請求將被提出。