如何通过PHP将数据发布到表单中进行查询,而不使用任何隐藏字段?

如何通过PHP将数据发布到表单中进行查询,而不使用任何隐藏字段?,php,html,mysql,hidden-field,Php,Html,Mysql,Hidden Field,我的php查询代码 <?php if (isset($_POST['btn_add'])) { $query_insert = "INSERT INTO Calc_Tbl(id_Customer,Flname_Customer, ) VALUES (N'$_POST[id_Hidden]', N'$_POST[flname_Hidden]' )"; mysqli_query($db, $query_insert

我的php查询代码

<?php 
  if (isset($_POST['btn_add'])) 
      {
          $query_insert = "INSERT INTO Calc_Tbl(id_Customer,Flname_Customer, )
          VALUES (N'$_POST[id_Hidden]', N'$_POST[flname_Hidden]' )";
          mysqli_query($db, $query_insert);
      }
?>

您可以对这些字段使用会话

不需要获取隐藏字段

您可以直接使用会话变量

<?php 
          if (isset($_POST['btn_add'])) 
          {
              $query_insert = "INSERT INTO Calc_Tbl(id_Customer,Flname_Customer)
              VALUES ('".$_SESSION["id"]."','".$_SESSION["flname"]."')";
              mysqli_query($db, $query_insert);
          }
?>

您可以加密这些数据,并在服务器端验证它,正如该问题的一个答案中所说的那样


正如一些答案中在该链接中所述,您可以以某种方式加密隐藏字段。

将变量数据放入$\u会话全局变量。
首先要做的就是像这样开始你的课程

<?php
session_start();
//now you have created $id and $flname somewhere in your code
//which you want to submit
$_SESSION['id']=$id;
$_SESSION['flname']=$flname;
?>
如果提交了任何其他字段,它们将位于$\u POST内,当然
直到使用会话\u destroy;销毁$\u会话;,您的变量将在随后使用的任何其他程序中找到

使用Ajax,您可以这样做:
        With Ajax you can do like this :
var first = 'data1';
var second = 'data2';
    $("body").off("submit","#assignedUserForm").on("submit","#assignedUserForm",function(){
            $("#assignedUserForm [type='submit']").text('Loading...').prop('disabled', true);
            $('<input>').attr({
                type: 'hidden',
                name: 'id_Hidden',
                value: first 
            }).appendTo('#assignedUserForm');
            $('<input>').attr({
                type: 'hidden',
                name: 'flname_Hidden',
                value: second 
            }).appendTo('#assignedUserForm');
            var formData = new FormData(this);  
            $.ajax({
                url: 'url.php',
                type: 'POST',
                data: formData,
                contentType: false,
                cache: false,
                processData: false,
                success: function (response) {
                    $("#assignedUserForm [type='submit']").text('Submit').prop('disabled', false);

               }
            });
            return false;
        });
var first='data1'; var second='data2'; $(“body”).off(“submit”,“assignedUserForm”).on(“submit”,“assignedUserForm”,function()){ $(“#assignedUserForm[type='submit']”).text('Loading…').prop('disabled',true); $('').attr({ 键入:“隐藏”, 名称:'id_Hidden', 价值:第一 }).appendTo(“#assignedUserForm”); $('').attr({ 键入:“隐藏”, 名称:“flname_Hidden”, 价值:第二 }).appendTo(“#assignedUserForm”); var formData=新formData(本); $.ajax({ url:'url.php', 键入:“POST”, 数据:formData, contentType:false, cache:false, processData:false, 成功:功能(响应){ $(“#assignedUserForm[type='submit']”).text('submit').prop('disabled',false); } }); 返回false; });
您从错误的角度看待问题问题不在于用户可以提交不正确的值。问题在于服务器端代码假定值是正确的

每个人都可以在Web浏览器的源代码中编辑隐藏字段

是的,这是真的。用户还可以完全在web浏览器之外编写任何他们想要发送到服务器的请求。从根本上说,任何客户端都可以随时向服务器发送任何请求

与其试图与之抗争,不如简单地说明原因。问问你自己

为什么不允许用户X在此字段中提交值Y

例如,该值/记录可能属于其他用户,并且该用户不应该能够编辑其他用户的记录。那么这正是您应该验证服务器端的内容

表示为伪代码:

if (!CurrentUser->canEdit($_POST[id_Hidden])) {
    die "You are not allowed to edit this record.";
}
// continue editing the record here
那么什么是当前用户?这取决于您如何跟踪当前用户。(未包含在问题中。)无论您如何跟踪您的登录用户,请参考该信息。什么是
canEdit()
?这取决于您如何确定是否允许任何给定用户编辑任何给定记录。你得把逻辑写下来

请注意,上面的代码是伪代码,您不能按原样复制/粘贴它并期望它工作。但希望它能说明整个问题。简言之:

当用户尝试执行某个操作时,首先确定是否允许该用户执行该操作。如果不是,则返回一个错误。如果是,请执行该操作

这就是一切。永远不要隐式信任来自客户端的信息。始终验证用户是否有权执行其尝试执行的操作


旁注,根据本问题/答案中发布的所有其他建议

此操作不需要会话。随着应用程序需求的增长和应用程序复杂性的增加,依赖它们将是极其有限和过于复杂的


客户端提供服务器使用的“隐藏”值绝对没有问题。事实上,这使得您的服务更加RESTful,使用和维护也更加简单。您需要做的只是在使用这些值之前在服务器端验证它们。

检查源代码并不是操作数据的唯一方法。也可以使用
curl
。SQL是开放的注入。参数化。我也不确定领先的
N
s是什么。您的代码对SQL注入非常开放。你应该开始阅读这里:和这里:对于被问到的问题,如果你想删除
字段,那么就直接删除它们。但您要么不需要在SQL代码中依赖它们,要么从其他地方获取这些值。您还希望在哪里跟踪这些值?为什么用户不能首先插入不同的值?如果不允许用户执行某个操作,请在服务器端代码中签入该权限,不要执行该操作。在user3783243和@David/,我完全不明白你的意思是什么?为什么我的代码对SQL注入开放??请给我更多的信息。你是什么意思?爱you@AriaShir:SQL注入与用户能够看到您的PHP代码无关。SQL注入之所以发生,是因为您正在执行用户输入,就像它是代码一样,并且只相信输入可能是有效值。它可能不是值,可能是SQL代码。我们再次鼓励您关注已提供给您的链接,并阅读有关该主题的内容。它们包含了什么是SQL注入以及如何防止SQL注入的示例。请给我一个例子,在同一页的会话。非常感谢。表格应该是这样:?或我混淆了要发送的表单文件。@AriaShir:Session值与HTML表单无关。如果你想使用Se
        With Ajax you can do like this :
var first = 'data1';
var second = 'data2';
    $("body").off("submit","#assignedUserForm").on("submit","#assignedUserForm",function(){
            $("#assignedUserForm [type='submit']").text('Loading...').prop('disabled', true);
            $('<input>').attr({
                type: 'hidden',
                name: 'id_Hidden',
                value: first 
            }).appendTo('#assignedUserForm');
            $('<input>').attr({
                type: 'hidden',
                name: 'flname_Hidden',
                value: second 
            }).appendTo('#assignedUserForm');
            var formData = new FormData(this);  
            $.ajax({
                url: 'url.php',
                type: 'POST',
                data: formData,
                contentType: false,
                cache: false,
                processData: false,
                success: function (response) {
                    $("#assignedUserForm [type='submit']").text('Submit').prop('disabled', false);

               }
            });
            return false;
        });
if (!CurrentUser->canEdit($_POST[id_Hidden])) {
    die "You are not allowed to edit this record.";
}
// continue editing the record here