【发布时间】:2018-12-05 22:50:12
【问题描述】:
我正在尝试为我正在处理的网站创建一个验证表单,如果发布请求在没有验证的情况下工作,一旦我开始引入一个简单的计数来防止发送查询,它就会停止工作
<?php
$ErrorCount = 0;
$StudentNO = $_POST['updateid'];
$editfirst = $_POST['updatefirst'];
$editSurname = $_POST['updatesurn'];
$editfirst = test_input($editfirst);
$editSurname = test_input($editSurname);
$StudentNO = test_input2($StudentNO);
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
$data = preg_replace("/[^a-zA-Z]/", "", $data);
if(preg_match('/drop table/i', $data)) {
$data == null;
}
if($data == null) {
$ErrorCount++;
}
}
function test_input2($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
$data = preg_replace("/[^a-zA-Z]/", "", $data);
if(preg_match('/drop table/i', $data)) {
$data == null;
}
if(strlen($StudentNO) != 6) {
$ErrorCount++;
}
if($data == null) {
$ErrorCount++;
}
}
if($ErrorCount == 0) {
$server = 'sql.rde.hull.ac.uk';
$connectionInfo = array("Database"=>"rde_556278");
$conn = sqlsrv_connect($server, $connectionInfo);
$updateQuery = "UPDATE Users SET Firstname = '$editfirst', Surname = '$editSurname' WHERE StudentID = '$StudentNO';";
$result = sqlsrv_query($conn, $updateQuery);
sqlsrv_free_stmt( $updateQuery);
sqlsrv_close($conn);
}
?>
问题是错误计数没有增加或传递给任何东西,任何帮助,因为我看不到我的错误。我对php很陌生
<?php
updateQuery = "INSERT INTO Locations (StudentID, ,[Location], [DateTime]) VALUES (?, ?, GETDATE());";
$params = array($UpdateStudent, $UpdateLocation);
$result = sqlsrv_query($conn, $updateQuery, $params);
?>
【问题讨论】:
-
可变范围! Check it out 您正在设置在函数内部创建的新
$ErrorCount。这与主要范围内的$ErrorCount不同 -
啊,那么我该如何增加计数器呢?除了单独页面上的变量名之外,它的工作原理是什么?
-
这段代码的整个前提是基于糟糕的研究。如果您想避免 SQL 注入,请使用参数化和绑定查询。即使if you are escaping inputs, its not safe! 在
MYSQLI_或PDOAPI 中使用prepared parameterized statements -
这有点解释了插入
StudentID, ,[Location],的新错误,你有2个逗号一个接一个 -
它的 mssql 很抱歉应该指定,虽然这是我的目标,但我目前没有时间实施更改
标签: php forms validation