在 PHP 中关闭 if 语句的替代方法也会导致数组出现问题


alternative to closing if statement in php also trouble with arrays

提前感谢您查看我的代码并帮助我解决我遇到的问题。我正在尝试建立一个简单的联系表格。问题是当我点击提交按钮时,定向到下一页的所有内容都会将所有内容显示到数组中。我该如何解决这个问题?

另外,我的 if 语句让我很难解决这个问题?我是否使用了错误的阵列类型?

联系方式.php

<?php
session_start();
require_once 'PHPMailerAutoload.php';
$errors = [];
if(isset($_POST['name'], $_POST['email'], $_POST['message'])){
$fields = [
    'name' => $_POST['name'],
    'email' => $_POST['email'],
    'message' => $_POST['message']
];
foreach($fields as $field => $data) {
    if(empty($data)){
        $errors[] = 'The ' . $field . ' field is required.';
    }   
}
if(empty($errors)){
    $m = new PHPMailer;
    $m->isSMTP();
    $m->SMTPAuth = true;

    $m->Host = 'smtp.gmail.com';
    $m->Username = 'none@gmail.com';
    $m->Host = 'Pa$$w0rd1';
    $m->SMTPSecure = 'ssl';
    $m->Port = '465';
    $m->isHTML();
    $m->Subject = 'Contact form submitted';
    $m->Body = 'From: ' . $fields['name'] . ' (' . $fields['email'] . ')<p>' . $fields['message'] . '</p>';
    $m->From = 'Contact';
    $m->AddAddress('none@gmail.com', 'name');
    if($m-> send()){
        header('Location: thankyou.php');
        die();
    } else {
        $errors[] = 'Sorry, could not send email. Try again late.';
    }
}
} else {
$errors[] = 'Something went wrong.';
}
$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;
header('Location: contactform.php');
?>

联系表格.php

 <?php
 session_start();
 require_once 'security.php';
 $errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
 $fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
 ?>
 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>Contact Us</title>
 <link rel="stylesheet" href="css/website.css">
 </head>
 <center><body>
    <div class="contact">
    <?php if(!empty($errors)): ?>
        <div class="panel">
            <ul><li><?php echo implode(('</li><li>'), $errors); ?></li></ul>
        </div>
    <?php endif; ?>
    <form action="contact.php" method="post">
        <label>
            Your name *
            <input type="text" name="name" autocomplete="off">
        </label>
        <br><label>
            Your email address *
            <input type="text" name="email" autocomplete="off">
        </label>
        <br><label>
            Your message or concern *
            <textarea name="message" rows="8"></textarea>
        </label>
        <input type="submit" value="Send">
        <p class="muted">* means a required field</p>
        </form>
    </div>
</body></center>
</html>
 <?php
 unset($_SESSION['errors']);
 unset($_SESSION['fields']);
 ?>

这是我在上面的代码中引用的 if 语句

  <?php if(!empty($errors)); ?>
        <div class="panel">
            <ul><li><?php echo implode(('</li><li>'), $errors); ?></li></ul>
        </div>
  <?php endif ?>

请帮帮我。

问题是 if 语句末尾的分号。

如果要使用 if with endif 需要使用 ":",如下所示:

if(!empty($errors)):
   code;
endif;

试试这个:

<?php if(!empty($errors)): ?>
  <div class="panel">
    <ul><li><?php echo implode(('</li><li>'), $errors); ?></li></ul>
  </div>
<?php endif; ?>

正确的使用方法,如果...尾部为:

<?php if (condition): ?>
    // Things to do when condition is true
<?php endif; ?>