2013-12-19 2 views
0

누군가 제 코드에 어떤 문제가 있는지 말해주십시오. 오류가 무엇인지 알아낼 수 없습니다.html 및 php 문의 양식 문제

문의 양식

<form action="mail.php" method="POST"> 
       <p>Name</p> <input type="text" name="name"> 
       <p>Email</p> <input type="text" name="email"> 
       <p>Phone</p> <input type="text" name="telephone"> 

       <p>Request Phone Call:</p> 
       Yes:<input type="checkbox" value="Yes" name="call"> 
       No:<input type="checkbox" value="No" name="call"><br /> 

       <p>Priority</p> 
       <select name="priority" size="1"> 
        <option value="Low">Low</option> 
        <option value="Normal">Normal</option> 
        <option value="High">High</option> 
        <option value="Emergency">Emergency</option> 
       </select> 
       <br /> 

       <p>Type</p> 
       <select name="type" size="1"> 
        <option value="update">Website Update</option> 
        <option value="change">Information Change</option> 
        <option value="addition">Information Addition</option> 
        <option value="new">General Enquiries</option> 
       </select> 
       <br /> 

       <p>Message</p><textarea name="message" rows="10" cols="40"></textarea><br /> 
       <input type="submit" value="Send" class="button"/><input type="reset" value="Clear" class="button"/> 
      </form> 

mail.php

<?php 

if(isset($_POST['email'])) { 

$email_to = "[email protected]"; 
$email_subject = "Tip Top Music"; 

function died($error) { 

    // Error codes 
    echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
    echo "These errors appear below.<br /><br />"; 
    echo $error."<br /><br />"; 
    echo "Please go back and fix these errors.<br /><br />"; 
    die(); 

} 

// Required fields 
if(!isset($_POST['name']) || 
    !isset($_POST['email']) || 
    !isset($_POST['message'])) { 

    died('Required Fields are not complete');   
} 

$name = $_POST['name']; // required 
$email_from = $_POST['email']; // required 
$telephone = $_POST['telephone']; // not required 
if(!isset($_POST['call'])) { 
$call = "No"; // if checkbox was left unchecked. Default is No 
} 
else { 
    $call = ($_POST['call']) 
} 
$priority = $_POST['priority']; // Will already have default value 
$type = $_POST['type']; // Will already have default value 
$message = $_POST['message']; // required 
$error_message = ""; 

$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 

if(!preg_match($email_exp,$email_from)) { 
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
} 

$string_exp = "/^[A-Za-z .'-]+$/"; 

if(!preg_match($string_exp,$name)) { 
    $error_message .= 'The Name you entered does not appear to be valid.<br />'; 
} 

if(strlen($message) < 2) { 
    $error_message .= 'The Comments you entered do not appear to be valid.<br />'; 
} 

if(strlen($error_message) > 0) { 
    died($error_message); 
} 

$email_message = "Form details below.\n\n"; 

function clean_string($string) { 
    $bad = array("content-type","bcc:","to:","cc:","href"); 
    return str_replace($bad,"",$string); 
} 

$email_message .= "Name: ".clean_string($name)."\n"; 
$email_message .= "Email: ".clean_string($email_from)."\n"; 
$email_message .= "Request Callback: ".($call)."\n"; 
$email_message .= "Telephone: ".clean_string($telephone)."\n"; 
$email_message .= "Priority: ".($priority)."\n"; 
$email_message .= "Type: ".($type)."\n"; 
$email_message .= "Message: ".clean_string($message)."\n"; 

// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

?> 

<!-- Message success --> 

Thank you for contacting us. We will be in touch with you very soon. 

<?php 


} 

?> 

내가 정의되지 않은 인덱스 호출 = "아니오"전화 $를 가리키는 얻을; 선. 그러나 내가 빈 양식을 게시했기 때문에 스크립트가 전혀 실행되지 않아야합니까 ?? 입력 필드를 에코 할 때 공백이지만 IF 문을 넣으면 설정되어 있는지 (isset) 설정되어있는 것처럼 명령문에 들어갑니다. 빈 입력을 확인하기 위해 isset 이외의 것을 사용해야합니까? 이것은 대개 어떻게 작동합니까? 지금은 왜 그렇게 혼란 스럽습니까?

+0

@vinodadhikary 무엇을 의미합니까? 죽었어 거기에있는 함수의 이름이다 – ToniHopkins

+0

죄송합니다. – vee

+1

양식 정보 : '요청 전화 통화'부분은 예/아니오 질문입니다. 하나의 체크 박스 또는 두 개의 라디오 버튼을 사용하십시오. 두 개의 확인란을 사용하지 마십시오. – Theox

답변

1

$_POST['call']

if(!isset($_POST['call'])) { 
$call = "No"; // if checkbox was left unchecked. Default is No 
} 
else { 
    $call = $_POST['call']; // Missing semicolon here 
} 
+0

그러나 입력이 설정되었다고 생각하는 문제가 여전히 있지만 컴파일 오류가 수정되었습니다. 빈 폼을 제출 했음에도 불구하고 여전히 코드를 실행하고 있습니까? – ToniHopkins

+0

사망 한 것은 추가 주석을 추가하여 스크립트를 종료하는 기능입니다. 내가 죽을 줄을 바꾸더라도 결코 그 if 진술에 들어 가지 않기 때문에 결코 뛰지 않는다. 내 코드는 변수 (이름, 전자 메일 및 메시지)가 설정되어있는 것으로보고 있지만 이름, 전자 메일 및 메시지가 유효하지 않다는 오류 메시지를 나타내는 코드를 계속 사용합니다. – ToniHopkins

+0

예 해당 업데이트를 제거했습니다. – Roopendra

3

귀하의 코드에 세미콜론 누락은 $ _POST [ '호출']에 실종 세미콜론을 추가 한 후 제대로 작동;

올바른 하나는 $ call = ($ _POST [ 'call']);

빈 양식을 제출할 때 오류 메시지가 표시됩니다. 그래서 나는 유효성 검사가 잘 동작하고 있다고 생각한다.

+0

완전히 빈 폼을 제출하면 스크립트도 실행해서는 안됩니다. 먼저 전자 메일 필드가 설정되었는지 확인합니다. 그렇지 않으면 다음 줄을 실행해서는 안됩니다. 대신 이름, 전자 메일 및 메시지의 빈 입력을 확인하는 코드를 무시하고 설정 한 것으로 간주하므로이 코드는 무시됩니다. 예, 이름, 전자 메일 및 메시지가 유효하지 않지만 그것이 코드에서 그 코드를 가져올 수 없다는 오류를 제공합니다. – ToniHopkins