【问题标题】:PHP validation checkPHP 验证检查
【发布时间】: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_PDO API 中使用prepared parameterized statements
  • 这有点解释了插入StudentID, ,[Location],的新错误,你有2个逗号一个接一个
  • 它的 mssql 很抱歉应该指定,虽然这是我的目标,但我目前没有时间实施更改

标签: php forms validation


【解决方案1】:

您是否尝试将函数定义更改为:

function test_input($data,$ErrorCount) { /*code....*/ }

function test_input2($data,$ErrorCount) { /*code....*/ }

【讨论】:

  • 将其更改为实际返回结果,这是问题的一部分,但它遇到了另一个问题,我不知道它来自哪里,在线检查员说它是 $updateQuery = "INSERT INTO Locations (StudentID, ,[Location], [DateTime]) VALUES (?, ?, GETDATE());";但之前都很好
  • Sam,您没有向我们展示任何包含 INSERT 查询的代码!?!?!?!
猜你喜欢
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2013-02-21
  • 2012-02-25
  • 1970-01-01
  • 2014-03-22
相关资源
最近更新 更多