当使用javascript调用php函数时,Php $ _POST返回空

时间:2018-05-29 22:29:04

标签: javascript php forms post

我还在学习php和java脚本。 我正在创建一个简单的联系表单,并使用$ _Server [php_self]

将表单操作设置为同一页面

我想要做的是当有人提交到我的表单时,它会显示一条消息,其中包含在同一页面上提交的名称。用信息替换联系表格。

我也尝试将动作指向不同的php页面。它仍然无法正常工作。 Javascript是这样的吗?或者我必须使用不同的代码或语言来做到这一点。

这是我的代码



<!DOCTYPE html>
<html>
<head>
    <?php 
    include 'action.php';
?>
    <title> My profle</title>
    <meta name="robots" content="noindex">
    <link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<div class="contact">
   <form class="form" class="contact" id="contact-form" action="action.php" method="POST">
            Name: <br>
           <input type="text" class="field" name="name"><br>
           Number:<br>
           <input type="text" class="field" name="number"><br>
           Email:<br>
           <input type="email" class="field" name="email:>"<br>
           <br>
           <input type="submit" class="submit" name="submit" value="submit"
           onclick ="document.getElementById('contact-form').innerHTML='<?php thankyou();?>'">
       </form>
</div>
</body>
</html>
&#13;
&#13;
&#13;

然后是action.php

&#13;
&#13;
<?php
    function thankyou(){
        $name = $_POST['name'];
        echo "Thank you"." $name ! Your message has been submitted.";
    }
?>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:3)

这里有几个不同的问题。

首先是缺乏对PHP和JS运行时间的理解。

第二个是加载新页面时DOM更改会丢失。

这就是发生的事情:

  1. 浏览器请求页面
  2. PHP运行($_POST没有name密钥)
  3. 浏览器获取页面
  4. 您点击提交按钮
  5. JavaScript运行,并设置innerHTML(请记住PHP在第2步回溯)
  6. 表单提交导致浏览器导航到新页面
  7. PHP再次运行
  8. 浏览器获取新页面...并且对上一页的DOM更改将丢失
  9. 进一步阅读:What is the difference between client-side and server-side programming?

答案 1 :(得分:0)

我愿意在评论中听到更好的方法来做到这一点,因为这不是我的头脑,而且我知道有更好的解决方案......但是这里我会做什么你的情况:

<!DOCTYPE html>
<html>
<head>
    <title> My profle</title>
    <meta name="robots" content="noindex">
    <link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>
<div class="contact">
   <form class="form" class="contact" id="contact-form" action="" method="POST">
           <?php 
               if(isset($_POST)){
                   //process data however (I'm assuming) you need to - even if just posting to another script at this point...
                   echo 'Thank you '.$_POST['name'].' ! Your message has been submitted';
               }
               else{
                    echo 'Name: <br>
                    <input type="text" class="field" name="name"><br>
                    Number:<br>
                    <input type="text" class="field" name="number"><br>
                    Email:<br>
                    <input type="email" class="field" name="email"><br>
                    <br>
                    <input type="submit" class="submit" name="submit" value="submit">';
               }
           ?>
       </form>
</div>
</body>
</html>