Jump to content

2 Queries iguais e um não insere!!!


sEnte

Recommended Posts

Estou aqui a tentar replicar um sistema de notificação, mas estou com um problema.

Tenho uma sistema de notificação onde apenas funciona metade.

Nos seguintes ficheiros 

public static function likePost($postId, $likerId) {
			if (!DB::query('SELECT user_id FROM post_likes WHERE post_id = :postid AND user_id = :userid', array(':postid' => $postId, ':userid' => $likerId))) {
				// Aqui é chamada a função createNotify que vai criar a notificação
				Notify::createNotify("", $postId);
			}
		}

 

a função create Notify é a seguinte

class Notify {
		public static function createNotify($text = "") {
			$text = explode(" ", $text);
			$notify = array();
			
			foreach ($text as $word) {
				if (substr($word, 0, 1) == "@") {
					$notify[substr($word, 1)] = array("type" => 1, "extra" => ' { "postbody": "' .  htmlentities(implode($text, " ")) . '" } ');
				}	
			}

			if (count($text) == 0 && $postid != 0) {
				$temp = DB::query('SELECT posts.user_id AS receiver, post_likes.user_id AS sender FROM posts, post_likes WHERE posts.id = post_likes.post_id AND posts.id = :postid', array(':postid' => $postid));
				$r = $temp[0]["receiver"];
				$s = $temp[0]["sender"];
				DB::query('INSERT INTO notifications VALUES (:id, :type, :receiver, :sender, :extra)', array(':id' => NULL, ':type' => 2, ':receiver' => $r, ':sender' => $s, ':extra' => ""));
			}
			return $notify;
		}
	}

Esta função está a fazer duas coisas diferentes.

Cria e insere um notificação na tabela apropriada sempre que alguém refere o nome, por exemplo @sEnte, Aqui sei que alguém mencionou o meu nome num post qualquer.

A segunda parte, sempre que alguém faz like a um post qualquer meu eu deveria receber um notificação a dizer que alguém gostou. 

A diferença entre os dois INSERT INTO notifications é que no @ o $r vai buscar ao post e o $s vai buscar ao login actual.

"If It Ain't Broke, Break it and build something Cooler!" Unknown

Link to comment
Share on other sites

eu desconfio que o problema não está na query ... deve estar aqui:

$text = explode(" ", $text);
// ...
if (   count($text) == 0 // ou esta verificação
    && $postid != 0) {    // ou esta verificação, isto porque $postid caiu do ceu ...
  // ...
}
Edited by HappyHippyHippo
added $ to postid
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

mas tens a certeza que o query de selecção é executado ? faz um output qualquer após o query para ver se ele é realmente executado assim como que dados ele retorna.

se for executado e não retornar dados nenhuns, o problema está na existência dessas relações na BD

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.