好きなおでんの具材ドラフト会議しましょう

http://php.eweb-design.com/1301_mail.html
のアンケートフォームのサンプル(sample1)で勉強していますが、分らないところがあるので教えてください。以下はソースの抜粋です。

 未入力項目のチェックにおいて、最初にtextの未入力(名前,年齢,email)をチェックし、次にradioとcheckbox(性別,規約)の未選択をチェックしているようなのですが、この二つのステップがよく理解できません。具体的には■で示した行です。特にif($var == "eweb_submit") ;が何を意味するのか?なお、"eweb_submit"は送信確認画面のinputタグのvalue属性です。
 初心者のため、うまく説明できませんがよろしくお願いします。

<?php header("Content-Type:text/html;charset=Shift_JIS"); ?>
<?php

省略

// 必須入力項目を設定する(する=1, しない=0)
$esse = 1;
// 必須入力項目(入力フォームで指定したname)
$eles = array('名前','年齢','性別','email','規約');


$sendm = 0;
foreach($_POST as $key=>$var) {
if($var == "eweb_submit") $sendm = 1;
}

// 文字の置き換え
$string_from = "\";
$string_to = "ー";

// 未入力項目のチェック
if($esse == 1) {
$flag = 0;
$length = count($eles) - 1;
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if($var == "eweb_submit") ;■
else {
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i] && empty($var)) {■
$errm .= "<FONT color=#ff0000>「".$key."」は必須入力項目です。</FONT><BR>\n";
$flag = 1;
}
}
}
}
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
for($i=0; $i<=$length; $i++) {
if($key == $eles[$i]) {■
$eles[$i] = "eweb_ok";■
}
}
}
for($i=0; $i<=$length; $i++) {
if($eles[$i] != "eweb_ok") {■
$errm .= "<FONT color=#ff0000>「".$eles[$i]."」が未選択です。</FONT><BR>\n";
$eles[$i] = "eweb_ok";
$flag = 1;
}
}
if($flag == 1){
htmlHeader();
?>

<!--- 未入力があった時の画面 --- 開始 --------------------->

入力エラー<BR><BR>
<?php echo $errm; ?>
<BR><BR>
<INPUT type="button" value="前画面に戻る" onClick="history.back()">

<!--- 終了 --->

<?php
htmlFooter();
exit(0);
}
}


省略


$body=mb_convert_encoding($body,"JIS","SHIFT_JIS");
$sbj="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($sbj,"JIS","SHIFT_JIS"))."?=";
if($from_add == 1) {
$from = $_POST['email'];
$header="From: $from\nReply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
} else {
$header="Reply-To: ".$_POST['email']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion();
}
if($chmail == 0 || $sendm == 1) {
mail($to,$sbj,$body,$header);
if($remail == 1) { mail($reto,$resbj,$rebody,$reheader); }
}
else { htmlHeader();
?>
<!--- 送信確認画面のレイアウトの編集 --- 開始 ------------->

以下の内容で間違いがなければ、「送信する」ボタンを押してください。<BR><BR>
<FORM action="<? echo $script; ?>" method="POST">
<? echo $err_message; ?>
<TABLE width="400" bgcolor="#cccccc" cellspacing="1" cellpadding="3">
<?php
foreach($_POST as $key=>$var) {
$key = strtr($key, $string_from, $string_to);
if(get_magic_quotes_gpc()) $var = stripslashes($var);
$var = htmlspecialchars($var);
print("<TR bgcolor=#ffffff><TD bgcolor=#eeeeee>".$key."</TD><TD>".$var);
?>
<INPUT type="hidden" name="<?= $key ?>" value="<?= $var ?>">
<?php
print("</TD></TR>\n");
}
?>
</TABLE>
<BR>
<INPUT type="hidden" name="eweb_set" value="eweb_submit">
<INPUT type="submit" value="送信する">
<INPUT type="button" value="前画面に戻る" onClick="history.back()">
</FORM>

以下省略

A 回答 (2件)

はじめまして、自分も初心者です。


すでに解決済みかもしれませんが、自分も同じsampleで引っかかったので回答します。
$var == "eweb_submit"は送信確認ページの送信ボタンを押せば初めて送られるデータと見られます。
そのため、このデータが含まれる場合、チェックは不要ですし、重複して送信確認画面を見る必要はありませんので、値にeweb_submitがあれば処理をスルーするために記述されていると考えられます。
また、if($key == $eles[$i] && empty($var))の部分は、必須項目のデータが空の場合、エラーを記述するという処理です。
必須項目は毎回$eles = array('名前','年齢','性別','email','規約');の部分で初期化されます。
if($key == $eles[$i]) {■
$eles[$i] = "eweb_ok";■の部分は、
必須項目に設定したラジオとチェックボックスの項目にチェックが入っていれば、当然POSTされるkeyに含まれるので、チェックして最終的に$eles[]の中味が全部eweb_okになりますが、必須項目のkeyが無ければ、その部分はeweb_ok以外の初期値のままです。
そのため、if($eles[$i] != "eweb_ok") {■で確認して、エラーを追記しています。
また、if文の{が無い記述ですが、自分もあれっ?と思いました。動いているので、そういう記述もアリなのだと思うことにしました。
また、自分の疑問ですが、<? echo $err_message; ?>の記述は何なのか?
疑問です…。もし判ればお教えください。
ちなみに、
if($eles[$i] != "eweb_ok") {■
$errm .= "<FONT color=#ff0000>「".$eles[$i]."」が未選択です。</FONT><BR>\n";
$eles[$i] = "eweb_ok";
の部分の$eles[$i] = "eweb_ok"は何のために代入しているのか自分もわかりません…。おそらく無意味な処理です。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなってしまいました。今、ポイントをつけていないことに気付きあわてています。おかげさまでで少しは理解が進みました。まだわからない部分はありますが、メールフォームは問題なく動いています。ありがとうございます。

お礼日時:2008/06/03 19:22

下記の例で分かりますかね?



<?php
$string = "aiueo";

if( $string == "aiueo"){
echo '$stringはaiueoです。';
}else{
echo '$stringはaiueoではありません。';
}
?>

参考URL:http://www.atmarkit.co.jp/flinux/php4/php4_3/php …

この回答への補足

回答ありがとうございます。返事遅くなってすいません。
示してくれた例は理解できます。うまく言えないんですけど、もう少し具体的なところがわかりません。例えば
if($var == "eweb_submit") ;
であれば、「入力された要素が"eweb_submit"」ということは何を意味しているのか?また、;の後に{処理}がなく、いきなりelseがきているのはどういうことでしょうか?よかったら教えてください。

補足日時:2007/09/12 17:02
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報