Bonjour,
à tous, je reviens vers vous car j'ai suivi le tuto de Grafi sur les like et dislike et lorsque j'essaie de le réaliser, rien ne marche...
Voilà mon code (j'en suis au début mais d'après le suivi de la vidéo, l'incrémentation est déjà sensée se faire
like.php
<?php
require 'db.php';
if($_SERVER['REQUEST_METHOD'] != 'POST'){
http_response_code(403);
die();
}
Ici ça marche
require 'class/Vote.php';
$vote = new Vote($pdo);
if($_GET['vote'] == 1){
$vote->like('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
else {
$vote->dislike('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
header('Location : amiibo.php?id='.$_GET['ref_id']);
?>
-> ici ça ne marche plus
t_amiibo, c'est ma table de référence (Dans la vidéo, il avait nommer Article)
$_SESSION['auth']->id_user : j'ai mis ça sans conviction lui c'était $_SESSION[user_id], mais ayant suivi un autre de ses tuto, je suis en session sous $_SESSION['auth']
Fichier Vote.php
<?php
class Vote{
private $pdo;
public function __construct(PDO $pdo){
$this->pdo = $pdo;
}
public function like($ref, $ref_id, $id_user){
$req = $this->pdo->prepare("SELECT * FROM $ref WHERE id_".$ref." = ?");
$req-> execute(array($ref_id));
if($req->rowCount() > 0){
$req = $this->pdo->prepare('INSERT INTO t_vote_amiibo SET ref=?, ref_id=?, id_user=?, date_vote_amiibo=?, vote=1');
$req->execute([$ref, $ref_id, $id_user, date('Y-m-d- H:i:s')]);
return true;
}
else
{
throw new Exception("Impossible de voter pour un enregistrement qui n'existe pas");
}
}
public function dislike($ref, $ref_id, $id_user){
}
}
?>
$id_user -> lui avait mis $user_id
$req = $this->pdo->prepare("SELECT * FROM $ref WHERE id".$ref." = ?");
WHERE id".$ref" car je suppose que toutes ses tables les id sont nommées id mais moi je les ai nommées id_amiibo / id_article du coup, il me semblait que c'était bien d'adapter le nom comme ça. C'est peut-être une erreur...
$req = $this->pdo->prepare('INSERT INTO t_vote_amiibo SET ref=?, ref_id=?, id_user=?, date_vote_amiibo=?, vote=1');
id_user, est-il bien récupéré ?
$req->execute([$ref, $ref_id, $id_user, date('Y-m-d- H:i:s')]); -> est ce que c'est le bon ordre ?
Voilà du coup j'en suis là, ça marche pas et je suis bien triste =)
Je vous remercie par avance pour votre aide
en fait... heu... je suis un boulet...
j'ai pas de case dans ma table t_amiibo_vote qui se nomme vote...
du coup, ça peut pas fonctionner... c'est sûr.. OMG :'(
Bon... l'insertion s'est correctemment faite...
En tout cas merci de m'avoir accompagné jusqu'à la résolution de ce premier souci =)
Encore merci
Salut,
"ça ne marche pas" c'est très léger pour qu'on puisse t'aider ... est-ce que une ou plusieurs erreurs te sont retournées ? Est-ce que tu as mis des points d'arrêts afin de déboguer tes variables ? Est-ce qu'au moins tu as compris ce que tu faisais ou juste tu as recopié bêtement ?
BEtaWeb et merci de ta question de savoir si j'ai recopié "bêtement"
Si j'avais recopié tout bêtement j'aurais mis les mêmes valeurs que lui. J'aurais pas tenté d'adapter 2 - 3 éléments. Tout ça c'est floue pour moi et j'avance tant bien que mal ds ce monde très inconnu encore
Je retente de développer ma demande avec plus d'éléments
Bout de mon code sur la page où le vote est présent
amiibo.php
Voici le code des boutons vote se trouvant en dessous
<div class="vote">
<div class="vote_bar">
<div class="vote_progress" style="width: <?php
if($post->like_count + $post->dislike_count==0){
echo "100";
}
else
{
echo "100" * ($post->like_count / ($post->like_count + $post->dislike_count));
}
?>%;">
</div>
</div>
<div class="vote_btns">
<form action="like.php?ref=amiibo&ref_id=1&vote=1" method="post">
<button type="submit" class="vote_btn vote_like"><i class="fa fa-thumbs-up"></i> <?= $post->like_count; ?></button>
</form>
<form action="like.php?ref=amiibo&ref_id=1&vote=-1" method="post">
<button type="submit" class="vote_btn vote_dislike"><i class="fa fa-thumbs-down"></i> <?= $post->dislike_count; ?></button>
</form>
Qd je vote je pars donc sur la like.php?ref=amiibo&ref_id=1&vote=1
et là page blanche
Failed to load resource: the server responded with a status of 403 (Forbidden)
Dans ma page like.php, j'ai l'impression qu'il ne récupère même pas la référence id de l'objet...
header('Location : amiibo.php?id='.$_GET['ref_id']);
Bien perdu en tout cas :s
Bonjour.
Failed to load resource: the server responded with a status of 403 (Forbidden)
Commences déjà par corriger ce problème là, si la page like.php n'est pas accessible ou si le serveur t'en interdit l'accès, tu ne pourras pas aller plus loin.
Si je prends le code de la page like.php et que je mets que ça
<?php
require 'db.php';
if($_SERVER['REQUEST_METHOD'] != 'POST'){
http_response_code(403);
die();
}
echo "coucou";
cela fontionne.
Donc mon problème vient d'ici
require 'class/Vote.php';
$vote = new Vote($pdo);
if($_GET['vote'] == 1){
$vote->like('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
else {
$vote->dislike('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
header('Location : amiibo.php?id='.$_GET['ref_id']);
?>
J'ai modifié le code de ma page pour tester
<?php session_start(); ?>
<?php
require 'db.php';
if($_SERVER['REQUEST_METHOD'] != 'POST'){
http_response_code(403);
die();
}
var_dump($_SESSION['auth']->id_user);
?>
J'ai mis un start_session en haut puisqu'aucune valeur de session n'était renvoyée du bouton, je ne sais pas si j'ai bien fait.
il me ressort ça sur la page
string(2) "13"
id = 13 étant l'id de mon utilisateur qui essaie de faire des votes.
Bien évidemment si je remets tout
<?php session_start(); ?>
<?php
require 'db.php';
if($_SERVER['REQUEST_METHOD'] != 'POST'){
http_response_code(403);
die();
}
var_dump($_SESSION['auth']->id_user);
require 'class/Vote.php';
$vote = new Vote($pdo);
if($_GET['vote'] == 1){
$vote->like('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
else {
$vote->dislike('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
}
header('Location : amiibo.php?id='.$_GET['ref_id']);
?>
ça ne refonctionne pas...
Si je prends que ce bout
<?php session_start(); ?>
<?php
require 'db.php';
if($_SERVER['REQUEST_METHOD'] != 'POST'){
http_response_code(403);
die();
}
header('Location : amiibo.php?id='.$_GET['ref_id']);
?>
Je suis bien renvoyé à la bonne page initiale
Perdu :'(
Beh réfléchis un peu alors : si lorsque tu rajoutes le code permettant d'ajouter un vote ça bug, c'est que ça vient de là tout simplement ;)
Continues à mettre des points d'arrêts et à tester jusqu'à trouver.
D'ailleurs, tu ne testes jamais si tes variables sont isset : if (isset($_GET['vote']) && $_GET['vote'] == 1)
En isolant petit à petit mon code je m'aperçois que le souci doit venir du fichier class/Vote.php..
class Vote{
private $pdo;
public function __construct(PDO $pdo){
$this->pdo = $pdo;
}
public function like($ref, $ref_id, $id_user){
ici le $id_user ne peut pas être remplacé par $_SESSION['auth']->id_user ? parceque j'ai nulle part un appel à id_user :'
ou alors je dois mettre quelque part en amont un truc du genre $id_user = $_SESSION['auth']->id_user
$req = $this->pdo->prepare("SELECT * FROM $ref WHERE id_".$ref." = ?");
$req-> execute(array($ref_id));
if($req->rowCount() > 0){
$req = $this->pdo->prepare('INSERT INTO t_vote_amiibo SET ref=?, ref_id=?, id_user=?, date_vote_amiibo=?, vote=1');
$req->execute([$ref, $ref_id, $id_user, date('Y-m-d- H:i:s')]);
return true;
}
ou alors ici...
merci par avance :'(
Ce que je ne comprends pas, c'est comme sur la page like.php ou vote.php, il arrive à comprendre que
$id_user = l'id de ma session vu que nulle part je lui ai dit
C'est peut-être parce que tu lui passe en paramètre $vote->like('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
;)
Ce que je ne comprends pas, c'est comme sur la page like.php ou vote.php, il arrive à comprendre que
$id_user = l'id de ma session vu que nulle part je lui ai dit
Tu plaisantes ou alors tu ne comprends vraiment pas ce que tu fais, que fais-tu là d'après toi :
$vote->like('t_amiibo', $_GET['ref_id'], $_SESSION['auth']->id_user);
Le hic c'est que je suis novice et que je n'ai pas votre logique de la chose. Je débute et j'essaie de comprendre, mais ce qui semble évident pour vous ne l'est pas "encore" pour moi. C'est pour ça que je viens ici pour tenter de comprendre où ça ne va pas.
Je tourne en rond et ça m'énerve de pas comprendre.
J'ai essayé de tenter des changements ou quoi mais je ne trouve pas.
Après avoir détaillé chaque zone, supprimé puis testé et tout, j'en arrive à la conclusion que (non pas que je suis nul xD) mais que
mon souci vient de là.
Lorsque je retire cette requête de class/vote.php, le Location header qui me renvoie à la page voulue fonctionne.
$req = $this->pdo->prepare('INSERT INTO t_vote_amiibo SET ref=?, ref_id=?, id_user=?, date_vote_amiibo=?, vote=1');
$req->execute([$ref, $ref_id, $id_user, date('Y-m-d H:i:s')]);
return true;