2014-05-21 31 views
-3

你好傢伙我需要你的幫助這個php代碼, ,並試圖創建使用文本框的調查名稱..但會發生什麼是$survey_name = $_POST['txtSurveyName'];不保存任何輸入與例如。 Department's但它節省了Departments當數據包含單引號時查詢中斷

我注意到問題在於單引號,怎麼能寫這段代碼來接受單引號呢?

這裏是全碼:

**$survey_name = $_POST['txtSurveyName'];** 
    $survey_status = $_POST['status']; 

    // Save question 
    $sql = "INSERT INTO survey(survey_name, status) VALUES('{$survey_name}','{$survey_status}')"; 
    $result = mysql_query($sql); 

    // Redirect to landing page 
+2

這應該是http://codereview.stackexchange.com/ – nietonfir

+0

@nietonfir這是一個相當簡短的問題,如果你懶得讀它,你會發現它不是一個代碼r eview問題。 – Sammitch

+0

@Sammitch同意。它應該被標記爲脫離主題。 ;-) – nietonfir

回答

9

雖然我很討厭這個答案,我還是會告訴你,你需要逃避你的字符串:

$survey_name = mysql_real_escape_string($_POST['txtSurveyName']); 

但我會建議使用PDOMySQLi準備好的語句。更好的安全性。

那麼容易PDO:

//prepare query 
$stmt = $pdoInstance->prepare('INSERT INTO survey(survey_name, status) VALUES(:name, :status)'); 

//bind params 
$stmt->bindParam(':name', $name, PDO::PARAM_STR); 
$stmt->bindParam(':status', $status, PDO::PARAM_STR); 

if ($stmt->execute()) { 
    //success 
} 

這樣,你的代碼更安全,我感覺好多了,我不建議一些可怕的事情。

+2

+1用於暗示** PDO **和** MySQLi ** !! – nietonfir

+2

'$ survey_name =「Bobby'; DROP TABLE users; - 」;' – Sammitch

+0

+1表示PDO示例。 –

1

來源:http://us2.php.net/mysql_real_escape_string

$survey_name = $_POST['txtSurveyName']; 
$survey_status = $_POST['status']; 

$sql = sprintf("INSERT INTO survey(survey_name, status) VALUES('%s','%s')'", 
    mysql_real_escape_string($survey_name), 
    mysql_real_escape_string($survey_status)); 

$result = mysql_query($sql); 
0

更改您的查詢,以逃避特價字符:

$sql = "INSERT INTO survey(survey_name, status) VALUES(\"{$survey_name}\",\"{$survey_status}\")"; 

$sql = "INSERT INTO survey(survey_name, status) VALUES('".addslashes($survey_name)."','".addslashes($survey_status)."')"; 
相關問題