【问题标题】:Server side form validtion and returning message服务器端表单验证和返回消息
【发布时间】:2015-12-11 23:35:14
【问题描述】:

我对 Web 应用程序非常陌生,不知道如何在客户端(网页)上显示来自服务器的反馈。

我正在尝试实现服务器端验证,即将信息发送到服务器并使用 PHP 进行验证。

如果验证失败,则将响应发送回客户端,刷新包含 Web 表单的页面并显示反馈。 (我已经实现了客户端验证,现在想在服务器端实现)。

我的困难是

(1)如何将信息从服务器发送回客户端?

(2)刷新表单并显示反馈。

在此link 中有信息,但没有提供适当的解决方案。

因为我是 Web 应用程序的初学者,所以只要提供线索或直接的解决方案就更令人高兴了。

谢谢

【问题讨论】:

  • form 提交到php 页面,然后根据需要进行处理并输出所需的数据。
  • 嗨@batuman,我的朋友,我认为你应该更好地思考你提出问题的方式。每个人都可以在这里看到和阅读你的声望点,不是吗?请注意,这不是批评,而是建议。

标签: javascript php html web-applications


【解决方案1】:

如果您想将数据发送到外部脚本以进行验证,请使用 Ajax 发送请求。处理数据然后回显将在 Ajax 请求中返回的响应/状态。从那里您可以使用 JavaScript 来处理响应并更新页面。

formpage.html

<form id="form">
    <input name="email" type="email"/>
    <input name="persons_name" type="text"/>
    <input name="password" type="password"/>
    <input type="submit" value="submit"/>
</form>

//JQuery
<script type="text/javascript">
jQuery("#form").on("submit", function(e){

    //This stops the form from submitting how it regularly would
    e.preventDefault();

    jQuery.ajax({
        url: "http://yoursite/path/to/phpfile.php",
        type: "POST",
        data: jQuery('#form').serialize(), /*grab all elements in your form and serialize them */
        onSuccess:  function(data){

           // I put this here so you can see data sent back in you console
           console.log(data);

           if(data.error == false){
              //validation was successfull
           }else if(data.error == true){
              //validation failed handle errors
           }
        },
        onError: function(){
           // the AJAX request failed as in timed out / bad url etc.
        } 
    });
});
</script>

phpfile.php

<?php
$data = array();
$data['error'] = false;

//if persons name is not set or does not have a value    
if(!isset($_POST['persons_name']) || empty($_POST['persons_name'])){ 

    $data['error'] = true;
    $data['message'][] = 'You have to have a name!';
}

//if password is set
if(isset($_POST['password']) && !empty($_POST['password'])){

   //validate password logic goes here

   if(!valid){  /*if its not valid*/
       $data['error'] = true;
       $data['message'][] = 'You password sucks!';
   }
}else{ /* password was not set */
    $data['error'] = true;
    $data['message'][] = 'What the heck you didn\'t add a password';
}

//if email is set
if(isset($_POST['email']) && !empty($_POST['email'])){

      //validate email logic goes here

    if(!valid){
        $data['error'] = true;
        $data['message'][] = 'Thats NOT an email address',
    }
}else{
    $data['error'] = true;
    $data['message'][] = 'Email address is required'
}

//optional
if(!$data['error']){
     // If there are no errors you can do something with your values here such as save them to a database etc.
}


// then echo the $data array you have built as JSON to use in jquery. 
//This will be what is returned in your AJAX request
echo json_encode($data);
?>

有更合乎逻辑的方法来构建您的验证,我在这里使用了 jQuery,因为...我喜欢 jQuery,但这至少向您展示了如何访问这些值。 valid 和 !valid 显然不是真正的运算符,需要替换为但是您想检查每个参数的验证。此外,还有很多需要验证的内容,例如清理,但这会让您开始使用这两个文件。 $data 只是一个可以包含任何内容的数组。 $data['error'] 键和值是 ajax 调用中的 onSuccess 函数用来确定验证是否成功并且 $data['message'][] 正在构建一个大的消息数组.给每条消息一个唯一的键可能更有用,这样你就可以用 javascript 更好地解析它,例如 $data['message']['email'] = 等... 最后一件事让我进入了我的好 ole通过 ajax 验证表单的天数是 OnSuccess 并不意味着您验证成功。它只是意味着一条消息已成功发回。 On Error 表示您遇到了 http 错误,例如 404 或 500 错误。

【讨论】:

  • 是否可以只使用 HTML 和 Javascript 来实现?我不想在一开始就学习很多新东西。如果别无选择,我很好。
  • 看看我更新的答案。这绝不是一个完整的验证,但至少会让你的两个文件说话
  • 您的问题是关于服务器端验证,这确实需要客户端验证,因为客户端可以被欺骗和操纵。服务器端一旦接触到您的 php 文件就无法被操作,这是确保您的数据是您期望的数据的可靠方法,然后再对它进行任何操作,例如保存到数据库等。看看我更新的答案。这绝不是一个完整的验证,但至少会让你的两个文件说话
  • Web 应用程序对我来说是非常新的。所以没有任何线索可以进行下一步并苦苦挣扎。那个时候 StackOverflow 上演了一幅美丽的图画。当然,在这方面有专业知识的人认为我的问题是花生。现在至少我现在知道我需要学习 JQuery 和 AJAX。对于那些不想伸出援手的人,请忽略这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2011-10-17
  • 2020-12-26
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
相关资源
最近更新 更多