-1

PHP を使用して作成したフォームがあります (私が望むほど理解していないものです) - しばらく前にオンライン チュートリアルを使用してフォームを作成しましたが、どこから来たのか思い出せず、再び見つけることができません。ただし、フォームは正常に機能するので、満足しています。

唯一のことは、チェックボックスをフォームに追加する必要があり、検証する必要がないことです(何もチェックされていない場合でもフォームを送信できます。すべてチェックされている場合でもフォームを送信できます..)

私がしなければならないことは、私に返された電子メールで、どのチェックボックスがチェックされたかを知らせることです。

これは私の HTML/PHP ページです:

<!--Contact Form Section -->    
<div id="contact-form" class="clearfix">  

        <?php  
//init variables  
$cf = array();  
$sr = false;  

if(isset($_SESSION['cf_returndata'])){  
$cf = $_SESSION['cf_returndata'];  
$sr = true;  
}  
?>

<form method="post" action="process.php">  

    <input type="email" id="email" name="email" placeholder="Your e-mail" value="    <?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['email'] : '' ?>" required="required" />  

    <input type="text" id="name" name="name" placeholder="Your name" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['name'] : '' ?>" required="required" />  

    <textarea id="message" name="message" placeholder="Your message..." required="required" data-minlength="20"><?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['message'] : '' ?></textarea>  

<span id="loading"></span>  
<input type="submit" value="&nbsp;" id="submit-button" /> 

    <ul id="errors" class="<?php echo ($sr && !$cf['form_ok']) ? 'visible' : ''; ?>">  
    <li id="info">There is a problem:</li>  
<?php  
if(isset($cf['errors']) && count($cf['errors']) > 0) :  
    foreach($cf['errors'] as $error) :  
?>  
    <li><?php echo $error ?></li>  
<?php  
    endforeach;  
endif;  
?>  
</ul>  

<p id="success" class="<?php echo ($sr && $cf['form_ok']) ? 'visible' : ''; ?>">Thanks for your message!</p>
</div>

</form>  
<?php unset($_SESSION['cf_returndata']); ?>   
<!--End Contact Form Section -->    

そして、ここに私のプロセスPHPドキュメントがあります:

<?php  
if( isset($_POST) ){  

//form validation vars  
$formok = true;  
$errors = array();  

//submission data  
$ipaddress = $_SERVER['REMOTE_ADDR'];  
$date = date('d/m/Y');  
$time = date('H:i:s');  

//form data  
$name = $_POST['name'];  
$email = $_POST['email'];  
$telephone = $_POST['telephone'];  
$enquiry = $_POST['enquiry'];  
$message = $_POST['message'];  

//validate form data  

//validate name is not empty  
if(empty($name)){  
    $formok = false;  
    $errors[] = "You have not entered a name";  
}  

//validate email address is not empty  
if(empty($email)){  
    $formok = false;  
    $errors[] = "You have not entered an email address";  
//validate email address is valid  
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){  
    $formok = false;  
    $errors[] = "You have not entered a valid email address";  
}  

//validate message is not empty  
if(empty($message)){  
    $formok = false;  
    $errors[] = "You have not entered a message";  
}  
//validate message is greater than 20 characters  
elseif(strlen($message) < 20){  
    $formok = false;  
    $errors[] = "Your message must be greater than 20 characters";  
}  

//send email if all is ok  
if($formok){  
    $headers = "From: Goldie Locks online contact form" . "\r\n";  
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    $emailbody = "<p>You have received a new message from the enquiries form on your website.</p> 
                  <p><strong>Name: </strong> {$name} </p> 
                  <p><strong>Email Address: </strong> {$email} </p> 
                  <p><strong>Message: </strong> {$message} </p> 
                  <p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";  

    mail("MY EMAIL!","New Enquiry",$emailbody,$headers);  

}  

//what we need to return back to our form  
$returndata = array(  
    'posted_form_data' => array(  
        'name' => $name,  
        'email' => $email,  
        'telephone' => $telephone,  
        'enquiry' => $enquiry,  
        'message' => $message  
    ),  
    'form_ok' => $formok,  
    'errors' => $errors  
);  

//if this is not an ajax request  
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&     strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){  
    //set session variables  
    session_start();  
    $_SESSION['cf_returndata'] = $returndata;  

    //redirect back to form  
    header('location: ' . $_SERVER['HTTP_REFERER']);  
}  
}

html コードを見てわかるように、PHP の関数の一部を取り出しましたが、PHP プロセス (問い合わせの種類や電話番号など) に残しました。

私がする必要があるのは、html/php ドキュメント (正確には 5 つ) にチェック ボックスを追加し、誰かがページに記入したときに受信する電子メールにチェック ボックスが表示されるようにすることだけです。

これは PHP の知識がある人にとっては簡単なことですが、残念ながら私にはほとんど知識がありません。誰かが助けてくれることを願っています。さらに情報が必要な場合はコメントしてください。最善を尽くします。

ありがとうございました

4

3 に答える 3

2

チェックボックス入力要素を追加するだけで、フォームにチェックボックスを追加できます。

<input type="checkbox" name"myCheckbox" value="true" />

を好きなように設定しvalue=""ます。次に、次をvalue使用して PHP スクリプトで を取得できます。

$myCheckbox = $_POST['myCheckbox'];

変数$myCheckboxには、チェックされている場合はフォーム内の「myCheckbox」という名前のチェックボックスの値が含まれ、チェックボックスがチェックされていない場合は空白になります。

次に、他の変数と同様に、値を電子メールに追加できます。

$emailbody = "<p>You have received a new message from the enquiries form on your website.</p> 
    <p><strong>Name: </strong> {$name} </p> 
    <p><strong>Email Address: </strong> {$email} </p> 
    <p><strong>Message: </strong> {$message} </p>
    <p><strong>myCheckbox value: </strong> {$myCheckbox}</p>
    <p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";

フォームが送信され、何らかの理由で検証に失敗した場合に、フォームのチェック済み/未チェック状態を維持したい場合は、チェックボックスの値を$returndata変数に追加できます。

$returndata = array(
    'posted_form_data' => array(  
        'name' => $name,  
        'email' => $email,  
        'telephone' => $telephone,  
        'enquiry' => $enquiry,  
        'message' => $message,
        'myCheckbox' => $myCheckbox,
    ),  
    'form_ok' => $formok,  
    'errors' => $errors
);

これによりフォームに送り返されます。次に、チェックボックスを変更して、他の要素と同様にこの値を探し、以前にチェックされていた場合はチェックボックスに「checked=Checked」の値を追加する必要があります。

<input type="checkbox" name"myCheckbox" value="true" <?php echo ($sr && !$cf['form_ok'] && $cf['posted_form_data']['myCheckbox]=="true") ? 'checked="checked"' : '' ?> />

行のtrue部分はチェックボックス$cf['posted_form_data']['myCheckbox]=="true"の値です。value=""

それが理にかなっていることを願っています。

于 2012-08-15T18:27:51.097 に答える
1

チェックボックスを追加するには:

<input type="checkbox" name="someName" id="someId" value=""/>Checkboxtitle 

HTMLコードがチェックボックスを生成するため。次に、メールに値を追加するには、通常のテキスト ボックスと同じように呼び出すだけです。

于 2012-08-15T18:26:25.157 に答える
1

チェックボックスの入力をフォームに追加し、PHP で取得するだけです。

HTML:

<form method="post" action="process.php">  

<input type="email" id="email" name="email" placeholder="Your e-mail" value="    <?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['email'] : '' ?>" required="required" />  

<input type="text" id="name" name="name" placeholder="Your name" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['name'] : '' ?>" required="required" />  

<input type="checkbox" id="CHECKBOX1" name="CHECKBOX1" value="" />Checkbox 1

(希望のチェックボックスで最後の入力を繰り返します)

そしてPHP:

<?php  
if( isset($_POST) ){  

//form validation vars  
$formok = true;  
$errors = array();  

//submission data  
$ipaddress = $_SERVER['REMOTE_ADDR'];  
$date = date('d/m/Y');  
$time = date('H:i:s');  

//form data  
$name = $_POST['name'];  
$email = $_POST['email'];  
$telephone = $_POST['telephone'];  
$enquiry = $_POST['enquiry'];  
$message = $_POST['message']; <br />
**$checkbox1 = $_POST['CHECKBOX1'];**

//validate form data  

//validate name is not empty  
if(empty($name)){  
    $formok = false;  
    $errors[] = "You have not entered a name";  
}  

//validate email address is not empty  
if(empty($email)){  
    $formok = false;  
    $errors[] = "You have not entered an email address";  
//validate email address is valid  
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){  
    $formok = false;  
    $errors[] = "You have not entered a valid email address";  
}  

//validate message is not empty  
if(empty($message)){  
    $formok = false;  
    $errors[] = "You have not entered a message";  
}  
//validate message is greater than 20 characters  
elseif(strlen($message) < 20){  
    $formok = false;  
    $errors[] = "Your message must be greater than 20 characters";  
}  

//send email if all is ok  
if($formok){  
    $headers = "From: Goldie Locks online contact form" . "\r\n";  
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    $emailbody = "<p>You have received a new message from the enquiries form on your website.</p> 
                  <p><strong>Name: </strong> {$name} </p> 
                  <p><strong>Email Address: </strong> {$email} </p> 
                  <p><strong>Message: </strong> {$message} </p> 
                  **<p><strong>Checkbox1: </strong>{$checkbox1}</p>**
                  <p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";  

    mail("MY EMAIL!","New Enquiry",$emailbody,$headers);  

}  

//what we need to return back to our form  
$returndata = array(  
    'posted_form_data' => array(  
        'name' => $name,  
        'email' => $email,  
        'telephone' => $telephone,  
        'enquiry' => $enquiry,  
        'message' => $message  
    ),  
    'form_ok' => $formok,  
    'errors' => $errors  
);  

//if this is not an ajax request  
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&     strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){  
    //set session variables  
    session_start();  
    $_SESSION['cf_returndata'] = $returndata;  

    //redirect back to form  
    header('location: ' . $_SERVER['HTTP_REFERER']);  
}  
}
于 2012-08-15T18:23:24.040 に答える