こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpについて

phpで質問です。
データベースから引っ張ってきたデータを
while文の中にechoでa href="article?tag=row[3]"を表示させたいのですがどうすればいいですか?
while( $row = $res->fetchArray() ) {

echo '<a class="link_button" href="articletable?tag='.$row[3].'" method="get"">'.$row[3].'<span>'.'</a>'.''<a class="link_button" href="articletable?tag='.$row[4].'" method="get"">'.$row[4].'<span>'.'</a>'
}

また、if文でrow3もしくはrow4がnull(何も書いていない)の時,
強制的に「a href="article?tag=more」にさせたいのですがどうすればいいですか?

投稿日時 - 2020-10-22 14:37:22

QNo.9814319

困ってます

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

>4の方にmoreが…
あ~、そういうのが実地で細かく検証出来ないのがオンライン問答の難しいところですね。恐らくDBから読み込まれた各データが、 $row に展開格納される時点で想定外の文字列が含まれてるんだと思いますが…

とりあえず「AまたはBの時に~」という条件分岐式の記述は…

if ( empty($row[3]) || empty($row[4]) ) {
$row[3] = $row[4] = 'more';
}

~みたいな感じでOKです。上記で「 $row[3] または $row[4] のどちらかが "empty" だった場合」という意味になります。

非表示云々~というのがちょっと外野からだとどういう意味なのか分かりませんでしたので。とりあえずの記述例を提示するだけにして置きます。


P.S.
揚げ足取りみたいになりますが、enpty では無く empty です(nでは無くmです)。

PHPに限らずプログラム構文は1文字でも違えば全く別の意味になったり、構文として意味を成さなくなったりします。細かい事ですが、常に正しい表記を意識付けてそれを普段から実践して行かないと、本番でも日頃の変な癖が出てしまいエラーになります。そして本人はそれを普段から無意識で習慣化してしまっているため、なかなかミスに気付く事が出来ません。

最初のうちは面倒でも必ず正規通りの正しい、省略しない書き方を習慣付けて置いた方が後々で面倒が少なくなります。

投稿日時 - 2020-10-23 16:50:35

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

とりあえず一番簡単な記述式は…

while( $row = $res->fetchArray() ) {
if ( empty($row[3]) ) {
$row[3] = 'more';
}
if ( empty($row[4]) ) {
$row[4] = 'more';
}
echo '<span><a class="link_button" href="articletable?tag=', $row[3], '" method="get">', $row[3], '</a><a class="link_button" href="articletable?tag=', $row[4], '" method="get">', $row[4], '</a></span>';
}

~みたいな感じですね。ただしPHPは変数の型判別が良い意味でいい加減なので、上記の記述式の場合だと、仮に変数 "" の中身が純粋に null で無く、例えば "0" や未定義だった場合でもマッチして "more" に置換処理されますのでご注意を。厳密に null の時にだけマッチさせたいのであれば…

if ( is_null($row[3]) ) {~}

~みたいに記述する必要があります。

P.S.
echo文で書き出されるHTMLに奇妙な部分があったので、一般的に正しいとされる構文に修正しています。質問者が何か意図があってそういう記述をしているのであれば、適宜再修正して適用してください。

投稿日時 - 2020-10-22 15:17:09

補足

ご回答ありがとうございます。
if3.4のところなんですが、値は文字のみでして、
ご回答いただいたコードだと3も4もenptyの場合、4の方にmoreが書かれてしまいました。(3は空白のまま)
そこでなんですが、両方ともenptyの場合3もしくは4どちらか一方を残し片方を非表示にする方法はありませんか?
難しければ
if(enpty($3もしくは4))
{$row[3と4]='more'(3と4両方にmoreを入れるつもり。
}
こんな感じですか?
基本的には、非表示の方を実装したいです。

投稿日時 - 2020-10-23 09:00:04

お礼

ありがとうございました。

投稿日時 - 2020-11-06 16:39:06

あなたにオススメの質問