大家好,我需要你的帮助这个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
答案 0 :(得分:9)
尽管我讨厌这个答案,但我仍然会告诉你,你需要逃避你的问题:
$survey_name = mysql_real_escape_string($_POST['txtSurveyName']);
但我建议使用 PDO 或 MySQLi 预备语句。更好的安全性。
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
}
通过这种方式,您的代码更安全,我感觉更好,因为我没有提出可怕的建议。
答案 1 :(得分: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);
答案 2 :(得分: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)."')";