if文のネストについて

このQ&Aのポイント
  • PHPとMySQLでデータサイトを作成中です。if文のネストに関して質問があります。
  • データベースに保存された血液型データを表示する際に、「型」という文字を付けたくありません。$row['blood_type']が空だった場合には、「型」を付けずに表示したいです。
  • ネストにしてみましたが、何度やってもsyntax errorになってしまいます。エラーを出さずに解決する方法を知っている方、ご教示いただけないでしょうか?
回答を見る
  • ベストアンサー

if分のネストについて

現在PHPとMySQLでデータサイトを作成しています。 詳しい方にお聞きしたいことがあります。 データベースは下記のようにしています。 name|blood_type(VARCHAR型) 佐藤|A 田中| 加藤|AB そこでbloodというチェックボックスにチェックが入っていれば○型というデータを表示するようにしています。 print( $_GET["dis"][2] == "blood" ) ? '<td><a href="http://○○.com/">'.$row['blood_type'] . '型</a></td>' : '' ; 抽出した血液型データの後ろに「型」を付けているのですが、$row['blood_type']が空だった場合「型」という文字を付けたくありません。 自分なりに考えネストにしてみたのですが、何度やってもsyntax errorになってしまいます。 どのようにすれエラーを出さずに、$row['blood_type']が空だった場合「型」を付けずに済むでしょうか? ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

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

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

  • ベストアンサー
回答No.1

空だったときに何をしたいんですか? このprint()文の情報はでていいのでしょうか? 仮に出るとすると、<a>要素が空の文字で出ることになりますが、いいのでしょうか? > print( $_GET["dis"][2] == "blood" ) ? '<td><a href="http://○○.com/">'.$row['blood_type'] . > '型</a></td>' : '' ; 三項演算子使ってるし、$row['bood_type']についても三項演算子使えば済むのでは。 print( $_GET["dis"][2] == "blood" ) ? '<td><a href="http://○○.com/">'. ($row['blood_type'] == '' ? $row['blood_type'] . '型' : '') . '</a></td>' : ''; こんな風にごちゃごちゃなるくらいなら、1つ1つロジックで処理した方がいいと思いますが。 if ($_GET["dis"]["2] != "blood") {  return; } $htmlTag = '<td><a href="http://○○.com/">%s</a></td>'; echo sprintf($htmlTag, ($row['blood_type'] != '' ? $row['blood_type'] . '型' : '')); みたいな。

m6533753774
質問者

お礼

naktakさん 回答ありがとうございます。 >print( $_GET["dis"][2] == "blood" ) ? '<td><a href="http://○○.com/">'. ($row['blood_type'] == '' ? $row['blood_type'] . '型' : '') . '</a></td>' : ''; ご教示頂いたコードで無事できました。 <a>タグの中は空で出したかったので助かりました。 とても勉強になりました。 ありがとうございました。

その他の回答 (1)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

print ($_GET["dis"][2] == "blood" ) ? '<td><a href="http://○○.com/">' . $row['blood_type'] . '型</a></td>' : '' ; 三項演算子がすでにあるので、三項演算子を重ねるのは避けたいですねぇ。三項演算子を重ねると、あとで他人が読み取るのに苦労します(数日後の自分も「他人」です)。 #マニュアルでも「重ねないこと」を推奨しています<三項演算子 それほど三項演算子で有利になる(読みやすくなる)とも思えないので、素直に if で括ってください。 ・ $_GET["dis"][2] が "blood" だったらtd要素を出力する ・ $row['blood_type']が空白でなかったらanchor要素を出力する ・ $row['blood_type']が空白だったら何も出力しない という条件なら if ($_GET["dis"][2] === 'blood' ) { print '<td>'; if ($row['blood_type'] !== '') { print '<a href="http://○○.com/">' . $row['blood_type']. '型</a>'; } print '</td>'; } だと思います。空のtd要素の見映えが気になるなら if ($_GET["dis"][2] === 'blood' ) { print '<td>'; if ($row['blood_type'] !== '') { print '<a href="http://○○.com/">' . $row['blood_type']. '型</a>'; } else { print '&nbsp;'; } print '</td>'; } でもいいです。

m6533753774
質問者

お礼

agunuzさん 回答ありがとうございます。 三項演算子のネストは非推奨だったんですか。 たしかに記述した自分でも分かりづらいですね。 ご教示頂いたコードで再度試してみます。 ありがとうございました。

関連するQ&A

  • チェックボックスと入力フォームが一致しない

    チェックボックスにチェックを入れた箇所のみ入力フォームがあり、 入力フォームにテキストを入れ、チェックを入れた箇所のみDBにデーターがSETされるような形で作りたいのですが、以下のコードですと、 チェックされた部分にデータは入るのですが、ずれてデータがセットされてしまいます。 チェック如何に関わらず、チェックボックスのデータを上から、チェックしたボックスに順番にデータが入ってしまうような形です。 ループの部分がおかしいのでしょうか? 昨日からいろいろ試しているのですが、うまくいきません、、、 よろしくお願いします。 ★入力前 □ [あああ] □ [いいい] □ [ううう] □ [えええ] □ [おおお] ★データ入力 □ [あああ] ■ [イイイ] □ [ううう] ■ [エエエ] □ [おおお] ★データ反映後 □[あああ] □[あああ] □[ううう] □[イイイ] □[おおお] ソースコードはこのような形になっています。 ■入力フォーム部分 <?php while ($row = mysql_fetch_array($result)) { //登録状態判別 if($row[reg] == 0){ $reg_status = '<span style="color:#ff0000;">未入金</span>'; }elseif($row[reg] == 1){ $reg_status = '<span style="color:#0000ff;">会員</span>'; } $clo_date =$row["clo_date"]; $clo_date2 = str_replace('-', '', $clo_date); echo ' <tr> <td><input type="checkbox" value="'.$row["reg"].','.$row["dispName"].','.$row["userName1"].','.$row["userName2"].','.$row["userID"].','.$row["tel"].','.$row["email"].','.$row["add_date"].','.$row["up_date"].','.$row["clo_date"].','.$row["no"].','.$row["passwordCheck"].'" name="user[chk][]" /></td> <td>'.$reg_status.'</td> <td>'.$row["dispName"].'</td> <td>'.$row["userName1"].''.$row["userName2"].'</td> <td>'.$row["userID"].'<input type="hidden" name="userID[]" value="'.$row["userID"].'" /></td> <td>'.$row["tel"].'</td> <td>'.$row["email"].'<input type="hidden" name="user[email][]" value="'.$row["email"].'" /></td> <td>'.$row["add_date"].'</td> <td>'.$row["up_date"].'</td> <td><input type="text" size="8" value="'.$clo_date2.'" name="user[clo_date][]" /> </tr> '; } ?> ■MYSQL接続データSET部分 $i = 0; foreach($_POST['user']['chk'] as $val){ $clos = $_POST['user']['clo_date'][$i]; //valueの値を配列に分割 $split = explode(",", $val); $sql = "UPDATE user SET reg =1 WHERE userID = '$split[4]'"; $sql2 = "UPDATE user SET clo_date ='$clos' WHERE userID = '$split[4]'"; mysql_query("SET NAMES utf8",$mysql_con); mysql_query($sql,$mysql_con); mysql_query($sql2,$mysql_con); }

    • 締切済み
    • PHP
  • SQL文のエラー原因がわかりません・・。

    これの何処が間違っているのでしょうか? 本のコードをそのまま手打ちしてるだけなんですが・・・。 何処かにエラーがあるんでしょうか?? CREATE TABLE aliens_abduction ( last_name varchar(30) , first_name varchar(30) , when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) , how varchar(100) , see varchar(10) , other varchar(100) , email varchar(50) ); エラー内容↓ #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'when varchar(30) , howlong varchar(30) , howmany varchar(30) , who varchar(100) ' at line 4

    • ベストアンサー
    • MySQL
  • ループ文で呼び出したデータの複製方法

    お世話になっております、 PHP初心者の者です。 <form method="post" action="links-loop.php"> <table> <?php for($a = 1; $a < 10; $a++){ while($row=mysql_fetch_assoc($result)) { print "<tr>"; print "<td>"."$a"."</td>"; print "<td>id = {$row["id"]}</td>"; print "<td>name = {$row["name"]}</td>"; print '<td><a href="http://localhost/test/'."{$row["slug"]}".'">'."{$row["slug"]}".'</a></td>'; print '<td><img width="200" height="200" src="'."{$row["links_img"]}".'"/></td>'; print "<td>{$row["description"]}</td>"; print '<td><input type="button" value="複製"></td>'; print "</tr>"; $a++; } } ?> </table> </form> 現在ループ処理によってDBから投稿した記事を一覧で表示しています。 表示された一覧記事一つ一つにボタンをつけてボタンを押したら その記事をDB上に複製する方法が思いつかずに困っております。 できればページ遷移を行わずに複製が理想なのですが、 この場合<input type="text" value="{$row["id"]}" >を非表示で呼び出す形で宜しいのでしょうか? この場合連続で呼び出されているデータから一つの記事だけ選択して 複製するにはどのような処理にすればよいのでしょうか? 中々解決策を探しても見つけることができませんでした。 もし宜しければご回答いただけましたら幸いでございます。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Ifが正常に動作しない。

    下記のコードで、login.htmlからデータを適当に入力し てかえってくる処理が全て、空の表示になってしまう。 Ifが正常に動作しません、正常に動作するようにするにはどうすればいいのでしょうか? <login.html> <html> <body> <table> <tr> <td>id:</td> <td><input type="text" name="id"></td></tr> <tr><td>password:</td> <td><input type="password" name="pass"></td></tr> </table> <form methed="post" action="http://session.asp"> <input type="submit" name ="sb" value="login" > </form> </body> </html> session.asp <html> <body> <% if session("id")="" Or session("id")= null then if request("pass")="" Or request("id")= null then response.write "空" elseif request("pass")= "1234" then session("id")="login" response.write "ログインしました。" else response.write "違う" end if else response.write "ログインしました" response.write session("id") end if %> </body> </html>

  • 文字列を time 型に変換するには。

    文字列を time 型に変換するには。 お世話になります。 PostgreSQL 8.2 & PgAdmin 1.6.3(WinServer 2003)を使用しています。 varchar 型のカラムに格納されている時刻を表す文字列('9:15' など)を time 型に変換してビューを作成する必要があるのですが、できずに困っています。 具体的には... 「table1」というテーブルに「時刻」(varchar 型)という名前のカラムを作成し、「9:15」という文字列を格納しておきます。 これをもとにビュー(view1)を作ろうとしているのですが、select 文のところで 、ERROR: syntax error at or near "時刻" SQLステート:42601 というエラー(構文エラー)が出てしまいます。  select time 時刻 from table1  結果:ERROR: syntax error at or near "時刻" SQLステート:42601 ちなみに、時刻を文字列で指定してやると、ちゃんと time 型で結果が返ります。  select time '9:15'  結果:09:15:00 抜本的に方法が間違っているとはおもうのですが、いくら調べてもこれを解決できるようなサイトが見当たりませんでした。 文字列を time 型に変換するにはどのようにしたらよいのかご教示いただけないでしょうか。 よろしくお願いします。

  • テーブル作成でカラム名で配列を

    MySQLを勉強している初心者です、よろしくお願いします。 テーブル作成時、カラム名を配列を使ってできないものでしょうか? (data1 data2 data3 data4 とするのが面倒なのですが) CREATE TABLE table_name ( code int(6) , data1[100] int(10) , data2[50] varchar(20) , data3[20] varchar(25)); ERROR 1064:You have an error in your SQL syntax. となります。 また二次元配列はどのようにしたらよいのでしょうか? よろしくお願いします。

  • 以下のエラーメッセージ解決法について

    Parse error: syntax error, unexpected '@' in /home/jouka1/www/kanrisha/dis_tbl_year.php on line 47 というエラーメッセージです。助けて下さい。 <?php /* 登録年度一覧表示 dis_tbl_year.php */ session_start();  一部省略~ //データベース関連のデータをインクルードします //MySQLに接続します $rows = mysql_num_rows($result); //行数を取得 printf("<CENTER><H2><登録年度一覧></H2></CENTER>"); print("<table border=\"1\" align=\"center\">\n"); print("<TR><TH>年度ID</TH><TH>年度</TH></TR>\n"); if ($rows > 0){ for ($j = 0;$j < $rows;$j++) { print("<FORM ACTION=\"hensyu_year.php\" METHOD=\"POST\" TARGET=\"right\">"); $data = mysql_fetch_object($result); $year_id = $data->year_id; $year = $data->year; print("<TR>"); print("<TD>$year_id</TD>"); print("<TD>$year</TD>"); print("<INPUT TYPE = \"hidden\" NAME = \"year_id\" VALUE = \"$year_id\">"); print("<TD><INPUT TYPE = \"submit\" NAME = \"hensyu\" VALUE = \"編集\"></TD>"); print("<TD><INPUT TYPE = \"submit\" NAME = \"sakujyo\" VALUE = \"削除\"></TD>"); print("</TR>");  print("</FORM>"); //ちなみに47行目はここです } } mysql_free_result($result); // 検索結果の解放 mysql_close($con);    // データベースとの接続切断 print("</TABLE>\n"); print("</BR>\n"); print("<CENTER>\n");   print("<a href = \"regist.php\">新規登録</a>"); print("</CENTER>\n"); ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHP+MySQL テーブルが表示されない

    下記のように、MySQLのデータをPHPでテーブル形式で表示しています。 【PHP部分】 $check_sql = "SELECT * FROM table WHERE ( check1 LIKE '%東京%' OR check2 LIKE '%品川%' OR check3 LIKE '%%' ) AND hinichi > NOW( )"; $check_recordSet = mysql_query($check_sql); $check_rows = mysql_num_rows($check_recordSet); if($check_rows){ while($check_row = mysql_fetch_array($check_recordSet)) { $checktable = "<tr>"; $checktable .= "<td>".$check_row["check1"]."</td><td>".$check_row["check2"].$check_row["check3"]."</td>"; $checktable .= "</tr>\n"; } $msg = $check_rows."件みつかりました"; } 【HTML部分】 <?= $msg ?> <table> <?= $checktable ?> </table> $checktable が表示されないのですが、 どうも間違えている箇所がわかりません。 $msgは表示されます。 また、$check_sqlは、PHPMyAdmin上で試していますが、エラーは出ておりません。 ご存じの方いらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • PHP
  • MySQLのデータベースを呼んで日付表示をする点で困っています。

    MySQLのデータベースを呼んで日付表示をする点で困っています。 フィールド名:k_pvm 型:DATE データ:2009-12-21 phpでキーを元に呼び出して表示しています。表示形式は、d-m-Yで21-12-2009と表示させたいのですが、うまくできません。 echo "<tr><td>Rekisteri: </td><td><input type='hidden' name='kpv'>" . date('d-m-Y', $row['k_pvm']) . "</td></tr>"; 表示> 01-01-1970 以下、日付データ部分を変えて試してみました。 date($row['k_pvm']) > 2009-12-21 $row['k_pvm'] > 2009-12-21 date('d-m-Y') > 2009-12-22 (試した当日の日付) 試した3点については理解できますが、呼び出したデータに表示形式を指定するとどうして、01-01-1970を表示するのか解りません。直接dateで表示するのではなく、何か手順を踏まないといけないのでしょうか。

    • ベストアンサー
    • MySQL
  • PHP&MySQLのエラー(syntax)への対処

    PHPとMySQLを使った検索プログラムを作ってみているのですが、実際に動かしてみると、検索結果表示画面に以下のようなエラーがでます。 SELECT * FROM (テーブル名) where You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 いろいろとPHPに関するサイトやQ&Aを見て考えてみたのですが、解決策がわかりません。 アドバイス、ご指摘の程お願い戴けないでしょうか。 以下が検索結果表示のコードになります。 <body> <?php $debug = false; //DB Connect $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($HTTP_POST_VARS); //Error Check //Request Method Check if($_SERVER["REQUEST_METHOD"] != "POST") { echo "Error: invalid method"; exit(); } //Create Query $query = "SELECT * FROM テーブル名"; //Create Search Criteria $where = array(); if (isset($_POST['type'])and($_POST['type'] !== '')) { $where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type'])); } if (isset($_POST['name'])and($_POST['name'] !== '')) { $where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name'])); } if (isset($_POST['address'])and($_POST['address'] !== '')) { $where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address'])); } if (isset($_POST['description'])and($_POST['description'] !== '')) { $where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description'])); } if (count($where <> 0)) { $query .= ' where ' . implode('and', $where); } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <h2>Search Result</h2><br> <?php if($num_rows == 0) { $message = "No date"; } else { $message = $num_rows ."hits"; echo $message; } ?> <table> <tr> <td>Type</td> <td>Company</td> <td>Address</td> <td>Description of Business</td> </tr> <?php while($row = mysql_fetch_assoc($result)): ?> <tr> <td><?php echo $row['type']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['description']; ?></td> </tr> <?php endwhile; ?> </table> </body> 解決策をご指導よろしくお願い申し上げます。

    • ベストアンサー
    • PHP

専門家に質問してみよう