2017-01-31 11 views
1

Я работаю над созданием базового сайта социальных сетей, и моя кнопка вроде меня всегда перенаправляет меня на страницу входа, а не на самом деле «нравится» сообщение. Ниже приведен код, который я использую. Любая помощь будет потрясающей.Как кнопка переадресовывает на страницу входа 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) { }

+0

Возможно, это связано с тем, что указанная переменная сеанса называется '$ _SESSION ['userid']'? Вы используете '$ users' как' $ followerid', а затем используете это как 'user_id' таблицы' post_likes'. Для отладки вы можете попробовать добавить «var_dump ($ _ SESSION, $ _POST); exit; 'после вызова' session_start(); '. Если вы это сделаете, отредактируйте выход в вопрос (сначала удалите все пароли/нелокальные ip-адреса/etc-information). – Terminus

+0

Кроме того, вы вызываете 'DB :: query ('UPDATE posts SET \t likes = likes + 1 где user_id =: user');', но не передавать массив со значением ': user'. Другое дело, даже для «в отличие от» вы используете 'likes = likes + 1'. Должно ли это быть 'нравится = нравится - 1'? – Terminus

ответ

3

Ответ:

Возвращает FALSE при неудаче. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет TRUE.

Поскольку у вас есть перенаправление на странице входа, это означает, что ваш запрос не удался. Я не могу сказать, почему он возвращает это, потому что, возможно, вы передаете недопустимое значение или у DB нет строк для вашего запроса.