PHPスクリプトの if 文の解釈

このQ&Aのポイント
  • PHPスクリプトの if 文「 if ○○○ : 」は、条件式が true の場合に処理を実行する制御文です。
  • 具体的には、このスクリプトでは、$_POSTが空でない場合に処理が行われます。
  • その中で、$_POST['name']が空でない場合には、$error['name']に'blank'という文字列を格納します。また、$error['name']が空でない場合には、'ニックネームを入力してください'というエラーメッセージを表示します。
回答を見る
  • ベストアンサー

PHPに詳しい方、教えてください

スクリプトの以下の部分の意味がわかりません。 「 if ○○○ : 」 は、どういう解釈すればよいのでしょうか。 わかるかたがいましたら、教えてください。よろしくお願いします。 <?php if (isset($error['name']) ? $error['name'] :''): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> --------スクリプトの解釈-------- $_POSTが空かどうかを確認し、空でなかったら、 $_POST['name'] が空かどうかを確認し、空だったら、、 $error[name] に"blank"という文字列を入れる //最初、読み込んだときは、$_POST の中身は空なので、上記の処理は行われない。 $error['name'] を確認し、値が入って入れば、$error['name']、入っていなかったら’’  ニックネームを入力してくださいと表示する。 ----------スクリプト------------------ <?php session_start(); if (!empty($_POST)){ //エラー項目の確認 if ($_POST['name'] == ''){ $error['name'] = 'blank'; } } ?> <p>次のフォームに必要事項をご記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php echo isset($_POST['name']) ? htmlspecialchars($_POST['name'],ENT_QUOTES,'UTF-8') : ''; ?>" /> <?php if (isset($error['name']) ? $error['name'] :''): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> </dd> </dl> <div><input type="submit" value="入力内容を確認する"></div> </form>

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> <?php if (isset($error['name']) ? $error['name'] :''): ?> とりあえず、三項演算子の説明。 $a = ($hoge == 1) ? "ok" : "ng"; ↑これは $hogeが[1]の時 [ok]を返し、$hogeが[それ以外]の時 [ng]という文字列を返します。 要は 括弧内が true であれば、ハテナ「?」の後のものを返し、false の時には コロン「:」の後のものを返すってことです。 これを三項演算子と言います。 んで、「if (): ~ endif」。 これは、あまり見ない書き方な気もしますが「if () { ~ }」 と同じです。 $error['name']に何か入っている場合は、その中身が返るので、if は true となり、「* ニックネームを入力してください」が表示されます。 少し書き方を変えると ↓こうなります。 <?php $hoge = isset($error['name']) ? $error['name'] :''; if ($hoge) { print '<p class="error">* ニックネームを入力してください</p>'; } ?> 蛇足ですが、毎回 同じタイトルで質問するのも どうかと思いますがー。

dartymac
質問者

お礼

よくわかりました。ありがとうございました。 >蛇足ですが、毎回 同じタイトルで質問するのも どうかと思いますがー。 プログラム初心者であり、タイトルで内容を表現することができなかったので、そうしていました。次回から気を付けます。

関連するQ&A

  • PHP初心者です。エラーが出て困っております。

    ※下記がスクリプトです。((エラーは最下部にございます。) <?php require('../dbconnect.php'); session_start(); if (!empty($_POST)) { // エラー確認 if (isset($_POST['name']) == '') { $error['name'] = 'blank'; } if (isset($_POST['mail1']) == '') { $error['mail1'] = 'blank'; ..........省略 } } // 重複アカウントチェック if (isset($_POST['mail1'])) { if (empty($error)) ; $sql = sprintf('SELECT COUNT(*) AS cnt FROM ○○ WHERE mail1="%s"', mysql_real_escape_string($_POST['mail1']) ); $record = mysql_query($sql) or die(mysql_error()); $table = mysql_fetch_assoc($record); if ($table['cnt'] > 0) { $error['mail1'] = 'duplicate'; } } if (empty($error)) { // 画像をアップロードする $upfile = date('YmdHis') . $_FILES['upfile']['name']; move_uploaded_file($_FILES['upfile']['tmp_name'], '../member_picture/' . $upfile); $_SESSION['join'] = $_POST; $_SESSION['join']['upfile'] = $upfile; header('Location: check.php'); } } // 書き直し if (isset($_REQUEST['action']) == ('rewrite')) { $_POST = $_SESSION['join']; $error['rewite'] = true; } ?> <html.....省略 <body> <h1>会員登録</h1> <div id="content"> <p>記入ください。</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlength="255" value="<?php if (isset($_POST['name'])) {echo htmlspecialchars($_POST['name'],ENT_QUOTES, 'UTF-8'); } ?>" /> <?php if (!isset($error['name'])) {$error['name']="blank";} if ($error['name'] == 'blank'): ?> <p class="error">* ニックネーム</p> <?php endif; ?> </dd>................続く ※エラーは、 Notice Undefined index: name in....... です。 どうすれば上記エラーが消えますでしょうか? また、その際はどこをどのように直せばよろしいでしょうか。 お手数をおかけ致しますが、お力をお貸しいただければ嬉しく思います。 お願い致します。

    • ベストアンサー
    • PHP
  • php ひとこと掲示板について

    お世話になります。 現在php初心者で勉強中のものです。 現在「ひとこと掲示板を作る」というのをやっています。 ちなみに書籍はたにぐちまことの よくわかるPHPの教科書です。 1 ログイン画面で ハンドルネーム アドレス 写真を入れる項目があるのですが、画像を入れても check.phpで 画像が×になります。 解決方法が知りたいです。 2 登録と押しても登録できません エラーは出ませんがMyAdominに会員登録情報のデータも送信されていませんでした。 ソース index.php <?php require('../dbconnect.php'); session_start(); if (!empty($_POST)){ //エラーの確認 if ($_POST['name'] == ''){ $error['name'] ='blank';} if ($_POST['email'] == ''){ $error['email'] = 'blank';} if (strlen($_POST['password']) < 4) { $error['password'] = 'length';} if($_POST['password'] == ''){ $error['password'] = 'blank';} $fileName = $_FILES['image']['name']; if (!empty($fileName)) { $ext = substr($fileName, -3); if ($ext !='jpg' && $ext !='gif'){ $error['image'] = 'type'; } } //重複アカウントのチェック if(empty($error)){ $sql = sprintf('SELECT COUNT(*) AS cnt FROM members WHERE email="%s"', mysql_real_escape_string($_POST['email'])); $record = mysql_query($sql) or die(mysql_error()); $table = mysql_fetch_assoc($record); if($table['cnt'] > 0){ $error['email'] = 'duplicate'; } } if(empty($error)){ //画像をアップロードする $image = date('YmdHis') . $_FILES['image']['name']; move_uploaded_file($_FILES['imge']['tmp_name'], '../member_picture/'. $image); $_SESSION['join']=$_POST; $_SESSION['join']['image'] = $image; header('Location: check.php'); exit(); }} //書き直し機能 if ($_REQUEST['action'] == 'rewrite') { $_POST = $_SESSION['join']; $error['rewrite'] = true;}?> <p>会員登録画面に必要事項を記入ください</p> <form action="" method="post" enctype="multipart/form-data"> <dl> <dt>ハンドルネーム<span class="required">必須</span></dt> <dd> <input type="text" name="name" size="35" maxlegth="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES,'UTF-8'); ?>" /> <?php if($error['name'] == 'blank'):?> <p clas="error">*ハンドルネームを入力してください</p> <?php endif; ?> </dd> <dt>メールアドレス<span class="required">必須</span></dt> <dd><input type="text" name="email" size="35" maxlegth="225" value="<?php echo htmlspecialchars($_POST['email'],ENT_QUOTES,'UTF-8');?>" /> <?php if($error['email'] == 'blank'): ?> <p class="error">*メールアドレスを入力してください</p> <?php endif; ?> <?php if($error['email'] =='duplicate'): ?> <p class="error">*指定されたメールアドレスは既に登録されています</p> <?php endif; ?> </dd> <dt>パスワード<span class="required">必須</span></dt> <dd><input type="password" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES,'UTF-8'); ?>" /> <?php if($error['password'] == 'blank'): ?> <p class="error">*パスワードを入力してください</p> <?php endif; ?> <?php if($error['password'] == 'length'): ?> <p class="error">*パスワードは4文字以上で入力してください</p> <?php endif; ?></dd> <dt>写真など</dt> <dd><input type="file" name="image" size="35"/> <?php if ($error ['image'] == 'type'): ?> <p class="error">写真などは[.gif]または[.jpg]の画像を指定してください</p> <?php endif; ?> <?php if (!empty($error)): ?> <p class="error">恐れ入りますが画像を改めて指定してください</p> <?php endif; ?> </dd> <div><input type="submit" value="入力内容を確認する"/></div></form> check.php <?php session_start(); require('../dbconnect.php'); if(!isset($_SESSION['join'])) { header('Location: index.php'); exit();} if(!empty($_POST)) { //登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", email="%s", password="%s",picture="%s",created="%s"', mysql_real_escape_string($_SESSION['join']['name']), mysql_real_escape_string($_SESSION['join']['email']), mysql_real_escape_string(shal($_SESSION['join']['password'])), mysql_real_escape_string($_SESSION['join']['image']), date('Y-m-d H:i:s')); mysql_query($sql) or die(mysql_error()); unset($_SESSION['join']); header('Location: thanks.php'); exit(); }?> <form action="" method="post" <input type="hidden" name="action" value="submit"/> <dl> <dr>ハンドルネーム</dr> <dd> <?php echo htmlspecialchars($_SESSION['join']['name'],ENT_QUOTES, 'UTF-8'); ?></dd> <dt>メールアドレス</dt> <dd> <?php echo htmlspecialchars($_SESSION['join']['email'],ENT_QUOTES, 'UTF-8'); ?></dd> <dt>パスワード</dt> <dd>[表示されません]</dd> 文字制限でここまでです すみません。 お願いいたします。

    • ベストアンサー
    • PHP
  • $error配列がUndefined indexに

    簡単な入力フォームを初心者用の本に沿って作成しているのですが、 入力フォームのチェックで$error配列を使う部分で、 nameがblankかどうか確認する部分で、なぜかnameがNotice: Undefined indexとなってしまいます。 お詳しい方、下記のコードを見て何か原因をお分かりになりますでしょうか? <?php session_start(); if(!empty($_POST)){ if($_POST['name']==''){ $error['name']='blank'; } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Upload</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <p>次のフォームに必要事項をご記入下さい。</p> <dl> <dt>ニックネーム<span class="required">必須</span></dt> <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>" /> <?php if ($error['name'] == 'blank'): ?> <p class="error">* ニックネームを入力してください</p> <?php endif; ?> </dd> </dl> </form> </body> </html>

    • 締切済み
    • PHP
  • PHPの会員登録システムのエラーについて

    現在よくわるPHPの教科書という本を参考に、会員登録システムをつくっています。 しかし、本に書いてある内容をそのまま書いて実行してみてもエラーがでてきます。 そこでいろいろとネットで調べてみて以下のようなコードになりました。 <?php //$error = array('name'=>'', 'email'=>'', 'password'=>''); session_start(); if (!empty($_POST)) { if ($_POST['name'] === '') { $error['name'] = 'blank'; } if ($_POST['email'] === '') { $error['email'] = 'blank'; } if (strlen($_POST['password']) < 4) { $error['password'] = 'length'; } if ($_POST['password'] === '') { $error['password'] = 'blank'; } if (empty($error)) { $_SESSION['join'] = $_POST; header('Location: http:./check.php'); exit(); } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>会員登録</title> </head> <body> <form action="" method="POST"> ユーザーID<input type="text" name="name" value="<?php print isset($_POST['name']) ? htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'):"";?>" /> <?php if ($error['name'] === 'blank') { ?> <p class="error">*ユーザーIDを入力してください</p> <?php } ?> メールアドレス<input type="text" name="email" value="<?php print isset($_POST['email']) ? htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'):"";?>" /> <br> <?php if ($error['email'] === 'blank') { ?> <p class="error">*メールアドレスを入力してください</p> <?php } ?> パスワード<input type="password" name="password"> <br> <?php if ($error['password'] === 'blank') { ?> <p class="error">*パスワードを入力してください</p> <?php } ?> <?php if ($error['password'] === 'length') { ?> <p class="error">*パスワードは4文字以上で入力してください</p> <?php } ?> <input type="submit" value="登録"> </form> </body> </html> しかしこれでもエラーがでます。以下のエラー Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /home/****/www/join/index.php on line 39 Parse error: syntax error, unexpected ':' in /home/kazu94/www/join/index.php on line 39 誰かこのエラーの謎を解いてください お願いします(泣)

    • 締切済み
    • PHP
  • 「PHP初心者」入力フォームの件

    フォームから名前を入力して 送信後、その名前を表示させ 未入力だとエラーの言葉を表示させるサンプルになります。 ------------------------------------------- <html> <body> <form action="" method="post"> <p>【お名前】<input type="text" name="name"></p> <p><input type="submit" value="送信"></p> </form> </body> </html> <?php function Aa($str){ return htmlspecialchars($str, ENT_QUOTES, "UTF-8"); } if($_POST["name"] == ""){ echo "名前を入力してください。"; }else{ $name = Aa(@$_POST["name"]); echo $name; } ?> ------------------------------------------- 上記は正しい例になりますが 最初に頭に浮かんで書いてみたのは 「isset」を使った以下の構文でした。 ------------------------------------------- if(isset($_POST["name"])){ $name = Aa(@$_POST["name"]); echo $name; }else{ echo "名前を入力してください。"; } ------------------------------------------- この構文では名前が未入力の場合でも エラーメッセージの「名前を入力してください。」が出力されず 表示されません。 (もしnameが入力されていればnameを出力。 入力されていなければechoの「名前を入力してください」を 出力という「==」と同じような解釈で 「isset」を使ってみたのですが間違いでした。 この場合「isset」はどうして使えないのでしょうか?

    • ベストアンサー
    • PHP
  • phpのエラーチェックについて質問です!

    phpのエラーチェックについて質問です! エラーチェックについてです><; if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; と記入してエラーメッセージを表示したい場所に記載してます。 しかし、フォームで <form action="regist2.php" name="form" method="post"> でsubmit押すとフォームが空白でもactionでregist2.phpに送られてしまいます><; エラーがなければ、そのままsubmitでaction=regist2.phpに送りたいと考えております。 なにか解決方法はないでしょうか? ご教授お願いします!!!!!!!!

    • 締切済み
    • PHP
  • <?php

    <?php if(isset($_POST['name'])){ $name = htmlspecialchars($_POST['name']); if (empty($name)) { $message = '未入力があります'; } } if(isset($_POST['regist'])) { $regist = htmlspecialchars($_POST['regist']); if($message) { header('Location:regist2.php'); } } ?> <html> <form action="regist2.php" name="form" method="post"> <div align=left> 名前<input type="text" name="name" maxlength="16" istyle="1" format="M" mode="hiragana" style="-wap-input-format:&quot;*&lt;ja:h&gt;&quot;; -wap-input-format:*M;" /><br /> <input type="submit" name="regist" value="送信" /> </form> と携帯サイトを作成してるのですが、空白でもそのままregist2にいってしまい困っております。 空白の場合はsubmit押してもエラーを表示させたいのです 問題がなければ、そのままregist2.phpへいかせる方法はないでしょうか? ご教授お願い致します。

    • 締切済み
    • PHP
  • htmlとphpのデータ受け渡し???

    いつもお世話になり誠にありがとうございます。 標記の件。 まだ、ボク自身、解っていないようです。 htmlとphpのソースコードを提示します。 どうすればデータの受け渡しができるか? 添削してくださらないでしょうか? html <!--入力画面--> <form action = "./Blog.php" method = "get"> <label class="label" for="name">お名前(ニックネーム)</label> <center><input id="name" type="text" name="name"></center> <label class="label" for="e-mail">メール</label> <input id="e-mail" type="e-mail" name="e-mail"> <label class="label" for="category">カテゴリー</label> <input id="category" type="category" name="categoryl"> <label class="label" for="message">本文</label> <textarea name="area1" style="color:rgb(8, 8, 8); font-size:100%;" cols="50" rows="30"></textarea><br> <input type="submit" name="confiem" value="確認"> </form> CSS <meta charset="utf-8"> <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['e-mail'] = $_POST['e-mail']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['e-mail'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!--確認画面--> <?php if( $mode == 'input' ){ ?> お名前(ニックネーム)<?php echo $_POST['name'] ?><br> Eメール<?php echo $_POST['e-mail'] ?><br> カテゴリー<?php echo $_POST['category'] ?><br> 本文<br> <?php echo nl2br($_POST['message']) ?><br> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> <?php } else { ?> <!--完了画面--> <?php } ?> 上記の通りです。 全然ダメだと思います。 添削のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • php入力画面から確認画面へ情報の受け渡しについて

    php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

    • ベストアンサー
    • PHP
  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう