PHP没有来自HTML表单的响应

Posted

技术标签:

【中文标题】PHP没有来自HTML表单的响应【英文标题】:PHP no response from HTML form 【发布时间】:2019-09-03 01:23:33 【问题描述】:

承认有点尴尬,但我遇到这个问题已经一个多星期了。我正在尝试从表单中获取数据到我的数据库中,代码方面的一切似乎都很完美,但我只从底部提到的 connect.php 文件中得到“连接正常”的回复。没有响应,数据库中也没有结果。

我已经仔细检查了文件的路径,并在表单中添加了“name”和“id”。

这是我的表格:

<form action="registration.php" method="POST">
<div class="registration_wrapper">
<button class="registration_button">Registration &#x2BC6;</button>
<input type="text" class="user_input_fields" id="first_name" name="first_name" placeholder="First Name" required>
<input type="text" class="user_input_fields" id="last_name" name="last_name" placeholder="Last Name" required>
<input type="text" class="user_input_fields" id="email" name="email" placeholder="E-mail" required>
<input type="text" class="user_input_fields" id="dob" name="dob" placeholder="Date of Birth" required>
<input type="text" class="user_input_fields" id="username" name="username" placeholder="Username" required>
<input type="text" class="user_input_fields" id="password1" name="password1" placeholder="Password" required>
<input type="text" class="user_input_fields" id="password2" name="password2" placeholder="Repeat Password" required>
<input type="checkbox" name="agreements">I agree to the <a href="Terms_and_conditions.php"><u>Terms & Conditions</u></a>
<button type="submit" class="continue_button">Continue ></button>
</div>
</form>

这是registration.php文件:

<?php
$page_title = 'Registration';

if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' )

  require ('connect_db.php');
  $errors = array();

  if ( empty( $_POST[ 'first_name' ] ) )
   $errors[] = 'Enter your first name.' ; 
  else
   $fn = mysqli_real_escape_string( $link, trim( $_POST[ 'first_name' ] ) ) ; 

  # Check for a last name.
  if (empty( $_POST[ 'last_name' ] ) )
   $errors[] = 'Enter your last name.' ; 
  else
   $ln = mysqli_real_escape_string( $link, trim( $_POST[ 'last_name' ] ) ) ; 

  # Check for an email address:
  if ( empty( $_POST[ 'email' ] ) )
   $errors[] = 'Enter your email address.'; 
  else
   $e = mysqli_real_escape_string( $link, trim( $_POST[ 'email' ] ) ) ; 

  if ( empty( $_POST[ 'username' ] ) )
   $errors[] = 'Enter your email address.'; 
  else
   $un = mysqli_real_escape_string( $link, trim( $_POST[ 'username' ] ) ) ; 

  # Check for a password and matching input passwords.
  if ( !empty($_POST[ 'password1' ] ) )
  
    if ( $_POST[ 'password1' ] != $_POST[ 'password2' ] )
     $errors[] = 'Passwords do not match.' ; 
    else
     $p = mysqli_real_escape_string( $link, trim( $_POST[ 'password1' ] ) ) ; 
  
  else  $errors[] = 'Enter your password.' ; 

  # Check if email address already registered.
  if ( empty( $errors ) )
  
    $q = "SELECT user_id FROM users WHERE email='$e'" ;
    $r = mysqli_query ( $link, $q ) ;
    if ( mysqli_num_rows( $r ) != 0 ) $errors[] = 'Email address already registered. <a href="login.php">Login</a>' ;
  

  # On success register user inserting into 'users' database table.
  if ( empty( $errors ) ) 
  
    $q = "INSERT INTO users (first_name, last_name, email, u_password, u_datejoined) VALUES ('$fn', '$ln', '$e','$un',SHA1('$p'), NOW() )";
    $r = mysqli_query ( $link, $q ) ;
    if ($r)
     echo 'Registration successful'; 

    # Close database connection.
    mysqli_close($link); 


    exit();
  
  # Or report errors.
  else 
  
    echo '<div class="container"><h1>Error!</h1><p id="err_msg">The following error(s) occurred:<br>' ;
    foreach ( $errors as $msg )
     echo " - $msg<br>" ; 
    echo 'Please try again.</p></div>';
    # Close database connection.
    mysqli_close( $link );
    

?>

这是connect.php文件:

<?php 
# establishing link to database using username, password and database name 
$link = mysqli_connect('localhost', 'root', 'root', 'tecbooks'); 

if (!$link)  
    die('Could not connect to MySQL: ' . mysqli_error()); 
 
echo '<h1>Connection OK</h1>';  
mysqli_set_charset( $link, 'utf8' ) ;
?>

【问题讨论】:

你调试了吗?评论连接 ok 行并尝试,你检查你的日志了吗? 几行,将这一行 require ('connect_db.php'); 添加到顶部,在 page_title 下方。并将此 $q = "SELECT user_id FROM users WHERE email='$e'" ;** 更改为 **$q = "SELECT user_id FROM users WHERE email=".$_POST[ 'email' ] ; 还要检查您的数据库凭据。 change if (!$link) die('Could not connect to MySQL: ' . mysqli_error()); elseecho '

连接正常

';
您正在无条件显示echo '&lt;h1&gt;Connection OK&lt;/h1&gt;';。所以它总是显示。 @Vishwa 我已经实施了更改,它更整洁了,但我仍然只收到“连接正常”消息 @M.Hemant 是用 Notepad++ 写的,我现在正在找调试器 【参考方案1】:

这样看插入查询:

$q = "INSERT INTO users (first_name, last_name, email, u_password, u_datejoined)
                  VALUES ('$fn',    '$ln',      '$e',    '$un',      SHA1('$p'), NOW() )";

你注意到了什么?少了点什么。

所以$r 在这里是错误的:$r = mysqli_query ( $link, $q ) ;。数据库连接关闭,程序退出。

【讨论】:

感谢您发现这一点!但是,修正后,我仍然遇到了问题。在从头开始重建文件之后,它似乎是“mysqli_real_escape_string”(语法错误)。 PHPmyadmin 对此非常挑剔。正确的语法是:"$first_name = mysqli_real_escape_string($link, $_POST['first_name']);"【参考方案2】:

原来是与代码无关的数据库结构问题。数据库中的用户被分配了唯一的 ID。问题是该值没有自动增加,因此无法插入记录。这是解决方案的链接:

Auto increment in phpmyadmin

【讨论】:

以上是关于PHP没有来自HTML表单的响应的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ByteArray(来自 Flash)和一些表单数据发送到 php?

20php表单的使用

PHP表单

任何生成html表单的工具[关闭]

PHP表单汇总

来自不同 html 页面的 PHP 连接