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

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

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

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

Q&A

解決済

1回答

14817閲覧

PHPでお気に入り機能を実装したい

ayayayayay

総合スコア8

PHP

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

1グッド

7クリップ

投稿2018/01/15 15:37

###概要
・現在、PHPでメルカリのようなサイトを作成しています。そこで、お気に入り機能を実装したいと考えています。
・機能に関しては、商品詳細画面に「いいねボタン」を設置してそのボタンを押すとデータベースに、商品IDとユーザIDが挿入される。そしてまたその商品詳細ページを訪れた際には「いいね済み」というメッセージと「いいね削除」というボタンが表示されるという機能にしたいと思っています。また、いいね削除ボタンを押すとデータベースの情報が削除されるというようにしたいです。
・そこでもしAさんがログインしている状態でいいねボタンを押します。そしてAさんで商品詳細ページを訪れた際にはいいね済みというメッセージを表示させます。その後にAさんでログアウトし、Bさんでログインします。先ほどAさんがいいねを押した商品詳細ページをBさんが訪れた際にはいいねが表示されるように、ログインしたユーザによって表示を区別?するようにしたいです。

###データベース
【favoriteテーブル】
fav_num|id|fav_user|
・fav_numにはお気に入りボタンを押した順番がAUTO_INCREMENTで自動生成される
・idには商品IDが挿入
・fav_numにはいいねボタンを押したユーザIDが挿入

###現状
・商品詳細ページには「いいねボタン」が表示され、それを押すとデータが挿入される

###わからないこと
・データは挿入されるのですが、レコードの有無の確認の仕方がよくわからなく、押した後に「いいね済み」が表示されない。
・いいね削除ボタンをしてもデータベースの情報が削除されない。
・違うユーザでログインした場合の「いいねボタン」と「いいね済み」の表示の処理

###現在のコード
syousai.php
細かいところは省略

PHP

1session_start(); 2$ID=$_SESSION["USERID"]; 3$no = $_REQUEST["no"]; 4 5$abc=mysqli_connect('localhost', 'root', '','test') or die(mysqli_error()); 6mysqli_query($abc,'SET NAMES UTF8'); 7$record = mysqli_query($abc , "SELECT * FROM `favorite` WHERE id='.$no.' AND fav_user='.$ID.'; " ); 8$row = mysqli_fetch_assoc($record); 9 10if(isset($row['fav_user'],$row['id'])){ 11 echo 'お気に入り済み'; 12 echo'<div style="float:center;"> 13 <form action="favoritedel.php?no='.$no.'" method="post"> 14 <input type="submit" name="submit_del" value="☆いいね消去" style="color:#000000; background-color:#C0C0C0; 15 font-size:30; width:210px; height:50px"> 16 </form> 17 </div>'; 18}else{ 19echo'<div style="float:center;"> 20 <form action="favorite3.php?no='.$no.'" method="post"> 21 <input type="submit" name="submit_fav" value="☆いいね" style="color:#000000; background-color:#FFFF00; 22 font-size:30; width:210px; height:50px"> 23 </form> 24 </div>'; 25}

主にお気に入り機能についてのプログラムです。

favorite.php
細かいところは省略

PHP

1session_start(); 2$ID=$_SESSION["USERID"]; 3$no = $_REQUEST["no"]; 4 5$sql = "INSERT INTO `favorite`(`id`,`fav_user`) 6VALUES ('$no', '$ID')";

favoritedel.php
細かいところは省略

PHP

1session_start(); 2$no = $_REQUEST["no"]; 3$ID =$_SESSION["USERID"]; 4$sql = "DELETE FROM `favorite` WHERE `fav_user`='.$ID.' AND `id`='.$no.'";

まだPHPを初めて間もなく、わからないなりに自分でやってみましたがお気に入り機能の実装はよくわからないので質問させて頂きました。
分かりづらいかもしれませんが、長文申し訳ありません。

shimane👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

ざっと見た感じ設計自体には問題なさそうです
ただしデータの埋め込み方はいただけないです
mysqli_関数をご利用のようなのでprepareで処理してください

  • データは挿入されるのですが、レコードの有無の確認の仕方がよくわからなく、押した後に「いいね済み」が表示されない。

ページ番号とユーザーIDでwhereしてcount(*)>0ならいいね済みです

  • いいね削除ボタンをしてもデータベースの情報が削除されない

$sql = "DELETE FROM favorite WHERE fav_user='.$ID.' AND id='.$no.'";

クォーテーションを統一して下さい。全体がダブルクォーテーションでくくっているのに
変数を埋め込むところがシングルなのできちんと処理されません
実際にはprepareで処理するとして変数を参照させるなら

$sql = "DELETE FROM `favorite` WHERE `fav_user`='".$ID."' AND `id`='".$no."'"; /*もしくは*/ $sql = "DELETE FROM `favorite` WHERE `fav_user`='{$ID}' AND `id`='{$no}'";

投稿2018/01/16 01:18

編集2018/01/16 01:19
yambejp

総合スコア114574

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

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

ayayayayay

2018/01/16 10:16

yambejpさん回答ありがとうございます。 yambejpさんが教えてくださった通りにクォーテーションを統一したところ、挿入された情報もしっかりと削除することができました。また、データがあるときとないときの表示も希望通りにできました。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問