2017-12-01 1 views
0

저는 PHP를 처음 사용하고 문의 양식에 문제가 있습니다. 내 양식에서 "제출"을 누르면 다른 사이트로 건너 뜁니다 (어딘가, 어디서 왜 일어나는 지 모릅니다). PHP 코드는 조건을 검사하지 않습니다. 더 중요한 것은, "인간 인식기"에 잘못된 대답을 입력해도 메시지는 계속 보내고 이메일로 보내집니다. som 선언문이 잘못되었거나 잘못된 구문을 찾고 있었지만 모두 좋은 것으로 보입니다. 나는 또한 내 contact.php 그것이 (조건을 확인하지 않고) 이메일을 보내는 경우 제대로 응답한다고 가정합니다. 연결되어 있는지 모르겠지만 내 모달 창을 닫고 싶지 않습니다 (다른 양식에서는 withoud "action = contact.php"필드가있을 때 다른 사이트에서 동일한 코드가 제대로 작동합니다).PHP 문의 양식이 제대로 응답하지 않습니다.

내 주요 head.php :

<!--HEAD--> 
<head> 
    <title>X</title> 

<!--META--> 
    <meta http-equiv="Content-Type" content="text/html"; charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="author" content="SitePoint"> 

<!--CSS--> 
    <link id="theme" rel="stylesheet" href="css/light.css"> 
    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 


<!-- Font Awesome --> 
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> 

</head> 
<!--END OF HEAD--> 
    <body> 
     <script src="https://code.jquery.com/jquery-3.2.1.js"></script> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script> 
     <script src="js/dropdown.js"></script> 
     <script src="js/scrolling-nav.js"></script> 
     <script src="js/theme-switch.js"></script> 
     <script src="js/nav-position.js"></script> 

      <nav id="mainNav"> 
       <bar> 
        <i id="hamburger" class="fa fa-bars" aria-hidden="true"></i> 
       </bar> 
       <ul id="menu"> 
        <li><a href="#main">Main</a></li> 
        <li><a href="#generator">Generator</a></li> 
        <li><a href="#about">About</a></li> 
        <li><a href="#contact">Contact</a></li> 
       </ul> 
      </nav> 

     <section id = "main" > 
     <div class = "content"> 
     <h1>Hello!</h1> 
     <p>:)</p> 
     </div></section> 

     <section id = "generator"> 
     <div class = "content"> 
     <h1>Generator</h1> 
      <form id="generator-form" ="form-horizontal" role="form" method="post" action="generator.php"> 
       <div class="form-group"> 
        <label for="name" class="col-sm-2 control-label">Name</label> 
        <div class="col-sm-10"> 
         <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
         <?php echo "<p class='text-danger'>$errName</p>";?> 
        </div> 
       </div> 
     <div class="form-group"> 
        <label for="idCardNumber" class="col-sm-2 control-label">Name</label> 
        <div class="col-sm-10"> 
         <input type="text" class="form-control" id="idCardNumber" name="idCardNumber" placeholder="Student ID Card Number" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
         <?php echo "<p class='text-danger'>$errName</p>";?> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-sm-10 col-sm-offset-2"> 
         <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-sm-10 col-sm-offset-2"> 
         <?php echo $result; ?> 
        </div> 
       </div> 
      </form> 
     </div></section> 

     <section id = "about"> 
     <div class = "content"> 
     <h1>About</h1> 
     <p></p> 
     </div></section> 

     <section id="contact"> 
      <div class="content"> 
       <h1>Contact</h1> 
       <p><a class="btn btn-default btn-lg" href="#contact-form">Contact Us</a></p> 
       <p><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d5122.204450340393!2d19.91387757798398!3d50.065647167696376!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47165ba756b59b21%3A0xb20c8dba21b317d1!2sAkademia+G%C3%B3rniczo-Hutnicza+im.+Stanis%C5%82awa+Staszica+w+Krakowie!5e0!3m2!1spl!2spl!4v1511628584066" width="500rem" height="500rem" frameborder="0" style="border:0" allowfullscreen></iframe></p> 
      </div> 
     </section> 

     <footer> 
      <label class="switch"> 
     <input type="checkbox" onchange=" switchTheme(this)"> 
     <span class="slider"></span> 
    </label> 
      <p>Copyright©2017 <a href=""></a> for <a href=""> </a></p> 
     </footer> 

    <!--SIGN UP--> 
     <div id="contact-form" class="modal-window"> 
      <div> 
       <a href="#modal-close" title="Close" class="modal-close">Close</a> 
       <form action="contact.php"> 
        <div class="form-group"> 
         <label for="name">Name</label> 
         <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
         <p class="text-danger"><?php echo $errName; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="email">Email address</label> 
         <input type="email" class="form-control" id="email" name="email" placeholder="[email protected]" value="<?php echo htmlspecialchars($_POST['email']); ?>"> 
         <p class="text-danger"><?php echo $errEmail; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="message">Message</label> 
         <textarea class="form-control" rows="4" name="message" value="<?php echo htmlspecialchars($_POST['message']);?>"></textarea> 
         <p class="text-danger"><?php echo $errMessage; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="human">1 + 1 = ?</label> 
         <input type="text" class="form-control" id="human" name="human" pattern=".{1,}" required title="At least 1 character required" placeholder="Your Answer"> 
         <p class="text-danger"><?php echo $errHuman; ?></p> 
        </div> 
        <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary btn-lg"></input> 
        <div class="form-group"> 
          <?php echo $result; ?> 
        </div> 
       </form> 
      </div> 
     </div> 
     <!--END SIGN UP--> 

     <!--CONTACT FORM--> 
     <div id="contact-form" class="modal-window"> 
       <a title="Close" class="modal-close">Close</a> 
       <form id="contactForm" role="form" method="post" action="contact.php"> 
        <div class="form-group"> 
         <label for="name">Name</label> 
         <input type="text" class="form-control" id="name" name="name" pattern=".{3,}" required title="At least 3 characters required" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 

        </div> 
        <div class="form-group"> 
         <label for="email">Email address</label> 
         <input type="email" class="form-control" id="email" name="email" placeholder="[email protected]" pattern=".{3,}" required title="At least 3 characters required" value="<?php echo htmlspecialchars($_POST['email']); ?>"> 
         <?php echo "<p class='text-danger'>$errEmail</p>";?> 
        </div> 
        <div class="form-group"> 
         <label for="message">Message</label> 
         <textarea class="form-control" rows="4" pattern=".{3,}" required title="At least 3 characters required" name="message"> 
          <?php echo htmlspecialchars($_POST['message']);?> 
         </textarea> 
          <?php echo "<p class='text-danger'>$errMessage</p>";?> 
        </div> 
        <div class="form-group"> 
         <label for="human">1 + 1 = ?</label> 
         <input type="text" class="form-control" id="human" name="human" pattern=".{1,}" required title="At least 1 character required" placeholder="Your Answer"> 
         <p class='text-danger'>$errHuman</p> 
        </div> 
        <input name="submit" type="submit" value="Send" class="btn btn-primary btn-lg"> 
        <div class="form-group"> 
         <?php echo $result; ?> 
        </div> 
       </form> 
     </div> 
     <!--CONTACT FORM--> 

    </body> 
</html> 

내 contact.php 코드 :

<?php 
    if (isset($_POST["submit"])) { 
     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $message = $_POST['message']; 
     $human = intval($_POST['human']); 
     $from = 'Generator Contact'; 
     $to = '[email protected]'; 
     $subject = 'Message from AGH Generator Form'; 

     $body ="From: $name\n E-Mail: $email\n Message:\n $message"; 

     //CHECK NAME 
     if (!$name || empty($name)) { 
      $errName = 'Please enter your name'; 
     } 

     //CHECK EMAIL 
     if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) { 
      $errEmail = 'Please enter a valid email address'; 
     } 

     //CHECK MESSAGE 
     if (!$message || empty($message)) { 
      $errMessage = 'Please enter your message'; 
     } 

     //CHECK IF USER IS NOT A BOT 
     if ($human !== 2 || $human !=2) { 
      $errHuman = 'Please... proof that you are not a bot :>'; 
     } 

     //SEND THE EMAIL IF THERE ARE NO EXISTING ERRORS 
     if (!empty($errName) && !empty($errEmail) && !empty($errMessage) && !empty($errHuman)) { 
      if (mail ($to, $subject, $body, $from)) { 
       $result='<div class="alert alert-success">Thank You! We will be in touch</div>'; 
      } else { 
       $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>'; 
      } 
      header("Location: home.php"); 
     } 
    } 
?> 

편집 : 나는 내 PHP 코드 개선을했습니다 (행 오류 논리적 문제는 가 있었다 필드는 비어 있습니다 : was -> if (! empty ($ errName)) 그러나 -> if (empty ($ errName)). 그러나 여전히 문제가 발생했습니다. 문의 양식 제출 후 같은 페이지에 있지만 제출 버튼을 클릭하면 아무 것도 표시되지 않습니다 (오류 없음). 이 표시되면 페이지는 새로 고쳐지고 양식이 다시 열립니다. 지금 뭐가 잘못 됐어? NEW CODE :

<!DOCTYPE HTML> 

<html lang="en"> 

<!--HEAD--> 
<head> 
    <title>AGH Application for entry with ECTS deficit generator</title> 

<!--META--> 
    <meta http-equiv="Content-Type" content="text/html"; charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="author" content="SitePoint"> 
    <meta name="Description" content="It is simple PDF generator for sing with lack of ECTS for another term" /> 
    <meta name="Keywords" content="ECTS, deficit, deficyt, Poland, Cracow, generator, application, form, pdf, AGH, UST, Akademia, Górniczko, Hutnicza, University, S cience, Technology, Polska, Kraków, " /> 

<!--CSS--> 
    <link id="theme" rel="stylesheet" href="css/dark.css"> 
    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 


<!-- Font Awesome --> 
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> 

</head> 
<!--END OF HEAD--> 
    <body> 
     <script src="https://code.jquery.com/jquery-3.2.1.js"></script> 
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script> 
     <script src="js/dropdown.js"></script> 
     <script src="js/scrolling-nav.js"></script> 
     <script src="js/theme-switch.js"></script> 
     <script src="js/nav-position.js"></script> 

      <nav id="mainNav"> 
       <bar> 
        <i id="hamburger" class="fa fa-bars" aria-hidden="true"></i> 
       </bar> 
       <ul id="menu"> 
        <li><a href="#main" class="nav">Main</a></li> 
        <li><a href="#generator" class="nav">Generator</a></li> 
        <li><a href="#about" class="nav">About</a></li> 
        <li><a href="#contact" class="nav">Contact</a></li> 
       </ul> 
      </nav> 

     <section id = "main" > 
     <div class = "content"> 
     <h1>Hello!</h1> 
     <p>Welocome to The AGH Application for entry with ECTS deficit generator website. We hope that you use it just for fun :)</p> 
     </div></section> 

     <section id = "generator"> 
     <div class = "content"> 
     <h1>Generator</h1> 

     </div></section> 

     <section id = "about"> 
     <div class = "content"> 
     <h1>About</h1> 
     <p>This webapge was created as a project for the Web Technologies. The main reason why it exists is that very common among Students is that they want to apply for entry on another term with ECTS deficit. This site will help students and AGH employees by generating PDF application. We hope that everything at AGH will be fast and growing in the future. We want to make our students life BETTER! </p> 
     </div></section> 

     <section id="contact"> 
      <div class="content"> 
       <h1>Contact</h1> 
       <p><a class="btn btn-default btn-lg" href="#contact-form">Contact Us</a></p> 
       <?php echo $result; ?> 
       <p><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d5122.204450340393!2d19.91387757798398!3d50.065647167696376!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47165ba756b59b21%3A0xb20c8dba21b317d1!2sAkademia+G%C3%B3rniczo-Hutnicza+im.+Stanis%C5%82awa+Staszica+w+Krakowie!5e0!3m2!1spl!2spl!4v1511628584066" width="500rem" height="500rem" frameborder="0" style="border:0" allowfullscreen></iframe></p> 
      </div> 
     </section> 


     <footer> 
      <label class="switch"> 
     <input type="checkbox" onchange=" switchTheme(this)"> 
     <span class="slider"></span> 
    </label> 
      <p>Copyright©2017 <a href="http://fb.com/marcinkaminskix">Marcin Kamiński</a> for <a href="agh.edu.pl">AGH </a></p> 
     </footer> 

    <!--SIGN UP--> 
     <?php 
     if (isset($_POST["send"])) { 
      $name = $_POST['name']; //Getting variable from form 
      $email = $_POST['email']; //Getting variable from form 
      $message = $_POST['message']; //Getting variable from form 
      $human = intval($_POST['human']); //Getting variable from form 
      $from = 'Generator Contact'; //Set sender 
      $to = '[email protected]'; //Where to send an email 
      $subject = 'Message from AGH Generator Form'; //Set the subject of email 
      $errName = $errEmail = $errMessage = $errHuman = ''; //Values of errors 
      $body ="From: $name\n E-Mail: $email\n Message:\n $message"; //Body of email 

      //CHECK NAME 
      if (empty($name)) { 
       $errName = 'Please enter your name'; 
      } 

      //CHECK EMAIL 
      if (!filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) { 
       $errEmail = 'Please enter a valid email address'; 
      } 

      //CHECK MESSAGE 
      if (empty($message)) { 
       $errMessage = 'Please enter your message'; 
      } 

      //CHECK IF USER IS NOT A BOT 
      if ($human !== 2 || $human !=2) { 
       $errHuman = 'Please... proof that you are not a bot :>'; 
      } 

      //SEND THE EMAIL IF THERE ARE NO EXISTING ERRORS 
      if (empty($errName) && empty($errEmail) && empty($errMessage) && empty($errHuman)) { 
       if (mail($to, $subject, $body, $from)) { 
        $result = '<div class="alert alert-success">Thank You! We will be in touch</div>'; 
       } 
       else { 
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>'; 
       } 
      } 
     } 
     ?> 

     <div id="contact-form" class="modal-window"> 
      <div> 
       <a href="#modal-close" title="Close" class="modal-close">Close</a> 
       <form id="contactForm" role="form" method="post"> 
        <div class="form-group"> 
         <label for="name">Name</label> 
         <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>"> 
         <p class="text-danger"><?php echo $errName; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="email">Email address</label> 
         <input type="email" class="form-control" id="email" name="email" placeholder="[email protected]" value="<?php echo htmlspecialchars($_POST['email']); ?>"> 
         <p class="text-danger"><?php echo $errEmail; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="message">Message</label> 
         <textarea class="form-control" rows="4" name="message" value="<?php echo htmlspecialchars($_POST['message']);?>"></textarea> 
         <p class="text-danger"><?php echo $errMessage; ?></p> 
        </div> 
        <div class="form-group"> 
         <label for="human">1 + 1 = ?</label> 
         <input type="text" class="form-control" id="human" name="human" placeholder="Your Answer"> 
         <p class="text-danger"><?php echo $errHuman; ?></p> 
        </div> 
        <button id="send" name="send" type="submit" value="Send" class="btn btn-default btn-lg">Send</button> 
       </form> 
      </div> 
     </div> 
     <!--END SIGN UP--> 

    </body> 
</html> 
+0

무엇 "다른 사이트"? 코드는 상대적인'contact.php' 페이지를 가리키고 있음을 나타냅니다. 네트워크 디버거 (Chrome 및 Firefox에 내장되어 있음)를 사용하여 요청을 볼 수 있습니까? – anthony

+0

이 닫는 문제는 js 스크립트의 내 잘못이었습니다. 하지만 난 여전히 내 PHP 연락처 양식에 문제가있어. 나는 갱신을했다. –

답변

0

문제는이 라인의 논리에가 :

if (!empty($errName) && !empty($errEmail) && !empty($errMessage) && !empty($errHuman)) { 

기본적으로이 모든 것이 잘못 인 경우, 이메일을 보내 말하고있다. 비어 있지 않은 검사는 오류가 있었음을 나타내며 변수는 이제 오류 문자열을 보유합니다.

대신, 그들은 여전히 ​​비어있는 경우 당신은 단지 빈 문자열로 변수를 생성하고 확인해야합니다

$errName = $errEmail = $errMessage = $errHuman = ''; 

// CHECK NAME... etc... all the checks 

if (empty($errName) && empty($errEmail) && empty($errMessage) && empty($errHuman)) { 

그러나 사용자에게 오류를 표시하지 않는, 당신은 종료하고 느슨한 변수들로 가득 차 있습니다. 나는 즉시이 후 헤더 함수를 호출하는 경우

$body = "From: $name\n E-Mail: $email\n Message:\n $message"; 

    $errors = []; 

    //CHECK NAME 
    if (!$name || empty($name)) { 
     $errors['name'] = 'Please enter your name'; 
    } 

    //CHECK EMAIL 
    if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) { 
     $errors['email'] = 'Please enter a valid email address'; 
    } 

    //etc... 

    if (empty($errors)) { 
     //send email 
    } else { 
     $result = '<div class="alert alert-danger">Sorry there was an error sending your message:<br>'; 
     foreach ($errors as $key => $error) { 
      $result .= $error . '<br>'; 
     } 
     $result .= '</div>'; 
    } 

그러나, 사용자가 오류를보고하거나 문제를 해결할 수있는 기회를 얻을 않을 것입니다 ... 오류의 배열을 사용하여 약간 다른 접근 방식을 권장합니다. 쿼리 문자열을 사용하여 head.php로 오류를 보내고 표시 할 수 있습니다.

(참고로, 형태의 작업이 해당 파일에 모든 POST 데이터를 전송하고, 자체에 대한 어떠한 조치도 지정, 다음 양식의 게시물이없는 경우.)

+0

그것은 논리적 인 문제를 해결했습니다. 그러나 나는 아직도 문제가있다. 게시물을 업데이트했습니다. –

관련 문제