• ベストアンサー

【超初歩】 php構文の書き方の作法?

(1) 過去に http://oshiete1.goo.ne.jp/qa2419133.html で, こういう書き方を教わりましたが if ( $_POST["reg"] == "" ) $errFlg = true; ↑は,カッコ{}は省略する書き方ですか?こういう書き方をしていいのですか? (2) それと,下記のIF文の引数で,変数名に「!」がついているのといないのとで 何が違うのか,日本語にすると,「$errFlg がNULLじゃなかったら」とか, そういう意味ですか? if ( !$errFlg ) { ~~~処理~~~ } if ( $errFlg ) { ~~~処理~~~ }

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

(1)については if(条件) 直後に処理; if(条件) 改行してもOK(ただしセミコロンで区切られる次の行のみ有効); if(条件){ グループの処理; } のいずれかがつかえます。使い分けは単に好みによりますが できればグループとして使うようにすると、はまりにくいです (2)にかんしては <?PHP if(true) print "1<br>"; if(false) print "2<br>"; if(!true) print "3<br>"; if(!false) print "4<br>"; if(1) print "5<br>"; if(0) print "6<br>"; if(!1) print "7<br>"; if(!0) print "8<br>"; if("test") print "9<br>"; if("") print "10<br>"; if(!"test") print "11<br>"; if(!"") print "12<br>"; ?> とするとわかるように バリアント値であればtrueか!false(not false)は正、 数値であれば0以外もしくは!0以外が正、 文字列であれば空文字列以外もしくは!空文字列が正、 となります。その辺が柔軟にできてますのでうまくつかってください

litton101
質問者

お礼

yamabejpさん,ありがとうございました. (元質問に引用した質問に回答いただいたのもyamabejpさんです) (1) はそういう書き方でよく,バリエーションもあるということで よく理解できました. (2) は,提示いただいたものを実行すると,下記が帰ってきましたが なぜそうなるのか,理解するのに時間がかかりそうです・・ 1 4 5 8 9 12 naktak(#2)さん,yamabejpさんのご解説が 頭では理解できているつもりなのですが・・・ ともかく,まずは御礼申し上げます.

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

その他の回答 (2)

回答No.2

(1)してもいいです。但し、命令が1文である時に限ります。 (2)結果を否定しています。つまり$errFlgがtrueならfalseをし、falseならtrueとします。

litton101
質問者

お礼

naktakさん,ありがとうございました. (1) はそういう制約があるのですね. (2) はややっこしいですが,ようやく理解できました. 勉強になりました.ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。
  • umota
  • ベストアンサー率46% (150/324)
回答No.1

マニュアルの「III. 言語リファレンス」に書いてあります。 {} 複数の文をグループ化 ! 否定

参考URL:
http://www.php.net/download-docs.php
litton101
質問者

お礼

umotaさん,早速ありがとうございました. 意味もさることながら,ありがたいのはダウンロードできる HTMLヘルプ形式のマニュアルです. こんなすごいものがあったのですね. 今後,オフラインのときなどゆっくり楽しみたいと思います.

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

関連するQ&A

  • 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
  • ウィザード形式のアンケートを作りたい

    HTML_QuickForm_Controllerみたいに,ウィザード形式で 進めるアンケートを作りたいです. まず,http://oshiete1.goo.ne.jp/qa2419133.htmlのNo3さんの 回答を元に1枚アンケートを作りました. アンケート回答を記入後,「送信」ボタンを押すと データベースをUpdateして,同じPHPファイルを読み込み(PHP_SELF) 記入にエラーがあればメッセージを, DB更新に成功したら更新成功,失敗したら失敗と表示するもの. ここで,更新がうまくいったら成功と表示するのではなく, 別のPHPファイルを読み込みたい(次のページに遷移したい)です. (無論.記入漏れやDB更新に失敗しら遷移せずにエラーが必要です) 骨組みだけ示すと,下記のような感じですが, 次のページに飛ばすには,どうしたらいいでしょうか. <?php $myID = getMyID(); $errFlg=false; if ( $_POST["reg"] == "" ) $errFlg = true; if ( !$errFlg ) $errmsg = "エラーあり"; if ( $errFlg ) { ?> <html> <body> <?php echo $errmsg; ?> <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>"> <input type="text" name="email" value="<?php if($_POST["reg"]=="") { echo $db_email; } else { echo $_POST["email"]; } ?>"><?= $errStr["email"] ?> <input type="submit" name="reg" value=" 送信 "> </form> </body> </html> <?php } else { $email = $_POST["email"]; $con = mysql_connect(localhost, root, pass); $selectdb = mysql_select_db(mydb, $con); $sql = "UPDATE mytable SET email = '$email', WHERE myID = '$myID'"; $rst = mysql_query($sql, $con); if ($rst) { $body = "更新成功"; } else { $body = "更新失敗"; } print "$body<br><a href='menu.php'>戻る</a>"; } ?>

    • ベストアンサー
    • PHP
  • rubyの構文(&&を用いた条件分岐について)

    ruby初心者です。 最近、ruby on railsで書かれたソースを引き継ぎ解析を行っています。 その中で、以下のような構文が出てきました。 ========================================= num = 0 bool = false vals = '' puts 'start' num == 0 && bool && if vals  puts 'true' else  puts 'false' end puts 'end' ========================================= 上記プログラムを実行すると、if ~ end までが実行されませんでした。 そこで、変数boolをtrueに変更して再実行したところ、if文が実行されました。 そこで私は、上記プログラムは以下と同値であると解釈しました。 ====================================== (省略) if num == 0 && bool  if vals   puts 'true'  else   puts 'false'  end end ======================================= 以上を踏まえて・・・ 1.私の解釈は正しいでしょうか? 2.間違っている場合、正しい処理の解釈を教えていただけますでしょうか?または参考URLを教えていただけますと助かります。 文の最後に"&&"がついている文を見たことがなく、ネットで調べても 正解らしいものが掲載されていなかったので質問させていただきました。 拙い説明で申し訳ありませんが、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • php内でjsを実行させたい

    いつもお世話になっております。 今回、下記の事を実行しようと思って苦戦してます。 (1)DBのレコードが0の場合にelseの処理を実行 (2)else内でエラー文が入っている変数を確認する→これは単純に一文があるかを目で確認 (3)上記の変数を外部ファイルのjs側に変数を渡す (4)空でない変数かを条件分岐で確認してアラートを発生させる 悩んでいる部分は(3)の部分で中々見つからないのでどなたか教えて頂けますでしょうか。 if(省略) { (省略) } else { $title = "タイトルが未記入のままのようなままなので登録してください"; ★外部ファイルのjsを実行させる }

    • 締切済み
    • PHP
  • 法則性ある繰り返しをfor文でループし簡潔化したい

    次のように、同じような構文を50ブロック続けて書きたいですが、 それでは芸がないので、forを使ったループ文を書けばよいと思います。 変数から変数を作成する方法があったと思います。 法則性としては、$pjtProperty●● という風に、●●部分が01~50までカウントアップしています。 01~09までは、十の位に「ゼロ」を補完しております。 for文の下記ぶりをご教示いただけないでしょうか。 if ($_POST["cancel"] != "") { $pjtProperty01 = ""; } elseif ($_POST["upd"] != "" && $_POST["reg"] == "") { $_POST["pjtProperty01"] = $col["pjtProperty01"]; $pjtProperty01 = " checked"; } elseif ($_POST["pjtProperty01"] != "" || ( $col["pjtProperty01"] != "" && $_POST["reg"] == "" )) { $pjtProperty01 = " checked"; } //上と違うのは、01が02になっただけ。 if ($_POST["cancel"] != "") { $pjtProperty02 = ""; } elseif ($_POST["upd"] != "" && $_POST["reg"] == "") { $_POST["pjtProperty02"] = $col["pjtProperty02"]; $pjtProperty02 = " checked"; } elseif ($_POST["pjtProperty02"] != "" || ( $col["pjtProperty02"] != "" && $_POST["reg"] == "" )) { $pjtProperty02 = " checked"; } //上と違うのは、02が03になっただけ。 if ($_POST["cancel"] != "") { $pjtProperty03 = ""; } elseif ($_POST["upd"] != "" && $_POST["reg"] == "") { $_POST["pjtProperty03"] = $col["pjtProperty03"]; $pjtProperty03 = " checked"; } elseif ($_POST["pjtProperty03"] != "" || ( $col["pjtProperty03"] != "" && $_POST["reg"] == "" )) { $pjtProperty03 = " checked"; } : : 以下、pjtProperty04~pjtProperty50まで続く。

    • ベストアンサー
    • PHP
  • セッションを使わずに遷移先画面に変数の値を渡すには?

    <input type="hidden" value="myID">みたいな隠しフォームで 行く先々の画面に値をPOSTで渡してきました。 他方、 header("Location: mypage.php") のように画面を遷移させる場合、遷移先の画面に $_POST["myID"]のように値を渡すことはできませんか? この場合session_start();を使って、$_SESSION["myID"]のように値を 渡す(保持する)のが王道なのでしょうか? セッションと聞くと何かとトラブルになりやすそうなイメージがあり、 できれば使いたくないのです。 具体的に説明しますと、前にこの掲示板で教えていただいた、次の例を使っています。 入力文字チェックをかけたいのでPHP_SELFで同じ画面を呼び出して、 問題なければmypage.phpにリダイレクトさせる枠組みですが、 header("Location: mypage.php");という風に遷移した場合は、 遷移先のmypage.phpでは、$_POST["myID"]はPOSTされてきませんよね (値を受け取れませんよね)?? 妙案あればご教示下さい。 <?php if ($_POST["reg"] == "" ) $errFlg = true; if (!$errFlg) {     if (strlen($_POST["myName"]) > 30) {       $errFlg = true;       $errStr["myName"] = "30字以下";     }   $errMsg = "エラー!!"; } if ($errFlg) { ?> <html>   <body>     <form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">       氏名 <input type="text" name="myName" value="<?= $_POST["myName"] ?>"><?= $errStr["myName"] ?>       <input type="hidden" name="myID" value="<?= $_POST["myID"] ?>">     </form>     <input type="submit" name="reg" value="登録">   </body> </html> <?php } else {     $sql = "update mytable set myID = 'xxxx'";     $rst = mysql_query($sql, $con);     header("Location: mypage.php"); } ?>

    • ベストアンサー
    • 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でCGIの処理結果を使うには?

    cgiの処理結果をPHPで使う方法を教えてください。 いろいろ調べてみたのですが、わかりませんでした。 内容としては以下です。 http://xxx.xxx.xxx/xxx.cgi が既にあり、これは共有して使っているものなので、変更できない。 このcgiの処理内容は、引数を渡して、POSTすると、処理結果に応じて、trueかfalseをprintするというものです。 このcgiの処理結果をPHPで受け取り、処理の分岐のための判別に使いたいと考えています。 試したのは、 1.htmlから値を渡してpostする。 →cgiのURLに遷移してtrueが表示される。 2.PHPでheader(Location:)で指定してみる。 →1と同じ です。 どうすればいいのか教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • switchでの条件分岐の書き方を教えて下さい。

    こんにちは。 いつもお世話になっております。 またわからない事が出てきてしまったので、どうか ご指導よろしくお願いいたします。 簡単な検索機能をつくりたくて、思考錯誤 しております。 フォームからPOSTで受け取る変数の数は 10個あります。 それぞれの変数が ””でなければ、受け取った 変数を元に、SQL文がかわってゆく。 という事がしたいのです。 10個もあるので、たとえば 変数が$_POST["a"]から$_POST["j"]まであった時に if文を使うとすると if($_POST["a"] != "" && $_POST["b"] == "" && $_POST["c"] != "" (略)){ $stt = "検索したい予定のSQL文1"; }elseif($_POST["a"] == "" && $_POST["b"] != "" && $_POST["c"] != "" (略)){ $stt = "SQL文2"; ・ ・ ・ と言う風に、ものすごいにはなると思うのですがifを つなげていけば良いのかな、と思うのです。 PHPの基礎HPなどを検索してみると、SWITCHを 使えば、多岐に分岐するIF文を、見やすくできる、 と書いてあったので、使ってみたいのですが、書き方の 説明によると switch(変数){ case 値1:  条件を満たす時の処理1 break; case 値2:  条件を満たす時の処理2 default: } と紹介してあったのですが、今回わたしがしたい場合の 条件分岐だと、変数は一つではなく、ある変数は空でこの変数は値が何か入っていて、またもう一つの変数は 空で・・・の時は、このSQL文、というように させたい場合には、switchでどうかけばよいのか わからないのです。 それとも、こういう条件分岐の場合は、switchを 使うべきではないのでしょうか・・・? どうかご指導よろしくお願いいたします。  

    • ベストアンサー
    • PHP
  • javascript関数の戻り値でphpの条件分岐

    こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

このQ&Aのポイント
  • DCP-J4140NでPCからの印刷がエラーでできない状況に困っています。プリンタードライバーはインストール済みで、無線LAN接続も完了しています。
  • 使用環境はWindows10で、無線LAN経由で接続しています。関連するソフト・アプリは特にありません。電話回線はひかり回線を使用しています。
  • DCP-J4140Nの印刷エラーに関して相談です。PCからの印刷ができず困っています。PCにはプリンタードライバーがインストール済みで、プリンターとの無線LAN接続も確認済みです。
回答を見る