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

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

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

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

Q&A

解決済

2回答

1930閲覧

PHPでmySQLを利用するのですが・・・

P_Beginner

総合スコア99

PHP

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

0グッド

0クリップ

投稿2018/04/28 04:12

SQLのデータベースの一覧表示やデータの追加,削除,編集機能を追加するとき,

PHP

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>ページのタイトル</title> 6</head> 7<body> 8 <h2>データ一覧&検索&削除</h2> 9 <form method="get" action="test2018-20.php"> 10 <input type"text" name="price">円以上で絞り込む 11 <input type="submit" value="検索"><br> 12 </form> 13 <form method="get" action="test2018-20.php"> 14 <input type"text" name="search">から始まる品名で絞り込む 15 <input type="submit" value="検索"> 16 </form> 17 <?php 18 //ini_set('display_errors',1); 19 20 //MySQLのデータベースサーバへ接続(サーバ名、接続ユーザ名、パスワード、データベース名の順に指定) 21 $link=mysqli_connect("localhost","root","root","test2018"); 22 23 //SQL文を指定 24 if($_GET['price']>=0) 25 $query="SELECT * FROM shouhin where kakaku >= {$_GET['price']};"; 26 if($_GET['search']) 27 $query="SELECT * FROM shouhin where hinmei LIKE '{$_GET['search']}%';"; 28 else 29 $query="SELECT * FROM shouhin;"; 30 31 //PHPからSQL文を実行(接続名 $link に対して $query のSQL文を実行) 32 //結果は $result に格納される 33 $result=mysqli_query($link,$query); 34 35 //$resultから1行取り出して1項目ごとに配列$row(フィールド名をキーとした連想配列)に格納 36 //$row=mysqli_fetch_assoc($result); 37 38 //$row 配列の中身を表示 39 echo "<table border=1>"; 40 echo "<tr><th>番号</th><th>品名</th><th>価格</th><th>編集リンク</th><th>削除ボタン</th></tr>"; 41 while($row=mysqli_fetch_assoc($result)){ 42 echo "<tr><td>{$row['num']}</td> 43 <td>{$row['hinmei']}</td> 44 <td>{$row['kakaku']}</td> 45 <td>  <a href=\"test2018-21.php?hinmei={$row['hinmei']}\">編集</a></td> 46 <td>  <a href=\"test2018-20.php?num={$row['num']}\">削除</a></td></tr>"; 47 } 48 echo "</table>"; 49 50 if($_GET['num']){ 51 $query="DELETE FROM shouhin WHERE num = '{$_GET['num']}';"; 52 $result=mysqli_query($link,$query); 53 } 54 55 echo "<br><a href=\"test2018-22.php\">新規登録</a>"; 56 ?> 57 58</body> 59</html>

このソースの

PHP

1//SQL文を指定 2 if($_GET['price']>=0) 3 $query="SELECT * FROM shouhin where kakaku >= {$_GET['price']};"; 4 if($_GET['search']) 5 $query="SELECT * FROM shouhin where hinmei LIKE '{$_GET['search']}%';"; 6 else 7 $query="SELECT * FROM shouhin;";

この部分のelseがないと,最初にsafariで開いたときにはデータが表示されず,elseを加えると削除ボタンを押しても,一度自分で更新をかけないとデータが正しく表示されません.

どのように改良すれば良いのでしょうか

sqlに
番号,品名,価格
のデータが入っています

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

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

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

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

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

m.ts10806

2018/04/28 13:28

safari とありますが、おそらくブラウザの種類は関係ないと思います(試してみてください)
guest

回答2

0

ベストアンサー

elseを加えると削除ボタンを押しても,一度自分で更新をかけないとデータが正しく表示されません.

処理順的に削除処理が後で行われているためです。

何かの課題かもしれませんが、HTMLの中にPHPの処理記述が紛れ込むのは可読性があまりよろしくないです。
全て冒頭で処理を行い、HTML内では表示だけするようにされては?

php

1<?php 2//削除処理 3 4 5//検索・情報取得処理+一覧のhtmlを変数にため込む 仮に$listとする 6 7?> 8<!DOCTYPE html> 9<html lang="ja"> 10//省略 11<table border=1> 12<tr><th>番号</th><th>品名</th><th>価格</th><th>編集リンク</th><th>削除ボタン</th></tr> 13<?php echo $list;?> 14</table> 15 16</body> 17</html>

またSELECTについてですが、SQLの前半が同じなので冗長です。
下記のように条件があったときにだけwhereを追記すれば良いです。

php

1$query="SELECT * FROM shouhin"; 2if($_GET['price'] && $_GET['price']>=0){ 3 $query .= " where kakaku >= {$_GET['price']}"; 4} 5if($_GET['search']){ 6 $query.=" where hinmei LIKE '{$_GET['search']}%'"; 7}

※本来は「数字かどうか」の入力チェックや「sqlのエスケープ」はすべきです。

確認:
検索条件のformが分かれているので「○○で始まるxx円以上の」といった複合的な検索処理は考えられていないということでしょうか?

投稿2018/04/28 13:46

m.ts10806

総合スコア80850

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

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

0

PHP

1 $link=mysqli_connect("localhost","root","root","test2018"); 2 3 if($_GET['num']){ 4 $query="DELETE FROM shouhin WHERE num = '{$_GET['num']}';"; 5 $result=mysqli_query($link,$query); 6 } 7 8 //SQL文を指定 9 if($_GET['price']>=0)

投稿2018/04/28 04:27

tekka

総合スコア514

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問