2014-03-26 98 views
0

我想做一個簡單的表單,根據正確的電子郵件進行檢查。如果電子郵件正確,則會使用新時間更新數據庫。當我運行它,我得到一個格式錯誤..我不是用PHP的專家,所以我會在這裏錯過了一些東西......PHP窗體SQL格式錯誤

<?php 
if(isset($_POST['update'])) 
{ 
$dbhost = 'localhost'; 
$dbuser = 'user1'; 
$dbpass = 'password'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

$email= $_POST['email']; 
$time= $_POST['time']; 

$sql = "UPDATE users". 
     "SET time= $time". 
     "WHERE email = $email" ; 

mysql_select_db('dbname'); 
$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysql_error()); 
} 
echo "Updated data successfully\n"; 
mysql_close($conn); 
} 
else 
{ 
?> 
<form method="post" action="<?php $_PHP_SELF ?>"> 
<table width="400" border="0" cellspacing="1" cellpadding="2"> 
<tr> 
<td width="100">Email:</td> 
<td><input name="email" type="text" id="email"></td> 
</tr> 
<tr> 
<td width="100">Time:</td> 
<td><input name="time" type="text" id="time"></td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> </td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> 
<input name="update" type="submit" id="update" value="Update"> 
</td> 
</tr> 
</table> 
</form> 
<?php 
} 
?> 
</body> 
</html> 
+0

你正在得到什麼錯誤? – Jenz

+0

無法更新數據:您的SQL語法有錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在第1行使用'= 12WHERE email = [email protected]'附近的正確語法 –

+0

使用'$ sql ='更新用戶SET time ='$ time'WHERE email = '$ email'「;' –

回答

3

您所查詢的有錯誤的報價。

<?php 
if(isset($_POST['update'])) 
{ 
$dbhost = 'localhost'; 
$dbuser = 'user1'; 
$dbpass = 'password'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db('dbname'); 

$email= $_POST['email']; 
$time= $_POST['time']; 

$sql = "UPDATE users SET time= '$time' WHERE email = '$email'"; 

$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysql_error()); 
} 
echo "Updated data successfully\n"; 
mysql_close($conn); 
} 
else 
{ 
?> 
<form method="post" action="<?php $_PHP_SELF ?>"> 
<table width="400" border="0" cellspacing="1" cellpadding="2"> 
<tr> 
<td width="100">Email:</td> 
<td><input name="email" type="text" id="email"></td> 
</tr> 
<tr> 
<td width="100">Time:</td> 
<td><input name="time" type="text" id="time"></td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> </td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> 
<input name="update" type="submit" id="update" value="Update"> 
</td> 
</tr> 
</table> 
</form> 
<?php 
} 
?> 
</body> 
</html> 

旁註:你現在的代碼是開放的SQL injection。使用mysqli_*函數。 (我建議你使用和prepared statements,或者PDO


腳註:

mysql_*功能已取消通知:

http://www.php.net/manual/en/intro.mysql.php

這個擴展不贊成PHP 5.5的.0,並且不推薦用於編寫新代碼,因爲它將在未來被刪除。應該使用mysqliPDO_MySQL擴展名。請參閱MySQL API Overview以獲取進一步幫助,同時選擇MySQL API。

這些函數允許您訪問MySQL數據庫服務器。有關MySQL的更多信息,請參閱»http://www.mysql.com/

MySQL的文檔可在»http://dev.mysql.com/doc/找到。


快速音符

你可以這樣做縮短你的代碼下面所有一氣呵成:

$dbhost = 'localhost'; 
$dbuser = 'user1'; 
$dbpass = 'password'; 
$db = 'dbname'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass, $db); 

這樣你就不必使用mysql_select_db('dbname');但這是純粹的意見基於/首選項,並會同時爲您節省幾個按鍵。


更改:

$email= $_POST['email']; 
$time= $_POST['time']; 

到:

$email= mysql_real_escape_string($_POST['email']); 
$time= mysql_real_escape_string($_POST['time']); 

將有助於增添幾分安全的,直到你進入準備好的語句或PDO。

+0

儘管形式不好,但爲什麼順序很重要,如果他只是在選擇數據庫之前定義$ sql。他不會運行查詢,直到他選擇db –

+0

它現在可以工作..非常感謝!我將在稍後處理安全問題,首先讓它正常運行。 –

+0

我一直認爲DB選擇有所作爲。 @CameronAziz我修改了我的答案。 –

1

你的sql腳本中沒有空格。

變化$sql到:

$sql = "UPDATE users ". 
    "SET time= '$time' ". 
    "WHERE email = '$email'" ; 

雖然這會工作得很好:

$sql = "UPDATE users SET time= '$time' WHERE email = '$email'" ; 

記住,你的網頁是容易受到SQL注入,因爲你也沒能逃脫時間和電子郵件。

+2

那麼用引號括起字符串值呢? –

+0

啊。是。編輯。謝謝。 –