2013-10-25 2 views
0

나는 특정 의사에게 전자 메일 주소를 선택하기위한 드롭 다운 메뉴가있는 문의 양식을 작성 중입니다. 나는 템플릿에서 일하고 있으며 PHP에 대한 많은 경험이 없습니다. 폼에 서버를 업로드 할 때 경고 : array_key_exists()의 매개 변수 개수가 잘못되었습니다. 문제를 정확히 알 수 없습니다.전자 메일을 변경하기위한 드롭 다운 메뉴가있는 PHP 문의 양식

<link href="css/contactform.css" rel="stylesheet" type="text/css" /> 
<?php 

// Set email variables 
$email_to = array('phys1' => '[email protected]', 'phys2' => '[email protected]'); 
if(array_key_exists($_POST['dropdown'])) 
{ 
$recipient = $emails[$_POST['dropdown']]; 
//send email to $recipient 
} 

$email_subject = 'Form submission'; 

// Set required fields 
$required_fields = array('fullname','email','comment'); 

// set error messages 
$error_messages = array(
'fullname' => 'Please enter a Name to proceed.', 
'email' => 'Please enter a valid Email Address to continue.', 
'comment' => 'Please enter your Message to continue.' 
); 

// Set form status 
$form_complete = FALSE; 

// configure validation array 
$validation = array(); 

// check form submittal 
if(!empty($_POST)) { 
// Sanitise POST array 
foreach($_POST as $key => $value) $_POST[$key] = remove_email_injection(trim($value)); 

// Loop into required fields and make sure they match our needs 
foreach($required_fields as $field) {  
    // the field has been submitted? 
    if(!array_key_exists($field, $_POST)) array_push($validation, $field); 

    // check there is information in the field? 
    if($_POST[$field] == '') array_push($validation, $field); 

    // validate the email address supplied 
    if($field == 'email') if(!validate_email_address($_POST[$field])) array_push($validation, $field); 
    } 

// basic validation result 
if(count($validation) == 0) { 
    // Prepare our content string 
    $email_content = 'New Website Comment: ' . "\n\n"; 

    // simple email content 
    foreach($_POST as $key => $value) { 
     if($key != 'submit') $email_content .= $key . ': ' . $value . "\n"; 
    } 

    // if validation passed ok then send the email 
    mail($email_to, $email_subject, $email_content); 

    // Update form switch 
    $form_complete = TRUE; 
} 
} 

function validate_email_address($email = FALSE) { 
return (preg_match('/^[^@\s][email protected]([-a-z0-9]+\.)+[a-z]{2,}$/i', $email))? TRUE : FALSE; 
} 

function remove_email_injection($field = FALSE) { 
    return (str_ireplace(array("\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:"), '', $field)); 
} 

?> 

<script type="text/javascript"> 
    var nameError = '<?php echo $error_messages['fullname']; ?>'; 
    var emailError = '<?php echo $error_messages['email']; ?>'; 
    var commentError = '<?php echo $error_messages['comment']; ?>'; 
</script> 

</head> 
<div id="formWrap"> 
<div id="form"> 
<?php if($form_complete === FALSE): ?> 
<form action="/contact.php" method="post" id="comments_form"> 
    <div class="row"> 
    <div class="label">Name</div> 
    <div class="input"> 
    <input type="text" id="fullname" class="detail" name="fullname" value="<?php echo isset($_POST['fullname'])? $_POST['fullname'] : ''; ?>" /><?php if(in_array('fullname', $validation)): ?><span class="error"><?php echo $error_messages['fullname']; ?></span><?php endif; ?> 
    </div> 
    <div class="context"></div> 

    <div class="row"> 
    <div class="label">Your E-mail</div> 
    <div class="input"><input type="text" id="email" class="detail" name="email" value=" 
<?php echo isset($_POST['email'])? $_POST['email'] : ''; ?>" /> 
<?php if(in_array('email', $validation)): ?><span class="error"><?php echo $error_messages['email']; ?></span><?php endif; ?> 
    </div> 
    <div class="context"></div> 

    <div class="row"> 
    <div class="label">Select Physician</div> 
    <div class="input"><select name='dropdown' > 
<option value=''> 

    --Select--</option> 
<option value='phys1'> 

    phys1</option> 
<option value='phys2'> 

    phys2</option> 
<option value='phys3'> 

    phys3</option> 
</select>  </div> 
    <div class="context"></div> 


    <div class="row"> 
    <div class="label"> 

    Your Message</div> 
    <div class="input"> 
    <textarea id="comment" name="comment" class="mess"><?php echo isset($_POST['comment'])? $_POST['comment'] : ''; ?></textarea><?php if(in_array('comment', $validation)): ?><span class="error"><?php echo $error_messages['comment']; ?></span><?php endif; ?> 
    </div> 
    </div> 
    <div class="submit"></div> 
    <input type="submit" id="submit" name="submit" value="Send Message" /> 
</div> 
</form> 
<?php else: ?> 
<p> 

    Thank you for your message!</p> 
<?php endif; ?> 
</div> 
</div> 
</div> 
</div> 
</div> 
</div> 
</div> 
</body> 
</html> 

양식은 여기에 업로드 : http://endotest.zxq.net/contact_test.php

+0

'if (array_key_exists ($ _ POST [ 'dropdown']))'- 두 개의 매개 변수를 사용하지 않습니까? – andrewsi

답변

0

issetarray_key_exists를 교체 시도하고 당신이 array_key_exists에 대한 설명서를 보면 당신은

if(isset($_POST['dropdown'])) 
{ 
    $recipient = $emails[$_POST['dropdown']]; 
    //send email to $recipient 
} 
+0

array_key_exists는 종종 사용자 입력을 허용하는 데 사용됩니다. isset()으로 변경하면 취약점이 발생할 수 있습니다. –

+0

음 ... 아니. 유일한 차이점은'isset'은 키가 존재하지만'NULL'을 값으로 가지면'false'를 반환한다는 것입니다 ('$ _POST'가 없을 것입니다) – Machavity

+0

만약 $ _POST [ 'dropdown'] 변수로 존재하면 isset()은 TRUE를 반환합니다. 위의 코드에 isset()이 도입 된 경우 $ _POST [ 'dropdown']의 값이 $ emails 배열의 유효한 키임을 나타내지는 않습니다. 'isset ($ email POST [ 'dropdown']])'이 아니라'isset ($ _ POST [ 'dropdown'])'' –

1

, 당신은거야 작동하는지 확인 이 함수는 두 개의 매개 변수를 취합니다. 키 (배열 키)와 배열 (해당 배열 키/색인을 검색하려는 배열).

귀하의 코드 :

if(array_key_exists($_POST['dropdown'])) 

는 문제입니다. 당신은 아마도 의미 :

if(array_key_exists($_POST['dropdown'], $emails)) 
관련 문제