【问题标题】:PHP Leaking & Undefined VariablesPHP 泄漏和未定义变量
【发布时间】:2017-07-17 07:15:34
【问题描述】:

第一次发帖。我对此很陌生。我有 HTML/CSS 方面的经验,但对 JS 或 PHP 了解不多。我正在尝试为我的网站创建一个联系表单,当字段不完整时,用户将在其中收到警报,然后如果一切正确,他们的信息将发送到我的电子邮件。

我使用教程来获取大部分代码,但我定制了部分代码以满足我的需求,并添加了一些重复的内容。

Screenshot

但是,它不起作用。或者我认为它被称为 PHP 泄漏?我收到提到未定义变量的错误。无论如何,这是 PHP 代码,然后是 HTML。

<?php
if (isset($_POST["submit"])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $tel = $_POST['tel'];
    $company = $_POST['companyl'];
    $message = $_POST['message'];
    $from = 'name'; 
    $to = 'johndoe@domain.com'; 
    $subject = 'company';

    $body ="From: $name\n E-Mail: $email\n Message:\n $message";
    // Check if name has been entered
    if (!$_POST['name']) {
        $errName = 'Please enter your name';
    }

    // Check if email has been entered and is valid
    if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $errEmail = 'Please provide us with an email address.';
    }

    //Check if phone number  has been entered
    if (!$_POST['tel']) {
        $errTel = 'Please enter a number we can reach you at.';
    }

    //Check if Company name has been entered
    if (!$_POST['company']) {
        $errCompany = 'What is the name of your company?';
    }

    //Check if message has been entered
    if (!$_POST['message']) {
        $errMessage = 'Please tell us more about your company and your needs.';
    }

    //Check if simple anti-bot test is correct
    if ($human !== 4) {
        $errHuman = 'Incorrect answer! Try again.';
    }

// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage && !$errTel && !$errCompany && !$errHuman) {
    if (mail ($to, $subject, $body, $from)) {
        $result='<div class="alert alert-success">We will get in touch with you shortly!</div>';
    } else {
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>';
    }
}
    }
?>

HTML:

<form role="form" method="post" action="index.php">
    <div class="row">
        <div class="col-lg-6 form-group">
            <input type="text" class="formbox text-muted" id="name" name="name" placeholder="Name" required value="<?php echo htmlspecialchars($_POST['name']); ?>">
                <?php echo "<p class='text-danger'>$errName</p>";?>
        </div>
        <div class="col-lg-6 form-group">
            <input type="tel" class="formbox text-muted" id="tel" name="tel" placeholder="Phone number" required value="<?php echo htmlspecialchars($_POST['tel']); ?>">
                <?php echo "<p class='text-danger'>$errTel</p>";?>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-6 form-group">
            <input type="email" class="formbox text-muted" id="email" name="email" placeholder="Email address" required value="<?php echo htmlspecialchars($_POST['email']); ?>">
            <?php echo "<p class='text-danger'>$errEmail</p>";?>

        </div>
        <div class="col-lg-6 form-group">
            <input type="text" class="formbox text-muted" id="company" name="company" placeholder="Name of your company" required value="<?php echo htmlspecialchars($_POST['company']); ?>">
            <?php echo "<p class='text-danger'>$errCompany</p>";?>
        </div>
    </div>

    <div class="row">
        <div class="col-lg-12 form-group">
                <textarea name="message" class="messagebox text-muted" id="message" name="message" placeholder="Tell us about the company you're trying to pitch" required></textarea>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-6 pull-left">
            <input type="text" class="formbox text-muted" id="human" placeholder="What is is 2+2?" required value="<?php echo htmlspecialchars($_POST['human']); ?>">
            <?php echo "<p class='text-danger'>$errHuman</p>";?>
        </div>
        <div class="col-lg-4 pull-right">
            <button id=" submit" type="submit" class="inputsubmit btn btn-block btn-default btn-xl sr-button" value="send">Send Message!</button>
        </div>
        <div class="col-lg-6 pull-right">
            <?php echo $result; ?>
        </div>
    </div>
</form>

【问题讨论】:

标签: php html css forms contact


【解决方案1】:

一个简单的解决方法:您可以将所有$_POST['x'] 变量设置为一个空字符串,如果它们没有设置(不存在),这将消除未定义的变量错误。

foreach( array( 'name', 'tel', 'email', 'company', 'human' ) as $key ){
    if ( !isset( $_POST[ $key ] ) ) $_POST[ $key ] = '';
}

这应该在 PHP 脚本的顶部完成。

您正在尝试在 HTML (value="&lt;?php ... ?&gt;") 中使用之前输入的值 ($_POST['name'])。如果用户是第一次访问表单,他们没有提供任何名字,没有发布任何表单数据,所以$_POST['name']不存在。

更好的解决方法:如果该值不存在,则不要输出它。变化:

<input type="text" class="formbox text-muted" id="name" name="name" placeholder="Name" required value="<?php echo htmlspecialchars($_POST['name']); ?>">

到:

<input type="text" class="formbox text-muted" id="name" name="name" placeholder="Name" required value="<?php if( isset( $_POST['name'] ) ) { echo htmlspecialchars($_POST['name']); } ?>">

此外,您在使用 companyl 而不是 company 的位置似乎有错字:

$company = $_POST['companyl'];

更新 您在 cmets 中回答您仍然收到有关错误消息的未定义变量。你应该在这里做一些类似的检查,以确保echo有错误消息:

<?php echo "<p class='text-danger'>$errTel</p>";?>

变成:

<?php if( isset( $errTel ) ) { echo "<p class='text-danger'>$errTel</p>"; } ?>

(依此类推,适用于所有情况)

【讨论】:

  • “解析错误:语法错误,第 3 行的 D:\xampp\htdocs\deck\index.php 中出现意外的 '$_POST' (T_VARIABLE)”我在尝试加载时遇到该错误再次访问该页面。感谢指出错字!让我尝试添加第二个修复程序。
  • 删除了 foreach 代码,并使用了“更好的修复”。这有助于清除字段:imgur.com/a/kCabg 但“警报”消息仍然存在。唔。在这一点上,我实际上很想放弃警报。因为输入“必需”属性已经做到了,并要求用户填写该字段。据我所知,整个 $err 变量都导致了这个问题。 PS:现在是1.15AM,所以我现在就去睡觉了。谢谢您的帮助! :)
  • @ShahriarEmil 抱歉,我在第一个 foreach() 循环中缺少括号。您还应该对错误消息进行一些验证(请参阅上面的更新)。
【解决方案2】:

您应该在输入值字段上使用一个小的内联 php 条件-

<?php echo ($_POST['anything']) ? $_POST['anything'] : ''?>

解释是当您尝试正常加载页面时,页面中缺少$_POST。因此,只需检查变量是否存在即可。如果存在则使用该变量,否则保留空值。

【讨论】:

    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多