$sql = "INSERT INTO golf (datum, odkud, odjezd ) VALUES ('$datum', '$odkud', '$odjezd')";
if(!mysqli_query($connection,$sql)) {
echo '<p class="error">Záznam nebyl vložen</p>';
} else {
header ("location :/golf");
}
你好,我正在研究我的论文到学校。我有这个代码,我的主管一直告诉我“对待特殊字符”。我怎么做?他只看到我给你看的代码。
答案 0 :(得分:1)
用户输入必须在插入之前为sanitized,否则您将打开通往服务器的门。
您还需要validate输入。我通常做的是创建一系列正则表达式来单独验证每个字段,或使用其中一个可用的php validate filters。
请记住,您可以 - 并且应该 - 执行client side validation,这对减少服务器负载很有帮助,但是作为安全措施有0值,因为它很容易伪造。
server side validation是最重要的,因为它是最后一道防线。
不要轻易接受用户输入,大量服务器因用户输入消毒不良或不存在而被黑客入侵。
要直接回答您的问题,mysqli_real_escape_string()是转义特殊字符的朋友,即:
$odjezd = mysqli_real_escape_string($connection, $odjezd)
编码的字符是NUL(ASCII 0),\ n,\ r,\,&#39;,&#34;和Control-Z。
更新:
我使用了mysqli_real_escape_string,我仍然可以提交 &#34; {B}℃&#39; =%&#34;我希望它删除spec.characters和只是输入 ABC ......怎么样?的
我们假设$odkud
只能包含字母或数字,只有5个字符只能验证,我们可以使用preg_match()作为验证器,即:
$id = $_REQUEST['id'];
if (preg_match('/^[a-z\d]{5}$/i', $odkud)) {
# Successful match
} else {
# Match attempt failed
}
Live Regex Example & Explanation
如果你只需要删除特殊字符,请使用上面提到的一个php过滤器或preg_replace,即:
$odkud_filtered = preg_replace('/[^a-z\d]/i', '', $odkud);
# abc
答案 1 :(得分:1)
你的主管只是要求你对待特殊字符。为此,@ Pedro的答案就足够了。
$odjezd = mysqli_real_escape_string($connection, $odjezd) // copied from @Pedro’s answer
但如果您需要更多验证, 你可以查看日期的格式是否正确?
$test_arr = explode('/', $POST[‘date’]);
if (count($test_arr) == 3) {
if (checkdate($test_arr[0], $test_arr[1], $test_arr[2])) {
// valid date ...
} else {
// problem with dates ...
}
} else {
// problem with input ...
}
同样,您可以根据所需方式验证数据。
this可能会有所帮助。