2014-01-12 5 views
0

저는 PHP를 처음 사용하고 이메일 주소의 유효성을 올바르게 검사하고 데이터가 텍스트 상자에 입력되었는지 확인하려고했습니다. 나는 정말로 필요한 것을 발견 할 수 없으며 php.net의 예제를 따라 가면서 나를 원형으로 보낸다. 어떤 도움이라도 대단히 감사하겠습니다! 또한이 양식으로 올바른 방향으로 향하고 있습니까? 양식이 작동하면 드롭 다운 상자에서 이메일 주소 중 하나를 선택하는 방식으로 이메일이 전송됩니다.PHP 문의 양식 - 확인 및

-UPDATE- 필자의 스크립트 중 일부를 다시 작성했습니다 ... 누군가가 체크 아웃 할 수 있습니까? 지금 더 많은 문제가 있습니다. 양식에 아무 것도 입력되지 않은 경우에도 이메일을 보내며, 그렇게해도 입력 한 내용은 모두 발송합니다. "전자 메일"테스트 예를 통해 예제를 사용할 수 있습니다.

<?php 

//Sainitize function 
function sanitizeString($value){ 
$value = strip_tags($value); 
$value = trim($value); 
$value = escapeshellcmd($value); 
$value = htmlentities($value); 

return $value; 
} 

$send = $_POST[send]; 

//Email validation - does not work by the way 
if (filter_var($from, FILTER_VALIDATE_EMAIL)) { 
$email_error = true; 
$error_message[] = "Please use a valid email format: [email protected]"; 
}  

if($send == 1){$email_sent = true; $step_1 = "complete";} 
else{$email_sent = false; $step_1 = "complete";} 

if($email_sent === true) { 

$from = sanitizeString($_POST['from']); 
$to = sanitizeString($_POST['to']); 
$name = sanitizeString($_POST['name']); 
$title = sanitizeString($_POST['title']); 
$company = sanitizeString($_POST['company']); 
$phone = sanitizeString($_POST['phone']); 
$subject = sanitizeString($_POST['subject']); 
$message = sanitizeString($_POST['message']); 

// define variables and initialize with empty values 
$nameErr = $addressErr = $emailErr = $messageErr = $phoneErr = ""; 
$name = $address = $email = $message = $phone = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
if (empty($_POST["name"])) { 

    $nameErr = "Please enter your name."; 
} 
else { 
    $name = $_POST["name"]; 
} 

if (empty($_POST["email"])) { 
    $emailErr = "Please enter your email."; 
} 
else { 
    $email = $_POST["email"]; 
} 
if (empty($_POST["phone"])) { 
    $phoneErr = "Please enter a phone number."; 
} 
else { 
    $phone = $_POST["phone"]; 
} 
if (empty($_POST["message"])) { 
    $messageErr = "Cannot leave message box blank."; 
} 
else { 
    $message = $_POST["message"]; 
} 

} 

//select the correct to address 
switch ($to) { 
case "1": 
$to = "[email protected]"; 
break; 
case "2": 
$to = "[email protected]"; 
break; 
default: 
$to = "[email protected]"; 
break;} 

if($message_error !== true && $email_error !== true){ 
$email_headers = "From:".$from."\nMIME-Version: 1.0 \nContent-type: text/html; charset=iso-8859-1"; 

$message_send = "<h3>".$name."<br>".$title."<br>".$company."<br>".$phone."<br>".$from."</h3><hr><h4>".$subject."</h4>".$message; 

if (mail($to, $subject, $message_send, $email_headers)) {$error_message = "Thank you, your email is on the way!";} 
else {$error_message = "There seems to be a problem!";}} 

} 

?> 
<body> 

<form action="<?php ($_SERVER["PHP_SELF"]);?>" method="post"> 
<table style="border-collapse:collapse; border-spacing:0" > 
<tr> 
<td>Name:</td> 
<td><input name="name" placeholder="Name*" type="text" class="text"/> 
     <span class="error"><?php echo $nameErr;?></span></td> 
</tr> 
<tr> 
<td>Title:</td> 
<td><input type="text" placeholder="Title" name="title" size="50"/></td> 
</tr> 
<tr> 
<td>Company:</td> 
<td><input type="text" placeholder="Company" name="company" size="50" /></td> 
</tr> 
<tr> 
<td>Phone:</td> 
<td> 
    <input name="phone" placeholder="Phone*" type="tel" size="10" maxlength="10" value="<?php echo htmlspecialchars($phone);?>"/> 
    <span class="style1">Example: 1234567890</span> <span class="error" style="color:#990000"><?php echo $phoneErr;?></span></td> 
</tr> 
<tr> 
<td>Email:</td> 
<td><input name="from" placeholder="Email*" type="email" class="text" value="<?php echo htmlspecialchars($email);?>"> 
    <span class="error"><?php echo $emailErr;?></span></td> 
</tr> 
<tr> 
<td>To:</td> 
<td><select name="to" size="1"> 
    <option value="1">Contact 1</option> 
    <option value="2">Contact 2</option> 
    </select></td> 
</tr> 
<tr> 
<td>Subject:</td> 
<td><input type="text" name="subject" placeholder="Subject" size="50" /></td> 
</tr> 
<tr> 
<td valign="top">Detail:</td> 
<td colspan="2"><textarea cols="50" rows="4" name="message" placeholder="Type your message here."></textarea></td> 
</tr> 
<tr> 
<td colspan="2" style="text-align:center;"><input type="hidden" name="send" value="1" /><input type="submit" value="Send" name="email_1" /></td> 
</tr> 

</table > 
</form> 
+0

중복 가능성 (http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address) – Beat

+0

전자 메일 주소의 유효성을 검사하여 [email protected] 형식으로 표시하는 방법을 알려줍니다. 그렇지만 다른 필드와의 유효성 검사가 필요합니까? – TAG

+0

확인 I는, 사용 입력 필드를 확인하는 방법을 발견 ($ _SERVER [ "REQUEST_METHOD"] == "POST") { 경우 (빈 ($ _ POST [ "이름"])) { $ nameErr 경우 = "이름을 입력하십시오."; } else { $ name = $ _POST [ "name"]; } 다음은 이름 입력 필드입니다. 위의 스크립트를 보내시겠습니까? – TAG

답변

0

전자 메일 확인을 위해 당신은 FILTER_VALIDATE_EMAIL 필터 속성 filter_var 기능을 사용할 수 있습니다. Here은 입력 유효성 검사에 대한 멋진 글입니다. PHP 매뉴얼에서 시도해보십시오.

var_dump(filter_var('[email protected]', FILTER_VALIDATE_EMAIL)); 

코드를 단순화 할 수 있습니다. 다소 지저분합니다. switch 전자 메일 주소는별로 좋지 않습니다. 다음과 같이 양식에 값을 추가 할 수 있습니다.

<select name="to" size="1"> 
    <option value="[email protected]">Contact1</option> 
    <option value="[email protected]">Contact2</option> 
</select> 

더 이상 사용되지 않는 기능 mysql_escape_string도 사용하고 있습니다. ltrimrtrimtrim 기능으로 대체 될 수 있습니다.

UPDATE

코드에서 실수 여전히 많은있다. 오류보고를 표시 했습니까? 이메일 교환은 분명히 당신의 문제에 대한 좋은 해결책이 아닙니다. 리팩토링 된 코드를 살펴보면 다음과 같이 작동합니다.

<?php 

//Sainitize function 
function sanitizeString($value) 
{ 
    $value = strip_tags($value); 
    $value = trim($value); 
    $value = escapeshellcmd($value); 
    $value = htmlentities($value); 

    return $value; 
} 

$errorMessage = array(); 
$receivers = array(
    1 => '[email protected]', 
    2 => '[email protected]' 
); 

if(isset($_POST['form'])) 
{ 
    $formData = $_POST['form']; 

    if (filter_var($formData['from'], FILTER_VALIDATE_EMAIL)) { 
     $from = sanitizeString($formData['from']); 
    } 
    else 
    { 
     $errorMessage[] = "Please use a valid email format: [email protected]"; 
    } 

    if(array_key_exists($formData['to'], $receivers)) 
    { 
     $to = $receivers[$formData['to']]; 
    } 
    else 
    { 
     $to = '[email protected]'; 
    } 

    if(strlen($formData['name']) > 0) 
    { 
     $name = sanitizeString($formData['name']); 
    } 
    else 
    { 
     $errorMessage[] = "Please enter your name."; 
    } 

    if(strlen($formData['title']) > 0) 
    { 
     $title = sanitizeString($formData['title']); 
    } 
    else 
    { 
     $title = ''; 
    } 

    if(strlen($formData['company']) > 0) 
    { 
     $company = sanitizeString($formData['company']); 
    } 
    else 
    { 
     $company = ''; 
    } 

    if(strlen($formData['phone']) > 0) 
    { 
     $phone = sanitizeString($formData['phone']); 
    } 
    else 
    { 
     $errorMessage[] = "Please enter a phone number."; 
    } 

    if(strlen($formData['subject']) > 0) 
    { 
     $subject = sanitizeString($formData['subject']); 
    } 
    else 
    { 
     $subject = ''; 
    } 

    if(strlen($formData['message']) > 0) 
    { 
     $message = sanitizeString($formData['message']); 
    } 
    else 
    { 
     $errorMessage[] = 'Cannot leave message box blank.'; 
    } 

    if (empty($errorMessage) && $formData['spam'] == 9) 
    { 
     $email_headers = "From:" . $from . "\nMIME-Version: 1.0 \nContent-type: text/html; charset=iso-8859-1"; 
     $message_send = "<h3>" . $name . "<br>" . $title . "<br>" . $company . "<br>" . $phone . "<br>" . $from . "</h3><hr><h4>" . $subject . "</h4>" . $message; 

     if (mail($to, $subject, $message_send, $email_headers)) 
     { 
      $errorMessage[] = 'Thank you, your email is on the way!'; 
     } 
     else 
     { 
      $errorMessage[] = 'There seems to be a problem!'; 
     } 
    } 
} 
?> 
<body> 

<?php if(!empty($errorMessage)): ?> 
    <div style="border: 2px solid red"> 
     <ul> 
      <?php foreach ($errorMessage as $error): ?> 
       <li><?php echo $error; ?></li> 
      <?php endforeach; ?> 
     </ul> 
    </div> 
<?php endif; ?> 

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <table style="border-collapse:collapse; border-spacing:0"> 
     <tr> 
      <td>Name:</td> 
      <td> 
       <input name="form[name]" placeholder="Name*" type="text" class="text" value="<?php echo isset($name) ? $name : ''; ?>"/> 
      </td> 
     </tr> 
     <tr> 
      <td>Title:</td> 
      <td> 
       <input type="text" placeholder="Title" name="form[title]" size="50" value="<?php echo isset($title) ? $title : ''; ?>"/> 
      </td> 
     </tr> 
     <tr> 
      <td>Company:</td> 
      <td> 
       <input type="text" placeholder="Company" name="form[company]" size="50" value="<?php echo isset($company) ? $company : ''; ?>"/> 
      </td> 
     </tr> 
     <tr> 
      <td>Phone:</td> 
      <td> 
       <input name="form[phone]" placeholder="Phone*" type="tel" size="10" maxlength="10" value="<?php echo isset($phone) ? $phone : ''; ?>"/> 
       <span class="style1">Example: 1234567890</span> 
      </td> 
     </tr> 
     <tr> 
      <td>Email:</td> 
      <td> 
       <input name="form[from]" placeholder="Email*" type="email" class="text" value="<?php echo isset($from) ? $from : ''; ?>"> 
      </td> 
     </tr> 
     <tr> 
      <td>To:</td> 
      <td> 
       <select name="form[to]" size="1"> 
        <option value="1">Contact 1</option> 
        <option value="2">Contact 2</option> 
       </select> 
      </td> 
     </tr> 
     <tr> 
      <td>Subject:</td> 
      <td> 
       <input type="text" name="form[subject]" placeholder="Subject" size="50" value="<?php echo isset($subject) ? $subject : ''; ?>"/> 
      </td> 
     </tr> 
     <tr> 
      <td valign="top">Detail:</td> 
      <td colspan="2"> 
       <textarea cols="50" rows="4" name="form[message]" placeholder="Type your message here."><?php echo isset($message) ? $message : ''; ?></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td></td> 
      <td> 
       3x3 = <input type="text" value="" name="form[spam]"/> 
       <input type="submit" value="Send" /> 
      </td> 
     </tr> 
    </table> 
</form> 
+0

오 옵션에서 값을 선언 할 수있는 선택 항목이 표시됩니다. 그러면 큰 도움이됩니다. 예, 일부 PHP 스크립트를 xampp에서 실행할 때 더 이상 사용되지 않는 오류가 있다는 것을 알게되었습니다. 거기에 올바른 코드가 있는지 확인하려고했습니다. 내가 말했듯이, 나는 PHP를 가르치려고 노력하고 있었고 포럼은 훌륭했지만 일부 예제는 구식이다. : – TAG

+0

사용자가 선택할 수있는 여러 주소 (다른 사람/부서)가 있기 때문에 전자 메일 주소로 스위치를 사용하기로 결정했습니다. 소스/HTML에서 주소를 표시하고 싶습니다. – TAG

+0

완벽하게 작동합니다. 문제없이 내 사이트에 추가 할 수 있습니다. 한 번 생각해 보았습니다. PHP를 고르면 어둠 속에서 다시 보게 될 것입니다 : (그곳에는 뭔가 많은 것을하고 거기에 많은 예제들이있는 것처럼 보입니다. 책들은 도움이되지 않았습니다. 그래서 내가 재 작업 한 대본을 대부분 가지고 있습니다 ... – TAG

0

나는 이것을 php.net에서 발견했다.

if (filter_var($from, FILTER_VALIDATE_EMAIL)) { 
    $email_error = true; 
    $error_message[] = "Please use a valid email format: [email protected]"; 
} 
+0

아니요, 전자 메일 필드의 유효성을 검사하지 않고 전자 메일을 보냈습니다. – TAG

+0

감사합니다. 필드에 무엇이 들어 있는지에 관계없이 양식에서 전자 메일을 보내지 못하게하는 데 여전히 문제가 있습니다. – TAG

0

필터 var가 작동합니다. 다음 코드를 사용해보십시오. [이메일 주소를 검증하기 일반 식을 사용하여]의

<?php 
    $emailError = array(); 

    if(isset($_POST["send"])){ 

    $from = $_POST["from"]; 

    if (!filter_var($from, FILTER_VALIDATE_EMAIL)) { 
    $emailError[] = "Please use a valid email format: [email protected]\n\r"; 
    } 
    else { 
    echo $from . " is a valid email.\n\r"; 
    } 

    if ($emailError){ 
    foreach ($emailError as $key){ 
    echo $key; 
    } 
    } 

} else { 

?> 

    <form action="<?php ($_SERVER["PHP_SELF"]);?>" method="post"> 
    <table> 
    <tr> 
    <td>Email:</td> 
    <td> 
    <input name="from" placeholder="Email*" type="email" class="text" value=""> 
    </td> 
    </tr> 
    </table> 
    <input type="submit" value="Send" name="send" /> 
    </form> 

<?php 
} 
?>