无法访问 PHP 变量

问题描述 投票:0回答:0

我正在尝试构建一个 PHP 联系表来应对我被要求做的挑战。我不熟悉 PHP,所以我正在学习这门语言。但我已经创建了一个联系表,并试图将数据发送到数据库,如果有的话也会显示错误。我确信它是我缺少的东西,因为变量是未定义的,但是当我尝试在 php 标签内的 span 中显示我的 html 中的错误时,它不会在提交表单时显示,我可以回显到屏幕上,如果我将变量名传递给将显示的字符串。此外,我在我的文件中有一个到数据库的连接并且可以回显成功的连接但是 $dbConnection 变量未定义用于提交。

再次确定这是我所缺少的东西,但我完全不熟悉语言和概念,所以任何建议将不胜感激。


<?php

$host = "localhost";
$dbName = "formValidation";
$user = "root";
$password = "";

try{
    if(isset($dbConnection)){
    $dbConnection = new PDO("mysql:host=$host; dbname=$dbName", $user, $password);
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbConnection;
    }
    
} catch(PDOException $e){
    echo $e->getMessage();
}


    $firstName = $lastName = $email = $number = $message = $subject =  "";
    $errors = array("firstName" => "", "lastName" => "", "email" => "", "number" => "", "messsage" => "");
    
    function validate(){

        //IF FORM IS SUBMITTED 
        if(isset($_POST["submit"])){
            //CHECK IF FIRSTNAME INPUT IS EMPTY THEN STORE AN ERROR IN ERROR VARAIBLE ELSE VALIDATE INPUT
             if(empty($_POST["firstName"])){
                echo $errors["firstName"] = "Enter a first name";
            } else{
                $firstName = filter_input(INPUT_POST, "firstName", FILTER_SANITIZE_STRING);
                echo $firstName;
            }
            // CHECK IF LASTNAME INPUT IS EMPTY THEN STORE AN ERROR IN ERROR VARAIBLE ELSE VALIDATE INPUT
             if(empty($_POST["lastName"])){
                echo $errors["lastName"] = "Enter a last name";
             } else{
                 $lastName = filter_input(INPUT_POST, "lastName", FILTER_SANITIZE_STRING);
                 echo $lastName;
             }
             //CHECK IF EMAIL INPUT IS EMPTY THEN STORE AN ERROR IN ERROR VARAIBLE ELSE VALIDATE INPUT
             if(empty($_POST["email"])){
                echo $errors["email"] = "Enter an email address";
             } else{
                 $email = filter_input(INPUT_POST, "email", FILTER_SANITIZE_EMAIL);
                if(!preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $email)){
                    echo "Enter a valid email";
                } else{
                    echo $email;
                }
             }

             //CHECK IF NUMBER INPUT IS EMPTY THEN STORE AN ERROR IN ERROR VARAIBLE ELSE VALIDATE INPUT
             if(empty($_POST["number"])){
                 $errors["number"] = "Please enter a contact number";
                 echo $errors["number"];
             } else{
                 $number = filter_input(INPUT_POST, "number", FILTER_SANITIZE_NUMBER_INT);
                 if(strlen($number) > 11){
                    $errors["number"] = "Please enter max 11 digits";
                    echo $errors["number"];
                 }
                 echo $number;
             }

             //CHECK DROP DOWN SELECT OPTION 
             if(empty($_POST["subject"])){
                echo "Select from drop down";
             } else{
                $subject = $_POST["subject"];
                echo $subject;
             }

             //CHECK IF MESSAGE INPUT IS EMPTY THEN STORE AN ERROR IN ERROR VARAIBLE ELSE VALIDATE INPUT
             if(empty($_POST["message"])){
                 $errors["message"] = "Please enter a small message";
                 echo $errors["message"];
             } else{
                 $message = filter_input(INPUT_POST, "message", FILTER_SANITIZE_NUMBER_INT);
                 echo $message;
             }


            if(isset($errors)){
                if(array_filter($errors)){
                    echo "erros in form";
                }
            } else{    
                
                $sql = "INSERT INTO userinfo (firstName, lastName, email, number, subject, message) VALUES(:firstName, :lastName, :mail, :number, :subject, :message)";
                
                $statement = $dbConnection->prepare($sql);

                $statement->execute(["firstName" => $firstName, "lastName" => $lastName, "email" => $email, "number" => $number, "subject" => $subject, "message" => $message]);

             
            }
          
        }
     }

  
     
    validate();
?>




<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <link rel="stylesheet" href="style.css">
  <title>Contact Form</title>
</head>
<body>

   <div class="form-container">
        <h1>Contact Form</h1>
    <form method="POST" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" novalidate>
        <input type="text" name="firstName" placeholder="Enter First Name *" value="<?php echo $firstName ?>">
        <span><?php if(isset($errors["firstName"])) echo $errors["firstName"];?></span>

        <input type="text" name="lastName" placeholder="Enter Last Name *" value="<?php echo $lastName ?>">
        <span class="error"><?php if(isset($errors["lastName"])){echo $errors["lastName"];} ?></span>
        <input type="email" name="email" placeholder="Enter email address *" value="<?php echo $email ?>">
        <span class="error"></span>
        <input type="number" name="number" placeholder="Enter contact number *" value="<?php echo $number ?>">
        <span class="error"></span>
        
        <select name="subject" id="select" required>
            <option value="">Select Subject</option>
            <option value="enquiry">Enquiry</option>
            <option value="callback">Call Back</option>
            <option value="complaint">Complaint</option>
        </select>
       
        <input class="message" name="message" type="text" placeholder="Enter a message *" value="<?php echo $message ?>">
        <span class="error"></span>
        <input type="submit" name="submit" value="submit" class="submit-btn">
    </form>
    </div>
</body>
</html>



Try using isset function on variables and tried writing different formats of php to display in html but still no success. I have read a few other tutorials for display php variables and I am doing as they say but still not showing. 
php mysql pdo
© www.soinside.com 2019 - 2024. All rights reserved.