【问题标题】:Show form submitted data values with PHP validation without refresh使用 PHP 验证显示表单提交的数据值而不刷新
【发布时间】:2018-01-06 14:43:59
【问题描述】:

我正在尝试弄清楚如何在通过 HTML 表单提交并存储为 cookie 时使某些数据在提交后立即可供编辑...

最重要的是,表单验证:

<?php
//check if form was sent
if(isset($_POST['send'])){
  //some basic validation
  if(strlen($_POST['myname']) > 2){ 
    //set the cookie if passed
    setcookie('myname', $_POST['myname']);
  }
} 
//set error if didn't pass validation
else {
  $error[] = 'Your name is required!';
}
?>

因此,如果用户发布数据,它将捕获它并将其存储在 cookie 中。 如果不是,则会报错:

<?php
  //check for errors
  if(isset($error)){
    foreach($error as $error){
     echo '<p style="background: red;">'.$error.'</p>';
    }
  }
?>

使用 PHP 的 HTML 表单:

<form method="post">
  <input name="myname" type="text" value="<?php if(isset($_COOKIE["myname"])){ 
  echo $_COOKIE["myname"];} ?>" placeholder="Your Name">
  <input name="send" type="submit" value="send">
</form>

这用于收集数据并将其发送以通过 PHP 验证以设置 cookie。如果 cookie 已设置,我希望它使用内联 PHP 代码显示该值。

提交表单时会发生 cookie 存储但用户只有在刷新页面后才能看到它,我可以添加 header("Refresh:0");但它并没有解决问题,因为刷新时错误消息不会显示。

我需要将它用于其中一些表单,所以目前我正在寻找一种快速简单的 PHP 解决方案,但它也可以是合适的 Jquery/AJAX sn-p。

【问题讨论】:

  • 要在不刷新/重新加载页面的情况下实现这一点,您需要使用 ajax
  • 你已经尝试过 AJAX 了吗? jQuery .validate() 也非常有用。
  • 没用过AJAX,不知道PHP在同一个文件时怎么做。我也在使用 Jquery 验证器,不知道如何将它放在一起工作。
  • 你试过我的回答了吗@Hakerovsky

标签: javascript php jquery ajax cookies


【解决方案1】:

你只能通过 jquery、ajax 来做到这一点

获取 cookie 值 -

jQuery var ckVal= $.cookie("cookiename")

javascript -

function readCookie(name) {
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') c = c.substring(1, c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
            }
            return null;
        }

【讨论】:

    【解决方案2】:

    第一:正如你在comment 中提到的form and php 代码在same page 中如此简单的提交form 像这样。不需要ajax

    第二个:如果有任何错误意味着您只需显示error message 并将submited value 放在value attribute 中,就像这样

    value="<?php if(isset($_POST['myname'])){ echo $_POST['myname']; } ?>"
    

    PHP:

    <?php
    
    if(isset($_POST['send'])){
    
      if(strlen($_POST['myname']) > 2){ 
    
       // here you can do whatever you want 
       // header('Location:next_page.php');
    
      }else{
    
         $error[] = 'Your name is required! and it should be minimum three character ';
      }
    
    
    }  
    
      if(isset($error)){
        foreach($error as $error){
         echo '<p style="background: red;">'.$error.'</p>';
        }
      }
    ?>
    
    The HTML form with PHP:
    
    <form method="post">
      <input name="myname" type="text" value="<?php if(isset($_POST['myname'])){ 
      echo $_POST['myname']; } ?>" placeholder="Your Name">
      <input name="send" type="submit" value="send">
    </form>
    

    【讨论】:

      【解决方案3】:

      在 Web2 中,我们可以通过使用 AJAX 来做到这一点。只需在表单 sumbit 上点击 ajax 并

      $('#submit_btn').on('click', function (e) {
          e.preventDefault();
          var $this = $('#form_id');
          $.ajax({
              url: 'setcookie.php',
              data: $this.serialize(),
              dataType: 'html',
              type: 'POST',
              beforeSend: function () {
                  // show loader
              },
              success: function (html) {
                  // Show success message
                  // Set value of input elements by reading cookie in JS
              },
              error: function () {
                  // Show ValidationError
              }
          }); });
      

      在 cookie.php 中,在表单输入上放置服务器端验证。如果您想在同一页面上放置代码,也可以在同一页面上制作 ajax。

      【讨论】:

        猜你喜欢
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 2011-11-18
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多