1
私は基本的なソーシャルメディアサイトのデザインに取り組んでいます。私のようなボタンは実際には投稿を実際に好きではなくログインページにリダイレクトします。以下は私が使用しているコードです。どんな助けも素晴らしいだろう。好きなボタンがログインページにリダイレクトされる
<?php
include('./classes/Login.php');
$isfollowing = False;
session_start();
if (!isset($_SESSION['username'])) {
\t header('Location: login.php');
} else {
\t $users = $_SESSION['username'];
}
\t
$username = $_GET['u'];
if(DB::query("SELECT username, fname FROM users WHERE username='$username'")) {
\t $user = $username;
\t \t
\t $userid = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
\t $followerid = $users;
\t \t
\t if(isset($_POST['post'])) {
\t \t $userid = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
\t \t $postbody = $_POST['postbody'];
\t \t if (strlen($postbody) > 300 || strlen($postbody) < 3) {
\t \t \t
\t \t \t die('Invalid Length.');
\t \t \t
\t \t }
\t \t \t DB::query('INSERT INTO posts VALUES (\'\', :postbody, NOW(), :userid, 0)', array(':postbody'=>$postbody, ':userid'=>$userid)); \t \t
\t }
\t
\t if(isset($_POST['like'])) {
\t \t
\t DB::query('UPDATE posts SET \t likes = likes+1 where user_id=:user');
DB::query('INSERT INTO post_likes VALUES (\'\', :postid, :userid)', array(':postid'=>$postId, ':userid'=>$followerid)); \t
\t
\t }
\t
\t
\t if(isset($_POST['unlike'])) {
\t \t
\t DB::query('UPDATE posts SET \t likes = likes+1 where user_id=:user');
DB::query('DELETE FROM post_likes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$postId, ':userid'=>$followerid));
\t
\t }
\t $dbposts = DB::query('SELECT * FROM posts WHERE user_id=:userid ORDER BY id DESC', array(':userid'=>$userid));
\t $posts = "";
\t foreach($dbposts as $p) {
\t \t
\t \t if(!DB::query('SELECT post_id FROM post_lilkes WHERE post_id=:postid AND user_id=:userid', array(':postid'=>$p['id'], ':userid'=>$users))) {
\t \t $posts .= htmlspecialchars($p['body'])."
\t \t <form action='profile.php?u=".$username."&postid=".$p['id']." method='post'>
\t \t \t <input type='submit' name='like' value='Like!'>
\t \t \t <span>".$p['likes']."</span>
\t \t \t </form>
\t <hr /></br />";
\t \t } else {
\t \t \t $posts .= htmlspecialchars($p['body'])."
\t \t \t <form action='profile.php?u=".$username."&postid=".$p['id']." method='post'>
\t \t \t <input type='submit' name='unlike' value='Unlike'>
\t \t \t <span>" .$p['likes']."</span>
\t \t \t </form>
\t <hr /></br />";
\t \t }
\t } \t
\t
} else {
\t header('Location: login.php');
}
?>
var_dump($_SESSION, $_POST); exit;
を実行した後、私は次のような出力を得る:array(1) { ["username"]=> string(7) "ankoryx" } array(0) { }
あなたが設定したセッション変数は '$ _SESSION ['userid']'と呼ばれるでしょうか? '$ followerid'として' $ users'を使い、それを 'post_likes'テーブルの' user_id'として使います。デバッグするには、 'var_dump($ _ SESSION、$ _POST);を追加してみてください。 exit; 'session_start();'の呼び出しの後に終了します。もしあなたがそうした場合は、質問に出力を編集してください(最初にパスワード/非ローカルIPアドレス/ etc-informationを削除してください)。 – Terminus
また、 ':user'の値を持つ配列を渡すのではなく、' DB :: query( 'UPDATE posts SET \t likes = likes + 1 user_id =:user')と呼んでいます。別のものは、「違う」の場合でも、「likes = likes + 1」を使用します。それは 'likes = likes - 1'ですか? – Terminus