質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

3回答

1006閲覧

2列のカードに同じものが出力される

moai8739

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/06/17 03:26

編集2021/06/23 00:38

前提・実現したいこと

DBの要素を2列のカードに出力したいです。
料理一覧のようなサイトを開発しています。
bunruiには丼や肉などが入ります。
ryori_idは1から順に入ります。

--ryoriテーブル作成
CREATE TABLE health.ryori
( ryori_id CHAR(4) NOT NULL ,
ryori_name VARCHAR(50) NOT NULL ,
bunrui VARCHAR(50) NOT NULL ,
enbun double(11,1) NOT NULL ,
cal INT NOT NULL ,
PRIMARY KEY (ryori_id)
) ENGINE = InnoDB;
このような構造になっています。

発生している問題・エラーメッセージ

修正版です。
カードが表示されません。{}等見直しましたが、改善されません。

エラーメッセージ if (isset($_REQUEST['keyword'])) { $sql=$pdo->prepare('select * from ryori where ryori_name like ?'); $sql->execute(['%'.$_REQUEST['keyword'].'%']); } else { $sql=$pdo->prepare('select * from ryori'); $sql->execute([]); } for ($i = 0; $i < $sql->rowCount(); $i++) { $row = $sql->fetchColumn($i); if($i % 2 == 0) { echo'<div class="card-group">'; echo'<div class="card">'; echo'<img src="',$row['url'],'" alt="" >'; echo'<div class="card__textbox">'; echo'<div class="card__titletext">'; echo'' ,$row['ryori_name'],''; echo'</div>'; echo'<div class="card__overviewtext">'; echo'カロリー:',$row['cal'],' <br>'; echo'塩分:',$row['enbun'],''; echo'</div>'; echo'</div>'; echo'</div>'; } else { echo'<div class="card">'; echo'<img src="',$row['url'],'">'; echo'<div class="card__textbox">'; echo'<div class="card__titletext">'; echo'' ,$row['ryori_name'],''; echo'</div>'; echo'<div class="card__overviewtext">'; echo'カロリー:',$row['cal'],' <br>'; echo'塩分:',$row['enbun'],''; echo'</div>'; echo'</div>'; echo'</div>'; echo'</div>'; } }

試したこと

イメージ説明
ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

xamppのローカルで動かしています。
bootstrap4を入れてます。
スマホ環境を想定してます。
chromeにて動作確認してます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

間違えました、、これでどうでしょうか。

php

1for ($i = 0; $i < $sql->rowCount(); $i++) { 2 $row = $sql->fetch(PDO::FETCH_ASSOC); 3 ... 4}

投稿2021/06/23 10:48

yh1224

総合スコア653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

コメントでコードが埋め込めないので修正版です。

php

1for ($i = 0; $i < $sql->rowCount(); $i++) { 2 $row = $sql->fetchColumn($i); 3 if ($i % 2 == 0) { 4 // 左の列を出力 5 } else { 6 // 右の列を出力 7 } 8}

投稿2021/06/19 14:23

yh1224

総合スコア653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moai8739

2021/06/23 00:40

カードが表示されなくなりました。 コードを質問文のところに上げ直したのご確認いただけますか?
guest

0

やり方は色々あると思いますが、例えば左の列と右の列を交互に出し分けるとするなら、以下のような書き方ができると思います。

php

1for ($i = 0; $i < count($sql); $i++) { 2 $row = $sql[$i]; 3 if ($i % 2 == 0) { 4 // 左の列を出力 5 } else { 6 // 右の列を出力 7 } 8}

投稿2021/06/18 15:22

yh1224

総合スコア653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moai8739

2021/06/18 16:19

Fatal error: Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, PDOStatement given in C:ファイル:181 Stack trace: #0 {main} thrown in C:ファイル.php on line 181 と出ます。 181行目には頂いたfor ($i = 0; $i < count($sql); $i++){が入ってます 177~180行目には } else { $sql=$pdo->prepare('select * from ryori'); $sql->execute([]);} が入っています ここはif文になっており、検索機能が入っています。 173行目if (isset($_REQUEST['keyword'])) { 174行目 $sql=$pdo->prepare('select * from ryori where ryori_name like ?'); 175行目 $sql->execute(['%'.$_REQUEST['keyword'].'%']); POSTされた$keywordをissetで確認して文字列検索をしてます。 issetで$keywordがなかったときは177~180行目が実行された後、 料理のカードが表示されます。 不足している部分があればご指摘いただければと思います。 xamppは最新Verです。
yh1224

2021/06/18 22:46

失礼しました。 $sql は配列でなく PDOStatement だったので、count($sql) は $sql->rowCount() に直して下さい。
yh1224

2021/06/18 22:48

$row = $sql[$i] も、$sql->fetchColumn($i) に直して下さい。 $sql は PDOStatement 型なので、こちらのメソッドが使えます。(これが Traversable なので、foreach でもループできるようになっています。) https://www.php.net/manual/ja/class.pdostatement.php
moai8739

2021/06/19 10:19

カードは表示されますが、料理名、カロリー、塩分の表示に対して Undefined variable $row in  のエラーと  Trying to access array offset on value of type null in が出ています。 $rowが定義されていないと思われますが、原因がわかりません。 2つ目のエラーは配列に値がない? こちらも原因がわかりません。
yh1224

2021/06/19 14:21

エラーメッセージが修正後のコードと照らし合わせてどこで出たかも示して下さい。
moai8739

2021/06/20 09:29

コード 181 for ($i = 0; $sql -> rowcount() ; $i++) { $sql -> fetchColumn($i); if($i % 2 == 0) { echo'<div class="card-group">'; 185 echo'<div class="card">'; echo'<img src="',$row['url'],'" alt="" >'; echo'<div class="card__textbox">'; echo'<div class="card__titletext">'; 189 echo'' ,$row['ryori_name'],''; 190 echo'</div>'; echo'<div class="card__overviewtext">'; 192 echo'カロリー:',$row['cal'],' <br>'; echo'塩分:',$row['enbun'],''; echo'</div>'; 195 echo'</div>'; echo'</div>'; } else { echo'<div class="card">'; echo'<img src="',$row['url'],'">'; 200 echo'<div class="card__textbox">'; echo'<div class="card__titletext">'; echo'' ,$row['ryori_name'],''; echo'</div>'; echo'<div class="card__overviewtext">'; 205 echo'カロリー:',$row['cal'],' <br>'; echo'塩分:',$row['enbun'],''; echo'</div>'; echo'</div>'; echo'</div>'; 210 echo'</div>'; } } ?> 以下、ブラウザのエラー 左の列のエラー Warning: Undefined variable $row in C:ファイル on line 189 Warning: Trying to access array offset on value of type null in C:ファイル on line 189 カロリー: Warning: Undefined variable $row in C:ファイル on line 192 Warning: Trying to access array offset on value of type null in C:ファイル on line 192   塩分: Warning: Undefined variable $row in C:ファイル on line 193 Warning: Trying to access array offset on value of type null in C:ファイル.php on line 193 右の列のエラー Warning: Undefined variable $row in C:ファイル on line 202 Warning: Trying to access array offset on value of type null in C:ファイル on line 202 カロリー: Warning: Undefined variable $row in C:ファイル on line 205 Warning: Trying to access array offset on value of type null in C:ファイル on line 205   塩分: Warning: Undefined variable $row in C:ファイル on line 206 Warning: Trying to access array offset on value of type null in C:ファイル on line 206 左右の列は同じエラーなので右は不要かと思いますが、念の為。 よろしくお願いします。
yh1224

2021/06/20 14:37

Undefined variable $row 変数 $row が定義されていないということは、変数 $row が定義されていないということです。 別の回答で修正版を記述したのでそちらを参照してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問