簡體   English   中英

PHP泄漏和未定義變量

[英]PHP Leaking & Undefined Variables

第一次發布。 我對此很陌生。 我有使用HTML / CSS的經驗,但是沒有使用JS或PHP的經驗。 我正在嘗試為我的網站創建一個聯系表單,當字段不完整時,用戶將收到警報,然后如果一切正確,則將其信息發送到我的電子郵件中。

我使用了教程來獲取大部分代碼,但是我根據自己的需要自定義了部分代碼,並添加了一些可重復的內容。

截圖

但是,它不起作用。 還是我認為這被稱為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>

一個簡單的解決方法:如果未設置(不存在)所有$_POST['x']變量,都可以將它們設置為空字符串,這將消除未定義的變量錯誤。

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

這應該在您的PHP腳本的頂部完成。

發生了什么事,您正在嘗試在HTML( value="<?php ... ?>" )中使用先前輸入的值( $_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'];

更新您在評論中回答,您仍在獲取有關錯誤消息的未定義變量。 您應該在這里進行一些類似的檢查,以確保有一條錯誤消息要echo

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

變為:

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

(依此類推,適用於所有情況)

您應該在輸入值字段上使用小的內聯php條件-

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

原因是當您嘗試正常加載頁面時,頁面中缺少$_POST 因此,只需檢查內聯變量是否存在。 如果存在,則使用變量,否則留空值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM