$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");
}你好,我正在写我的论文去学校。我有这个代码,我的主管一直告诉我要“对待特殊字符”。我该怎么做?他只看到了我给你看的代码。
发布于 2018-04-14 20:20:31
User input 在插入前必须为 sanitized,否则您将打开一扇进入服务器的门。
您还需要对输入进行validate。我通常做的是创建一系列正则表达式来单独验证每个字段,或者使用一个可用的php validate filters。
请记住,您可以-也应该-执行client side validation,这对于减少服务器负载非常有用,但作为安全措施,它的值为0,因为它很容易被伪造。server side validation是最重要的,因为它是你的最后一道防线。
不要对用户输入掉以轻心,大量的服务器会因为糟糕的或根本不存在的用户输入清理而遭到黑客攻击。
为了直接回答你的问题,mysqli_real_escape_string()是转义特殊字符的朋友,即:
$odjezd = mysqli_real_escape_string($connection, $odjezd)编码的
字符为NUL (ASCII0)、\n、\r、\、‘、“和Control Z。
更新:
我已经使用了mysqli_real_escape_string,但我仍然可以提交"a{b}c'=%“我希望它删除spec.characters并只输入abc...how?
假设$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发布于 2018-04-14 20:45:26
你的主管刚刚让你处理特殊字符。因此,@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可能会有所帮助。
https://stackoverflow.com/questions/49831326
复制相似问题