PHP / MySQL,将我发送回注册表单

时间:2018-09-26 07:13:47

标签: php mysql mysqli

我正在尝试为在线投资组合创建一个消息表单,首先使用本地数据库,然后再进行切换。当我点击“提交”按钮时,它返回到index.php文件上的注册表单。我是基于较早的实践编写代码的,显然我做的并不正确,但是我仍然是PHP的初学者(此外,无用的大学课程让我无法专注于编码, .....在我不能只专注于编码方面发挥了重要作用。这使我回到索引页面上的注册表单,这表明我做错了。

来自index.php的表格:

<form action="includes/process.php" method="POST">
     <p>First Name:</p>
    <input type="text" id="first" name="first"> <p>Last Name:</p>
  <input type="text" id="last" name="last">       
  <br>
  <p>E-mail:</p>
    <input type="text" id="email" name="email"> <br>
  <p>Message:</p>
     <textarea id="message" name="message" size="10000" rows="6" cols="50"></textarea><br><br>
  <input type="submit" value="Send">
  <input type="reset" value="Reset">
</form>

includes / db.php中的代码

<?php 

$dbServername = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbName = "portfoliomessages";

$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);

includes / process.php的代码

<?php

if (isset($_POST['submit'])) {
include_once 'db.php';


$first = mysqli_real_escape_string($conn, $_POST["first"]);
$last = mysqli_real_escape_string($conn, $_POST["last"]);
$email = mysqli_real_escape_string($conn, $_POST["email"]);
$message = mysqli_real_escape_string($conn, $_POST["message"]);
//error handlers
//Check for empty fields

if( empty($first) || empty($last) || empty($email)|| empty($message) )  {
    header("Location: ../index.php?index=empty");
    exit();
} else {
    //check if input characters are valid
    if (!preg_match("/^[a-zA-Z]*$/", $first) || !preg_match("/^[a-zA-Z]*$/", 
 $last) ) {
        header("Location: ../index.php?index=invalid");
        exit();
    } else {
        //check if email is valid
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            header("Location: ../index.php?index=email");
        exit();
            } else {
                //Insert message into database
                $sql = "INSERT INTO newmessagesthirdattempt (first, last, 
  message, email) VALUES ('$first', '$last', '$message', '$email);";
                mysqli_query($conn, $sql);
                header("Location: ../success.php");
                exit();
            }
        }

    }

} else {
header("Location: ../index.php");
exit();
}

1 个答案:

答案 0 :(得分:-1)

根据W3C,仅处理具有名称属性的输入。 在这里,您的提交缺少name属性。这就是if (isset($_POST['submit'])) {不正确的原因。

您可以将名称属性添加到提交按钮或测试其他输入,例如“第一个”或“最后一个”。

另一种方法是将参数传递给您的过程文件:

<form action="includes/process.php?action=something" method="POST">

然后:

if (isset($_GET['action']) && $_GET['action']=='something') {

如果您的process.php文件得到了很多处理,则可以在此处轻松添加switch