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

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

ただいまの
回答率

90.53%

  • PHP

    20281questions

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

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

解決済

回答 1

投稿

  • 評価
  • クリップ 4
  • VIEW 932

ayayayayay

score 2

概要

・現在、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
細かいところは省略

session_start();
$ID=$_SESSION["USERID"];
$no = $_REQUEST["no"];

$abc=mysqli_connect('localhost', 'root', '','test') or die(mysqli_error());
mysqli_query($abc,'SET NAMES UTF8');
$record = mysqli_query($abc , "SELECT * FROM `favorite` WHERE  id='.$no.' AND fav_user='.$ID.'; " );
$row = mysqli_fetch_assoc($record);

if(isset($row['fav_user'],$row['id'])){
    echo 'お気に入り済み';
    echo'<div style="float:center;">
        <form action="favoritedel.php?no='.$no.'" method="post">
        <input type="submit" name="submit_del" value="☆いいね消去" style="color:#000000; background-color:#C0C0C0;
        font-size:30; width:210px; height:50px">
        </form>
        </div>';
}else{
echo'<div style="float:center;">
        <form action="favorite3.php?no='.$no.'" method="post">
        <input type="submit" name="submit_fav" value="☆いいね" style="color:#000000; background-color:#FFFF00;
        font-size:30; width:210px; height:50px">
        </form>
        </div>';
}


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

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

session_start();
$ID=$_SESSION["USERID"];
$no = $_REQUEST["no"];

$sql = "INSERT INTO `favorite`(`id`,`fav_user`)
VALUES ('$no', '$ID')";

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

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


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ざっと見た感じ設計自体には問題なさそうです
ただしデータの埋め込み方はいただけないです
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 19:16

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

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20281questions

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