在服务器上设置HTML输入无效



我使用HTML5表单验证来验证我的表单。因此,如果我使用Javascript验证它,我可以做这样的事情:

if (isInvalid())
{
myControl.setCustomValidity("my error message");
}

而且运行良好。我对服务器端验证持怀疑态度。表单被张贴回同一页面,如果检测到错误,输入控件从一开始就应该被视为无效,类似于

<input type="text" name="id" invalid error-message="This id is already used" />

我不想使用AJAX来进行验证,因为我必须"劫持"并取消表单提交,使用AJAX进行验证,然后用javascript提交表单。

迭代上下文总是更好的

  1. 您没有使用AJAX,而是通过http页面加载发送表单
  2. 需要记住的一件事是,AJAX或其他形式的表单只会在点击提交按钮后遵循课程。因此提交了姓名表格
  3. 在表单中,我们有一个字段,该字段可能有效也可能无效
  4. 如果该字段无效,则运行似乎有效的错误,或者如果该字段有效,则简单地滑动到表单提交的下一步
  5. 在服务器端检测字段是否无效。。。。并根据上下文做任何事情

服务器端的问题是它没有任何事情可做,也没有控制,也不想控制浏览器中的UI、html显示。它所处理的只是请求,即GET、POST、PUT、HEAD等,并相应地进行响应。

  1. 浏览器向web服务器发送页面请求-它可以根据上下文打包表单数据,也可以不打包表单数据
  2. Web服务器获取页面,并将请求中的任何打包表单数据转发到页面,并且总是有更多的数据传递给其他表单,例如Cookie、用户代理、IP等
  3. 一旦页面被加载到流程流中,您的一点点编程告诉它找到表单数据(如果有),并处理这些数据以做出响应

因此,第4点和第5点之间存在利益冲突。

  • 问题是,您的表单最终只是HTTP的有效负载(它只是tcp的有效负载,依此类推)
  • HTTP本质上不应该也不应该识别有效负载中的数据类型,它只是HTTP的一个数组。KEYWORD FOCUS数组
  • 您可以选择如何表示阵列中的数据

它可能看起来像这样得到/?say=Hi&to=Mom HTTP/2.0主持人:foo.com

在这里阅读更多表格如何发送到网络服务器

所以底线形式只采用某种形式的数组格式,我们知道数组总是有键值对,例如['sy'=>'hi']有键也有值。

通常,java脚本不会为具有值的数组提供开箱即用的键值配对,而是使用它们的索引作为键。例如,场景背后的['hi','there']相当于在某些黑客行为中使用[0=>'hi'、1=>'there']。请记住,java脚本不开箱即用地提供多维数组。那么java脚本是如何处理数组的,或者我们是如何定义它的,它是这样的var say=['hi'];

现在你可以在表单数据中看到say=Hi周围发生了什么。Get有一个庞大的数组,其中有用&为了php,它看起来像这个

$_GET = [
'say' => 'hi',
'to' => 'mom']

我们通过$_GET[‘say’]在页面中检测,它返回针对它的值。这是普遍的,并将在未来很长一段时间内保持这种状态。

您试图在服务器上从表单数据中检测到的任何键值对是否具有有效值。

为什么url发送如此之快,从地球的一个地方到另一个地方只需不到2秒。虽然下载网页时的响应非常慢,因为本质上不会像上面的例子所示那样通过url请求发送html代码。他们发送的军国主义信息被普遍理解。

这反过来意味着,由于有html进入服务器,服务器无法检测到任何属性——它们只有键值对。因此,属性外检测是不可能的。通过错误和试验,我们开发人员掌握了这一明确启示的窍门。

无论如何,我们该如何处理这件事;

  • 有些人制作cookie,有些人制作额外的隐藏字段

  • 然后触发表单上的提交事件,以完成他们需要进行的魔术

  • 有些甚至通过在服务器上运行验证功能来运行服务器端验证,例如

    if($_GET['say' != 'hi'){do this thing something} else { do that thing} 
    

相信我,服务器端总是会运行某种函数或循环来进行验证。到目前为止,我们还没有找到默认的验证方式。

所以我们使用表单提交事件

document.getElementById('myform').onsubmit = function() {
var cheking = document.getElementById('myfield').value;
if(cheking != 'what ever you want'){ 
alert('fail!'); 
return false; // prevent the form to submit
}
}

这是一个总的想法,不要提交半弯曲的表格,但如果确实需要发送,则代码略有变化

document.getElementById('myform').onsubmit = function() {
var cheking = document.getElementById('myfield');
if(cheking.value != 'what ever you want'){ 
cheking.value = 'invalid';            
alert('fail!'); 
}
}

表单将提交,在服务器端,对于该密钥,我们将有无效的值,因此php端将是

if($_GET['myfield' = 'invalid'){stop processing or whatever else } else { keep on processing} 

因为这种情况已经持续了很长时间,它通过输入模式属性成为了自己的标准,它在客户端处理了以上所有内容,几乎就是您所做的。

输入模式

一堆正则表达式来帮助你进行

<!DOCTYPE html>
<html>
<body>
<h1>The input pattern attribute</h1>
<form action="">
<label for="country_code">Country code:</label>
<input type="text" id="country_code" name="country_code" pattern="[A-Za-z]{3}" required oninvalid="runvalidity(this)" oninput="this.setCustomValidity('')"
title="Three letter country code"><br><br>
<input type="submit">
</form>

<script>
function runvalidity(ele){
ele.setCustomValidity('Enter country name please');
ele.value = "invalid";
}
</script>
</body>
</html>

我们创建了一个模式,在提交事件时,它将管理并不会发送表单。在JavaScript中,我们在输入字段上运行了一堆事件,在那里我们调用了自定义函数,该函数可以根据您的需要生成UI并更改输入值。如果由于任何原因,表单确实通过了无效值,那么我们可以使用相同的逻辑运行服务器端验证,如上所示。

尽管如此,浏览器将只发送count_name=无效或country_name=美国等

希望要点能帮助你了解幕后的真相。我的建议是开发一个UI上下文,然后在客户端和服务器端匹配代码逻辑(关键字逻辑)。

我个人在服务器端通过相同的条件使用pasterns和filet。一段时间后,客户端的逻辑可以被收紧,这样就不需要在服务器端进行比较了。同样,这取决于一个如何适应他们的代码逻辑。

相关内容

  • 没有找到相关文章

最新更新