• ベストアンサー

==""|| って?

PHP初心者です。 初めてPHPで問い合わせページを作成しています。 サンプルをダウンロードしてきて、いろいろ変更しながら作ろうと思っているのですが、サンプルの中に、 if($_SESSION['name']==""||$_SESSION['mail_ad']==""||$_SESSION['subject']==""||$_SESSION['message']==""||!ereg($cp,$_SESSION['mail_ad'])){ $err=false; }else{ $err=true; } という文があります。 どーやら、入力の漏れがないかをチェックしているようなのですが、この部分の解説が無いため、自分なりにカスタマイズしようと思ってもなかなか進みません。 ==""||にはなんの意味があるのでしょうか? 簡単でけっこうですので、教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.5

No.2 & 4のham_kamoです。 > 今回自分が作っているものは、入力項目が結構多く、20項目くらいあるのですが、 > サンプルのように$_SESSION['xxxx']==""||$_SESSION['yyy']==""||のように > 20個くらい続けても問題ありませんか? 続けても文法的には問題はない(はず?)ですが、ずらずらと横に並べるのと読みにくいソースになるので、 if ( $_SESSION['xxxx'] == ""  || $_SESSION['yyyy'] == "" などのように一行ずつにして見やすくするか、あるいは、チェックする引数の配列を作っておき、foreachでチェックする、などの方法があります。これならチェックする項目が増えても簡単に対応できます。ただしメールアドレスが正しいか正規表現で、などは別処理になりますが。 一応、例を下に書いておきます。 $item = array('name','mail_ad','subject','message'); $err = true; if (!ereg($cp,$_SESSION['mail_ad']) {  $err = false; } else {  foreach ($item as $value) {   if ($_SESSION[$value] == "") {    $err = false;    break;   }  } } なんとなく、$errのtrueとfalseが逆のような感じもしますが、この変数がプログラムの中でどのように使われているのがわからないので、質問文にしたがった記述をしています。

plqtan
質問者

お礼

ありがとうございます。 配列で・・・って考え方もできるんですね。 わかりやすい解説ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

No.2です。ちょっと訂正。 ==""は、if ($A == "") というように、変数が空文字列でなければ、という意味の等式です。 →「変数が空文字列であれば」の誤りでした。失礼しました。

plqtan
質問者

お礼

ham_kamoさん。 わかりやすい解説ありがとうございました。 今回自分が作っているものは、入力項目が結構多く、20項目くらいあるのですが、サンプルのように$_SESSION['xxxx']==""||$_SESSION['yyy']==""||のように20個くらい続けても問題ありませんか? なんとなくですが、$_SESSION['xxxx']にPOSTで受け取りSESSIONに格納したものをズラズラと並べてみたのですが、どうもこの部分で処理がとまってしまうような感じで困っていました。 意味がわかったので、もう一度挑戦してみます。 が、もし注意点などがあればお教えいただければ幸いです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • ptakeda
  • ベストアンサー率53% (7/13)
回答No.3

すでに、ずばりの回答がついているので、参考までに、 ||は、演算子です。 参考URLつけます。

参考URL:
http://www.scollabo.com/banban/php/php_06.html
plqtan
質問者

お礼

ptakedaさん。 参考のURLありがとうございます。 ほんとに参考になりました。 ==""||で検索とかしていて、何も出てこなくて(当たり前ですよね・・)困っていました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

||は論理式でのORを意味します。 ==""は、if ($A == "") というように、変数が空文字列でなければ、という意味の等式です。 if($_SESSION['name']==""||$_SESSION['mail_ad']==""||$_SESSION['subject']==""||$_SESSION['message']==""||!ereg($cp,$_SESSION['mail_ad'])){ は、分解して書くと、 if ( $_SESSION['name']==""|| $_SESSION['mail_ad']==""|| $_SESSION['subject']==""|| $_SESSION['message']==""|| !ereg($cp,$_SESSION['mail_ad']) ){ となり、日本語に訳すと、 $_SESSION['name']が空文字列の場合、または $_SESSION['mail_ad']が空文字列の場合、または $_SESSION['subject']が空文字列の場合、または $_SESSION['message']が空文字列の場合、または $_SESSION['mail_ad'])が正規表現$cpにマッチしなかったら、 という意味になります。 要は、フォームで入力されてPHPに渡ってきたパラメータをチェックして、必須事項が記入ないものがあるか、あるいはメールアドレスが正しい書式になっていない場合は、というif文だと思います。

全文を見る
すると、全ての回答が全文表示されます。
noname#26650
noname#26650
回答No.1

> ==""|| == : 左側と右側に書いてある内容が等しいかどうか、を表わす演算子 "" : 「何も入っていない」ことを表わす || : 左側と右側に書いてある式の少なくとも一方が成立すれば真、を表わす演算子 【例】 if ($aaa == "1" || $bbb == "x") というif文は、「$aaaが"1"に等しいか、または、$bbbが"x"に等しければ、真」 という意味

plqtan
質問者

お礼

miraiyaさん。 ありがとうございます。 なるほど、意味あるものが3つつながっていたのですね。 わかりやすい解説ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP入力フォームについて

    現在入力フォームを作っています。 流れとしてはDBに入っている会員情報をフォーム上に呼び出して(各inputにはDB内の会員の情報が表示される)各会員が自分の情報を編集できるというフォームです。 ここで質問なのですが、会員の人が自分の入力内容を変更した際に入力漏れがあるとフォーム画面に戻るのですがその際に入力した内容が表示されるのではなくDB内のデータが表示されてしまいます。 これをDB内のデータではなく入力した内容にしたいのですが、どうしたらよろしいでしょうか? ソースは下記になります。 form.php <?php DB呼び出し・・・ $_SESSION['name'] = $row['name']; ・・・ ?> <?php echo $_SESSION['err_name']; ?> <input type="text" name="name" value="<?php echo $_SESSION['name']; ?>" /> confirm.php <?php $name = htmlspecialchars($_REQUEST['name']); if(!strlen($name)) { $_SESSION['err_name'] = '氏名を入力してください。'; $errFlag = true; } else { unset($_SESSION['err_name']); } エラーの時はform.phpに戻る ?> <?php echo $name; ?> としています。 とても省略していますが、お分かりの方がいらっしゃいましたら教えていただけると助かります。

    • 締切済み
    • PHP
  • <?php

    <?php if (isset($_POST['reg']) && isset($_POST['reg'])) { $ErrFlg = false; // 氏名欄をチェック $first_name = $_REQUEST['first_name']; $last_name = $_REQUEST['last_name']; if (!trim($first_name) || trim($last_name) == '') { $_POST['err_name_req'] = '氏名が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_name_req']); } // 生年月日欄をチェック $b_year = $_REQUEST['b_year']; $b_month = $_REQUEST['b_month']; $b_day = $_REQUEST['b_day']; if (!trim($b_year) || trim($b_month) || trim($b_day) == '') { $_POST['err_birthday_req'] = '生年月日が入力されておりません。<br />'; $error = TRUE; } else { unset($_POST['err_birthday_req']); } if (checkdate($b_month, $b_day, $b_year) === false) { $_POST['err_birth_ereg'] = '生年月日が正しくありません。<br />'; $error = TRUE; } else { unset($_POST['err_birth_ereg']); } } ?> <html> <body> <form action="<?php $_SERVER["PHP_SELF"]; ?>" method="POST"> 氏名<br /> <?php print $_POST['err_name_req']; ?><br /> <input type="text" name="first_name" value="<?php print $first_name; ?>" /><input type="text" name="last_name" value="<?php print $last_name; ?>" /><br /> 生年月日<br /> <?php print $_POST['err_birth_req'].$_POST['err_birth_ereg']; ?><br /> <input type="text" name="b_year" value="<?php print $b_year; ?>" size="5" />年 <input type="text" name="b_month" value="<?php print $b_month; ?>" size="2" />月 <input type="text" name="b_day" value="<?php print $b_day; ?>" size="2" />日 <br /> <input type="submit" name="reg" value="登録" /> </form> </body> </html> としています。 登録ボタンを押した際に入力チェックされることがなければデータベースに登録したいのですが、どこに記述してよいのか困っています。 また、どのように記述したらよろしいでしょうか? イメージとしては登録ボタンを押したら、「登録しました。」というコメントだけが表示されるようにしたいのですが・・・ javascriptの使用は考えておりませんので、できればPHPでお願いいたします。 もしお分かりの方がいらっしゃいましたらご教授いただけないでしょうか? また上記の内容でおかしいところがありましたらご指摘いただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHPのSESSIONを使用したメールフォームについてご質問があります

    PHPのSESSIONを使用したメールフォームについてご質問があります。 PHPを現在勉強中のため、ご教授いただければと思います。 ソースは下記のとおりです。 /* index.php */ <?php session_start(); ?> <html> <body> <form action="confirm.php" method="post"> <?php echo $_SESSION['err_category']; ?> <select name="category" id="category"> <option value="">-- 選択してください --</option> <option value="お問合せ">お問合せ</option> <option value="お申し込み">お申し込み</option> <option value="その他">その他</option> </select> </form> </body> </html> /* confirm.php */ <?php session_start(); $category = $_POST['category']; $errFlag = false; if(!strlen($category)) { $_SESSION['err_category'] = "<p class=\"error\">お問合せ項目を選択して下さい。</p>"; $errFlag = true; } else { unset($_SESSION['err_category']); } if($errFlag) { $_SESSION['category'] = $category; $_SESSION['errFlag'] = $errFlag; header('Location: ./'); exit; } ?> <html> <body> <?php echo $category; ?> <a href="javascript:history.back();">戻る</a> </body> </html> としているのですが、フォーム(index.php)でプルダウンの項目を選び、確認画面(confirm.php)から戻るを押すとフォームのページにてプルダウンの項目が選択してくださいに戻ってしまいます。 戻るを押しても、項目が選択されている状態にするにはどうしたらよろしいのでしょうか? ここで2日ほどつまずいているため、どなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_language("Japanese");でエラーが出ます

    PHP初心者です。 少し訂正があるため、それを書き直しました。 回答を頂く方には大変面倒をおかけする事になり、誠に申し訳ありませんが、2つのファイルのソースコードをまず見てもらえますか。 test.php <?php session_start(); ?> <html> <head> <title>test</title> </head> <body> <h2>メールの送信</h2> <?php if ($_SESSION["address"]=="NG") { unset($_SESSION["address"]); print("E-Mailは必須入力です。"."<br>"); } if ($_SESSION["subject"]=="NG") { unset($_SESSION["subject"]); print("タイトルは必須入力です。"."<br>"); } if ($_SESSION["message"]=="NG") { unset($_SESSION["message"]); print("コメントは必須に入力です。"."<br>"); } ?> <form action="./test1.php" method="post"> E-Mail:<br><input type="text" name="address" <?php print("value='".$_SESSION["address"]."'")?> size="50"><br> タイトル:<br><input type="text" name="subject" <?php print("value='".$_SESSION["subject"]."'")?> size="50"><br> コメント:<br><textarea name="message" rows="5" cols="35"> <?php print($_SESSION["message"])?></textarea><br><br> <input type="submit" value="送信"> </form> </body> </html> このページを表示させてどこかを空欄のままにしますが、エラー表示は出ません。 ↑の部分はソースコード抜けや誤字で正常に表示できるようになりました。 では、全ての欄に入力してtest1.phpに移ります。 test1.php <?php session_start(); if(strlen($_POST["address"])==0){ $_SESSION["address"] = "NG"; }else{ $_SESSION["address"] = $_POST["address"]; } if(strlen($_POST["subject"])==0){ $_SESSION["subject"] = "NG"; }else{ $_SESSION["subject"] = $_POST["subject"]; } if(strlen($_POST["message"])==0){ $_SESSION["message"] = "NG"; }else{ $_SESSION["message"] = $_POST["message"]; } if($_SESSION["address"]=="NG" or $_SESSION["subject"]=="NG" or $_SESSION["message"]=="NG"){ header("Location: test.php?".SID); exit; } ?> <html> <head><title>test1.php</title></head> <body> <?php $address=$_POST["address"]; $subject=$_POST["subject"]; $message=$_POST["message"]; $header="From:xxx@xxxxx.xxx\nContent-Type: text/plain;charset=iso-2022-jp"; mb_language("Japanese"); if(mb_send_mail($address,$subject ,mb_convert_encoding($message,"JIS","SJIS"),$header)){ print("送信完了!"); }else{ print("エラー:送信に失敗しました"); } ?> </body> </html> 問題はここです。 移動前にmb_language("Japanese");の部分でエラー表示されます。 この構文がどうしてもエラーになります。 エラー文をここで書きます。 Fatal error: Call to undefined function mb_language() in C:\Apache2\htdocs\sample18_1.php on line 42 それで、構文をググって見ましたが、こういうサイトを見つけました。 http://lib.stwing.jp/archives/2005/12/phpmb_language.html​ ここにも書かれているので構文自体にエラーが出るのはおかしいはずなんですけど。 どこに問題があるのでしょうか。 このソースコードが何故上手く通らないのか教えて頂けると大変助かります。 どうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • フォームの「戻るボタン」で内容が消えてしまう・・・

    PHPを勉強しながら、ブログをやってみたいと考えている素人です。 ネット上のフリーのフォームを利用させて頂き、問合せページを作ってみたのですが 確認ページの戻るボタンを押すと、入力が消えて、始めからやり直しになってしまいます。 session を利用しているようなのですが、素人ゆえsessionの仕組みが何とか解る程度で どこを修正して良いのか解りません。 「session_cache_limiter(‘none’);」 と言うものが、キーポイント?のようなのですが、色々と試しておりますが 一向にうまく行きません、何卒ご指導お願い致します。 以下、利用させて頂いているフォームの一部 配布元のサイト様(http://www.sapphirus.biz/php/sformmail/) 処理の流れ sformmail.html(入力) ≫ sformmail.php(入力チェック) ≫ confirm.php(確認) ≫ sformmail.php(送信[template.php/reply.php]) ≫ completion.html(完了) ○sformmail.php(入力チェック) // 設定 $mail_to = 'sample@mail.address'; // フォームデータを受け取るメールアドレス $mail_subject = 'S.B.フォームメール送信'; // 受け取る時のSubject(件名) $reply_subject = 'S.B.フォームメールより自動返信です'; // 送信者へ自動返信のSubject(件名) $mail_bcc = ''; // BCCで受け取りが必要な場合は設定 $internal_enc = 'UTF-8'; // 文字エンコード // メイン session_start(); if (!extension_loaded('mbstring')) Err('マルチバイト文字列関数が利用できません'); if (!$mail_to) Err('受取先メールアドレスが設定されてません'); if (!$_POST) Err('POSTデータがありません'); mb_language('ja'); mb_internal_encoding($internal_enc); $x_mailer = 'Sapphirus.Biz Formmail Ver. 1.40 (PHP/' . phpversion() . ')'; $mode = $_POST['mode']; switch ($mode) { case 'SEND': // メール送信 if (!$_SESSION) Err('セッションデータがありません'); // メールヘッダ if (!$_SESSION['email']) $mail_from = 'S.B.Formmail'; else $mail_from = $_SESSION['email']; $mail_header = "From: {$mail_from}\n"; if ($mail_bcc) $mail_header .= "Bcc: {$mail_bcc}\n"; $mail_header .= "X-Mailer: {$x_mailer}"; --------------文字制限のため以下省略---------------- ○confirm.php(確認) <?php //セッションを利用するのでここは削除しないで下さい session_start(); if (SID) Err('Cookieを有効にして下さい'); if (!$_SESSION) header('Location: completion.html'); function Err($err) { echo <<< EOM <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー:$err</title></head> <body style="font-size: 12px; line-height: 1.8em;"> <strong>エラー : </strong>$err<br> <input type="button" value="戻る" onclick="history.back();"> ----以下省略--- 他にも、入力用や送信完了用のhtmlファイル等ありますが 上記が関連しているコードだと思います。どうぞよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 半角カタカナの入力チェックを作りたいです

    入力フォームで入力された文字に対して半角カタカナかチェックをしたいです。 function CheckHalfSizeKatakana($str) {  if (mb_ereg("^[ア-ン゛゜]+$",$str)) {    return true;  } else {    return false;  } } としたのですがうまくいきません。 PHP4です。

    • ベストアンサー
    • PHP
  • メールフォームでの必須入力チェックについて

    はじめまして。PHP初心者です。PHPを使ってメールフォームを作成しています。入力画面で必須項目が記入されていなかったらエラー画面に飛ぶようにしたいのですが、なかなかうまくいきません。下のソースはサンプルを参考につくりました。 //入力画面 <?php if(isset($_POST['submit'])){ session_start(); $errflg = '1';   /*必須項目*/   if(($_POST['name']) == ""){     $_SESSION['name1'] = "・お名前";     $_SESSION['name1'] = $_POST['name1'];     $errflg = '0';   }else{     $_SESSION['name']="";   }       if($errflg == '0'){         header('Location: error.php');       exit();} ?> 流れとしては、名前の欄が入力されていなかったら、エラー画面に飛ばして「・お名前」と表示させたいです。もし他にいい方法やソースがありましたら教えてください。お願いします。

    • ベストアンサー
    • PHP
  • header(Location: next.php) だとPOSTした値が渡らない?

    文末は(だいぶ端折ってますが), (1) エラーがあればエラー表示, (2) エラーがなければnext.phpに飛ぶ という動作をするのですが, next.php 内に echo $_POST["Name"]; とか echo $_POST["reg"]; とか書いても valueの中身が渡ってきていません. header("Location: next.php"); で飛ばすとだめなのでしょうか. http://oshiete1.goo.ne.jp/qa2706500.html でも,#2さんのアドバイスのようにしようとしましたが, #1さんのご教示のように,セッションを利用するしかないですか? ちょっとセッションで値の渡し方がチンプンカンプンなのですが・・・ <?php session_cache_limiter('none'); session_start(); header("Cache-control:no-cache"); header("Pragma:no-cache"); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) { if ( $_POST["Name"] == "" ) { $errFlg = true; $errStr["Name"] = "未入力"; } } if ( $errFlg ) { ?> <html><body> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <?= $errStr["Name"] ?></td> <input type="text" name="Name" value="<?php echo $_POST["Name"]; ?>"> <input type="submit" name="reg" value="登録"></td> </form> </body></html> <?php } else { header("Location: next.php"); } ?>

    • ベストアンサー
    • PHP
  • メール送信での文字化け

    お世話になります。 ホームページから入力ホームに記入してもらい、送信するとphpを使用してメールを送信するプログラムを書いていますが、メールを送信するとメールの内容に文字化けが発生してしまいます。 どうすればよいでしょうか? 入力ホームのページからutf-8で統一すれば文字化けなくメールを送信することができましたが、 仕様の条件としてshift-jisにするとありますので、入力ホームはshift-jisにしてあります。 どうか教授ください。 <?php mb_language('ja'); mb_internal_encoding('SJIS'); session_start(); require_once("includes/common.php"); if(!isset($_SESSION["name"]) && !isset($_SESSION["tel"]) && !isset($_SESSION["email"]) && !isset($_SESSION["ren"])){ header("Location: contact.php"); } else{ $name=$_SESSION["name"]; $furi=$_SESSION["furi"]; $tel=$_SESSION["tel"]; $email=$_SESSION["email"]; $ren=$_SESSION["ren"]; $ktel=$_SESSION["ktel"]; $fax=$_SESSION["fax"]; $iken=$_SESSION["iken"]; $to=$email; $subject="こんにちは"; $to_admin="aaaa@bbbbb"; $subject_admin="ccccc@dddddd"; $from= "From: ".mb_encode_mimeheader("AAAAAA")."<>"; $message=<<<MESSAGE。 Eメールアドレス:{$email} お名前:{$name} 様 フリガナ:{$furi}様 電話番号:{$tel} 携帯電話番号:{$ktel} FAX番号:{$fax} 連絡方法:{$ren} <ご意見、ご要望> {$iken} MESSAGE; $message.=<<<MESSAGE MESSAGE; mb_send_mail($to,$subject,$message,$from); mb_send_mail($to_admin,$subject_admin,$message_admin,$from); session_unset(); } ?>

    • ベストアンサー
    • PHP
  • PHPのTRUEとFALSEについて 値を返すというけれど、なぜ「1」かブランク(何もなし)なのでしょうか?

    以下の文を実行すると、$abcには「3」があるので、TRUEになるはずなのですが、 エコーすると「1」と記載されます。 <?php $abc = "283743"; $abc = ereg("3",$abc); echo $abc; ?> 以下の文を実行するとエコーしても何も表示されません。 「0」は該当しないので、FALSEと表示されると思うのですが・・。 <?php $abc = "283743"; $abc = ereg("0",$abc); echo $abc; ?> ネットで調べると、それぞれTRUEとFALSEを返すと記載がありました。 それなのになぜ「0」と「何もなし」になるのでしょうか。

    • ベストアンサー
    • PHP