2014-09-03 65 views
2

我不能爲我的生活找出爲什麼下面不會更新記錄。它給了我一個成功的消息,但並沒有實際更新記錄。我已經完成了大量的修訂,並嘗試了所有我能想到的。其他人能看到問題在哪裏嗎?記錄不會用PHP更新MySQL

<?php 
$id = $_POST['id']; 
     $username = $_POST['username']; 
     $fname = $_POST['fname']; 
     $lname = $_POST['lname']; 
     $email = $_POST['email']; 
     $company = $_POST['company']; 
     $rep1 = $_POST['rep1']; 
     $rep2 = $_POST['rep2']; 
     $rep3 = $_POST['rep3']; 
     $phone = $_POST['phone']; 
     $fax = $_POST['fax']; 
     $cell = $_POST['cell']; 
     $service = $_POST['service']; 
     $license = $_POST['license']; 
     $expdate = $_POST['expdate']; 
     $active = $_POST['active']; 
     $userlevel = $_POST['userlevel']; 

$host="XXXXXXX"; // Host name 
$username="XXXXXX"; // Mysql username 
$password="XXXXXXX"; // Mysql password 
$db_name="XXXXXXX"; // Database name 
$tbl_name="users"; // Table name 

// Connect to server and select database. 
$con = mysqli_connect("$host", "$username", "$password","$db_name")or die("cannot connect"); 


// update data in mysql database 
$sql="UPDATE $tbl_name SET id='".$id."', fname='".$fname."', lname='".$lname."', email='".$email."', company='".$company."', rep1='".$rep1."', rep2='".$rep2."', rep3='".$rep3."', phone='".$phone."', fax='".$fax."', cell='".$cell."', service='".$service."', license='".$license."', expdate='".$expdate."', active='".$active."', userlevel='".$userlevel."'". 
     "WHERE id = '".$id."'"; 
$result=mysqli_query($con,$sql); 

// if successfully updated. 
if($result){ 
    $emailID = "[email protected]"; 
     $subject = "Registration notification from. $fname . through website"; 
$body = <<<EOD 

     <table cellspacing="0" cellpadding="1" border="1"> 
      <tbody> 
       <tr> 
        <td style="padding: 5px 10px;" width="150">Name: </td> 
        <td style="padding: 5px 10px;">$fname $lname</td> 
       </tr> 
       <tr> 
        <td style="padding: 5px 10px;" width="150">Mobile: </td> 
        <td style="padding: 5px 10px;">$cell</td> 
       </tr> 
       <tr> 
        <td style="padding: 5px 10px;" width="150">Email: </td> 
        <td style="padding: 5px 10px;">$email</td> 
       </tr> 
       <tr> 
        <td style="padding: 5px 10px;" width="150">License Number: </td> 
        <td style="padding: 5px 10px;">$license</td> 
       </tr> 
      </tbody> 
     </table> 

EOD; 

     $headers = "From: [email protected]\r\n"; 
     $headers .= "MIME-Version: 1.0\r\n"; 
     $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
     $headers .= "X-Priority: 1\r\n"; 
     $headers .= "X-MSMail-Priority: High\n"; 
     $headers .= "X-Mailer: PHP". phpversion() ."\r\n"; 

     mail($emailID, $subject, $body, $headers); 
     echo "<h4>Thank you for updating your account info. We will authorize your account and notify you once we have verified your license number and expiration.</h4>"; 
} 
else { 
echo "ERROR"; 
} 

?> 
+1

爲什麼你會更新'id'?此外,您的代碼易受SQL注入攻擊。 – 2014-09-03 19:24:41

+1

當您可以獲知有關問題的實際情況時,從不輸出固定(和USELESS)錯誤消息,如「錯誤」。 'echo mysqli_error($ con)'會爲你節省很多時間。 – 2014-09-03 19:36:47

回答

4

您的上一個值後面沒有空格,因此where關鍵字「卡住」它。 的where之前只需添加一個空格,你應該確定:

$sql="UPDATE $tbl_name SET id='".$id."', fname='".$fname."', lname='".$lname."', email='".$email."', company='".$company."', rep1='".$rep1."', rep2='".$rep2."', rep3='".$rep3."', phone='".$phone."', fax='".$fax."', cell='".$cell."', service='".$service."', license='".$license."', expdate='".$expdate."', active='".$active."', userlevel='".$userlevel."'". 
    " WHERE id = '".$id."'"; // Note the additional space here 
3

你的問題是一般:時間和額外的引號的混亂意味着你不能看到像你需要查詢的空間痘痘的東西。你也沒有在查詢失敗時產生的mysql錯誤,這會有所幫助。

其他問題:您輸入的內容太多。爲什麼只要構建查詢時爲每個帖子值使用與鍵名相同的變量?你也需要逃避你的價值。

這是我的看法:

$con = mysqli_connect("$host", "$username", "$password","$db_name")or die("cannot connect"); 

$id=mysql_real_escape_string($id); 
foreach($_POST as $k=>$v){ 
//exclude id 
if($k!='id'){ 
//escape values 
$escaped_value= mysql_real_escape_string($v); 
//set up array for update query 
$query_parts[]="$k='$escaped_value'"; 
//create variables with the same name as the key 
${$k}=$v; 
} 
} 

$sql="UPDATE $tbl_name SET ".implode(",",$query_parts)." $WHERE id = '$id' "; 
$result=mysqli_query($con,$sql) or die(mysql_error());