2016-06-17 3 views
-1

그래서 이것은 Contact Form PHP 스크립트로 기본 유효성 검사입니다. 이 스크립트는 아무 문제 나 오류없이 절대적으로 잘 실행되었습니다. 최근까지 파일을 다른 웹 호스팅으로 전송했습니다. 새로운 웹 호스트 내가 그래서 무슨 일인지 모르겠다 PHP에 대해 잘 모르는 PHP 버전 5.4.45PHP 알림 : 정의되지 않은 색인 - 연락처 양식이 작동하지 않습니다.

을 가지고 있지만

이전 웹 호스트

는 PHP 버전 5.4.35 했다. 다음은 누군가 contact 양식을 제출할 때마다 error_log가 기록한 내용입니다.

[17 월 2016 17시 5분 20초 기타/GMT] PHP 공지 : 정의되지 않은 인덱스 : 라인 (70)

[17 월에 /home/domain/public_html/contact.php의 이름 -2016 17:05:20 Etc/GMT] PHP 알림 : 정의되지 않은 색인 : /home/domain/public_html/contact.php 온라인 주소 76

[17-6 월 -2016 17:05:20] 기타/GMT ] PHP 알림 : 정의되지 않은 색인 : /home/domain/public_html/contact.php 온라인에있는 메시지

이 문제를 해결하기 위해 ror 변수 ($ name, $ email, $ message)를 null로 설정하면 오류는 더 이상 발생하지 않지만 문의 양식은 작동하지 않습니다.

도와주세요! 왜이 문제가 발생하는지 모르겠습니다.

<?php 

if (isset($_POST["submit"])) { 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 
    $human = intval($_POST['human']); 
    $to = '[email protected]'; 
    $subject = 'Contact Form'; 

    $header = "From:[email protected] \r\n"; 
    $header = "Cc:[email protected] \r\n"; 
    $header .= "MIME-Version: 1.0\r\n"; 
    $header .= "Content-type: text/html\r\n"; 

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

    if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
     $errEmail = 'Please enter a valid email address'; 
    } 

    if (!$_POST['message']) { 
     $errMessage = 'Please enter your message'; 
    } 

    if ($human !== 2) { 
     $errHuman = 'Your anti-spam is incorrect'; 
    } 

    if (!$errName && !$errEmail && !$errMessage && !$errHuman) { 
     if (mail($to, $subject, $body, $header)) { 
      $result='Thank You! Your message will be replied soon!'; 
     } else { 
      $result='Sorry there was an error sending your message.'; 
     } 
    } 
} 
?> 
     <form class="col l12" method="post" action="contact.php"> 
        <input id="name" name="name" type="text" class="validate" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
        <?php echo "<p class='red-text'>$errName</p>";?> 
        <label for="name">Name</label> 

        <input id="email" name="email" type="email" class="validate" value="<?php echo htmlspecialchars($_POST['email']); ?>"> 
        <?php echo "<p class='red-text'>$errEmail</p>";?> 
        <label for="email">Email</label> 

        <textarea name="message" class="materialize-textarea"><?php echo htmlspecialchars($_POST['message']);?></textarea> 
        <?php echo "<p class='red-text'>$errMessage</p>";?> 
        <label for="message">Message</label> 

        <label for="human"><strong>AntiSPAM Check:</strong> 5 - 3 = ?</label> 
        <input id="human" name="human" type="text" class="validate"> 
        <?php echo "<p class='red-text'>$errHuman</p>";?> 

         <p class="left-align"><button class="blue darken-1 btn-large waves-effect waves-light" id="submit" type="submit" style="font-weight:500;" name="submit">Send</button> 
         <?php echo $result; ?> 
     </form> 
+0

@ Rizier123이 오류 태그는 ​​다른 스레드에서 언급 한 변경 사항을 구현했지만 중복 된 것처럼 보일 수 있지만 문제를 해결하지는 못합니다. 동일한 "php notice"태그 아래에 표시되어 있지만이 문제는 고유합니다. – Swayam

답변

0

이러한 오류는 $_POST 배열 name 또는 email 또는 message이 없음을 말하고있다. 누군가 빈 양식을 제출했습니다.

이제 스크립트에서 누락 된 값을 확인하지만 이미 누락 된 배열 값에 액세스하려고 시도 할 때까지 확인하지 않습니다. 처음 실행되도록

가장 좋은 점은 상단에 ... ... 당신의 유효성 검사 코드를 이동

if (!$_POST['name']) { 
    ... 

될 것이다. 그런 다음 확신하는 경우에만 $name = $_POST['name'];을 수행하십시오.

+0

변경 사항을 적용했지만 페이지를 새로 고치거나로드 할 때 오류가 나타나는 것으로 보입니다. 그러나 당신이 언급 한 변경 사항을 구현 한 후에 양식을 제출 한 후에 생성 된 오류는 없지만 양식은 여전히 ​​작동하지 않습니다. ( – Swayam

+0

@Swayam 그럼 오류에 관한 질문이었고 그 질문에 답했습니다. 페이지가 새로 고쳐질 때 오류가 나타나면 그 시점에 양식 데이터가 제출되지 않습니다! – Here2Help

+0

@Swayam "여전히 작동하지 않습니다."라는 의미가 확실하지 않습니다. 이제 다른 오류가 발생하거나 이메일을 보내면 완전히 새로운 문제가됩니다. 문제 해결 및 로깅 추가를 수행하고 문제에 대한 구체적인 정보를 제공 할 때 새로운 질문을 게시하고 시도한 내용을 보여줄 수 있습니다. – Here2Help