【问题标题】:PHP submits form data instantly without button pressPHP 无需按下按钮即可立即提交表单数据
【发布时间】:2018-06-24 04:04:07
【问题描述】:

我正在使用引导程序制作 HTML 表单,当用户单击提交按钮时,它会将数据提交到服务器上的 json 文件。问题是,每当我加载页面时,它已经向 json 文件提交了一堆空数据,当我单击按钮时它什么也不做。 我已经尝试了我想到的一切,但找不到解决方案。也许这里有人可以帮助我解决这个问题。

提前致谢。

这是我的代码:

 <?php

 $message = '';
 $error = '';

 if(isset($_POST["submit"]))
 {

   if(file_exists('tickets.json'))
   {
      $current_data = file_get_contents('tickets.json');
      $array_data = json_decode($current_data, true);
      $extra = array(
        'titel'        => $_POST["titel"],
        'omschrijving' => $_POST["omschrijving"],
        'datum'        => $_POST["datum"],
        'naam'         => $_POST["naam"],
        'TicketType'   => $_POST["TicketType"],
     );
      $array_data[] = $extra;
      $final_data = json_encode($array_data);
      if(file_put_contents('tickets.json', $final_data))
      {
        $message = "<label class='text-success'>Ticket verstuurd!</label>";
      }
     }
    else
   {
       $error = 'No JSON File';
   }

 }

?>

这是 html 位。

<!DOCTYPE html>
<html>
   <head>
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js">
</script>
   <link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-
beta.3/css/bootstrap.min.css" integrity="sha384-
Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" 
crossorigin="anonymous">
   <link rel="stylesheet" href="main.css">
   </head>

    <body>

<script>
 var id;

 id = Math.floor((Math.random() * 999) + 1);
</script>

<form method="post" action="submit.php">
  <?php
  if(isset($error))
  {
    echo $error;
  }
   ?>
 <div class="center">
  <div class="form-group">
    <label for="Titel">Titel</label>
    <input class="form-control" type="text" name="titel" id="Titel">
  </div>
  <div class="form-group">
    <label for="Omschrijving">Omschrijving</label>
    <textarea class="form-control" name="omschrijving" id="Omschrijving" rows="3"></textarea>
  </div>
  <div class="form-group">
    <label for="Datum">Datum</label>
    <input class="form-control" name="datum" type="date" id="Datum">
  </div>
  <div class="form-group">
    <label for="Naam">Naam</label>
    <input class="form-control" name="naam" type="text" id="Naam">
  </div>
  <div class="form-check">
   <label class="form-check-label">
    <input class="form-check-input" type="radio" name="TicketType" id="TK_Rfc" value="rfc" checked>
     RFC
   </label>
  </div>
  <div class="form-check">
   <label class="form-check-label">
    <input class="form-check-input" type="radio" name="TicketType" id="TK_Bug" value="bug">
     BUG
   </label>
 </div><br>
  <script class="center">document.write("#" + id);</script><br><br>

  <button type="submit" class="btn btn-info">Submit</button>
 </div>

 <?php
 if(isset($message))
 {
   echo $message;
 }
  ?>
</form>


<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
  </body>



</html>

【问题讨论】:

  • HTML 中没有提交页面的代码,所以我猜if(isset($_POST["submit"])) { if(file_exists('tickets.json')) { 在加载时正在执行。也永远不要在表单中调用任何东西name="submit"
  • Also NEVER call anything name="submit" in a form 声明的解释?只是好奇。另外,Roan,PHP 和 HTML 是否在同一个文件中?它们是两个单独的文件吗?试试&lt;button type="submit" class="btn btn-info"&gt;Submit&lt;/button&gt; 提交按钮?
  • 是的,html与php在同一个文件中,我尝试更改按钮,现在它根本没有提交任何东西。
  • 请相应地更新您的代码。现在很混乱。另外,我希望文件名为submit.php?
  • 是的,文件名为 submit.php

标签: javascript php html json web


【解决方案1】:

试试这个代码,你会发现它有效。

问题:

既然你说 html 代码和 php 代码都在同一个文件中,我将表单操作属性设置为空: &lt;form method="post" action=""&gt;

其次,您需要像这样命名提交标签,以便 PHP 代码可以触发 if 条件:

&lt;button type="submit" name="submit" class="btn btn-info"&gt;Submit&lt;/button&gt;

完整代码:

<?php
$message = '';
$error = '';

if (isset($_POST["submit"])) {

    if (file_exists('tickets.json')) {
        $current_data = file_get_contents('tickets.json');
        $array_data = json_decode($current_data, true);
        $extra = array(
            'titel' => $_POST["titel"],
            'omschrijving' => $_POST["omschrijving"],
            'datum' => $_POST["datum"],
            'naam' => $_POST["naam"],
            'TicketType' => $_POST["TicketType"],
        );
        $array_data[] = $extra;
        $final_data = json_encode($array_data);
        if (file_put_contents('tickets.json', $final_data)) {
            $message = "<label class='text-success'>Ticket verstuurd!</label>";
        }
    } else {
        $error = 'No JSON File';
    }

}
?>


<!DOCTYPE html>
<html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css" integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy" crossorigin="anonymous">
    <link rel="stylesheet" href="main.css">
    </head>

    <body>

    <script>
        var id;
        id = Math.floor((Math.random() * 999) + 1);
    </script>

    <form method="post" action="">
        <?php
        if (isset($error)) {
            echo $error;
        }
        ?>
    <div class="center">
      <div class="form-group">
        <label for="Titel">Titel</label>
        <input class="form-control" type="text" name="titel" id="Titel">
      </div>
      <div class="form-group">
        <label for="Omschrijving">Omschrijving</label>
        <textarea class="form-control" name="omschrijving" id="Omschrijving" rows="3"></textarea>
      </div>
      <div class="form-group">
        <label for="Datum">Datum</label>
        <input class="form-control" name="datum" type="date" id="Datum">
      </div>
      <div class="form-group">
        <label for="Naam">Naam</label>
        <input class="form-control" name="naam" type="text" id="Naam">
      </div>
      <div class="form-check">
      <label class="form-check-label">
        <input class="form-check-input" type="radio" name="TicketType" id="TK_Rfc" value="rfc" checked>
        RFC
      </label>
      </div>
      <div class="form-check">
      <label class="form-check-label">
        <input class="form-check-input" type="radio" name="TicketType" id="TK_Bug" value="bug">
        BUG
      </label>
    </div><br>
      <script class="center">document.write("#" + id);</script><br><br>

      <button type="submit" name="submit" class="btn btn-info">Submit</button>
    </div>

    <?php
    if (isset($message)) {
        echo $message;
    }
    ?>
    </form>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
    </body>
</html>

【讨论】:

  • 请阅读问题下方的 cmets。在提交按钮上添加name 属性并将其设置为submit 未完成。 (我也不知道)
  • @Clemenz ,尝试运行我的代码,你会发现它有效。不同之处在于,如果您设置了提交值但仍然错误地设置了表单操作属性,它仍然无法正常工作。我的代码附带了一些解释。请尝试一下
【解决方案2】:

尝试使用if ($_SERVER["REQUEST_METHOD"] == "POST") 而不是if(isset($_POST["submit"]))。您也可以使用&lt;input type="submit" value="Submit" class="btn btn-info"&gt; 代替按钮标签。

希望这对你有用。 Veel成功了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2018-09-04
    • 1970-01-01
    • 2023-04-06
    • 2017-09-29
    相关资源
    最近更新 更多