Я работаю над созданием базового сайта социальных сетей, и моя кнопка вроде меня всегда перенаправляет меня на страницу входа, а не на самом деле «нравится» сообщение. Ниже приведен код, который я использую. Любая помощь будет потрясающей.Как кнопка переадресовывает на страницу входа php
<?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']'? Вы используете '$ users' как' $ followerid', а затем используете это как 'user_id' таблицы' post_likes'. Для отладки вы можете попробовать добавить «var_dump ($ _ SESSION, $ _POST); exit; 'после вызова' session_start(); '. Если вы это сделаете, отредактируйте выход в вопрос (сначала удалите все пароли/нелокальные ip-адреса/etc-information). – Terminus
Кроме того, вы вызываете 'DB :: query ('UPDATE posts SET \t likes = likes + 1 где user_id =: user');', но не передавать массив со значением ': user'. Другое дело, даже для «в отличие от» вы используете 'likes = likes + 1'. Должно ли это быть 'нравится = нравится - 1'? – Terminus