Comprehension par rapport a php/OOP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comprehension par rapport a php/OOP

Re: Comprehension par rapport a php/OOP

par Shadowwera » 02 juin 2021, 17:48

+1 je me suis emmêler les pinceaux dans mon explication. J'ai bien mis ensuite : $ref = "maTable"

Re: Comprehension par rapport a php/OOP

par or 1 » 02 juin 2021, 17:27

$ref ne doit pas contenir le nom de la base de données, mais le nom d'une table. une base de données contient le plus souvent plusieurs tables, une pour les acteurs, une pour les votes ...

Re: Comprehension par rapport a php/OOP

par Shadowwera » 02 juin 2021, 17:13

Salut,

Je vais essayer de répondre à tes questions.

1) $ref n'est pas le nom de la base de données, mais la variable qui contient le nom de cette base. Lorsque tu va créer et faire appel à cette fonction, tu aura a renseigné cette fameuse variable $ref ( et toutes les autres qui sont obligatoire ) avec le nom de ta base de données.

2) les variables $ref, $ref_id etc. sont les paramètre passé à la fonction
public function like($ref, $ref_id, $user_id) {
 ...
}
Lorsque vous créerais votre objet, vous pourrez appeler cette fonction et lui passer les paramètres requis
$vote = new Vote($pdo); // Où $pdo est vraisemblablement la PDO contenant votre connexion à votre base de données
$vote->like("maTable", 8, 375); // Où $ref = "maTable", $ref_id = 8, $user_id = 375 par exemple
3) Question ?

Comprehension par rapport a php/OOP

par Karl_R » 02 juin 2021, 16:36

Biens le bonjour,
Je suis tout nouveau sur php et encore plus par rapport a OOP je me suis dit que c'est un bon exercice de trouver un bout de code et d'essayer de le comprendre + le faire marcher pour que je puisse commencer a ecrire mon propre code. Du coup j'ai trouver ce petit bout qui fait (si j'ai bien compris) la gestion de Like/Dislike dans une BDD.

Code : Tout sélectionner

<?php class=User class Vote { private $pdo; private $formerVote; public function __construct(PDO $pdo) { $this->pdo = $pdo; } private function recordExists($ref, $ref_id) { $req = $this->pdo->prepare("SELECT * FROM $ref WHERE id=?"); $req->execute([$ref_id]); if ($req->rowCount() == 0) { throw new Exception('Impossible de voter pour un acteur qui n\'exist pas'); } } public function like($ref, $ref_id, $user_id) { if ($this->vote($ref, $ref_id, $user_id, 1)) { $sql_part = ""; if ($this->formerVote) { $sql_part = ", dislike_count = dislike_count - 1"; } $req = $this->pdo->prepare("UPDATE $ref SET like_count = like_count + 1 $sql_part WHERE id=?"); $req->execute([$ref_id]); return true; } return false; } public function dislike($ref, $ref_id, $user_id) { if ($this->vote($ref, $ref_id, $user_id, -1)) { $sql_part = ""; if ($this->formerVote) { $sql_part = ", like_count = like_count - 1"; } $req = $this->pdo->prepare("UPDATE $ref SET dislike_count = dislike_count + 1 $sql_part WHERE id=?"); $req->execute([$ref_id]); return true; } return false; } private function vote($ref, $ref_id, $user_id, $vote) { $this->recordExists($ref, $ref_id); $req = $this->pdo->prepare("SELECT id, vote FROM votes WHERE ref=? AND ref_id=? AND user_id=?"); $req->execute([$ref, $ref_id, $user_id]); $vote_row = $req->fetch(); if ($vote_row) { if ($vote_row['vote'] == $vote) { return false; } $this->formerVote = $vote_row; // If user changed like to dislike or vise versa, update this id in `votes` $this->pdo->prepare("UPDATE votes SET vote = ? WHERE id = {$vote_row['id']}")->execute([$vote]); return true; } $req = $this->pdo->prepare("INSERT INTO votes SET ref=?, ref_id=?, user_id=?, vote = $vote"); // To add variables in SQL query, using "double quotes" $req->execute([$ref, $ref_id, $user_id]); return true; } // Option 2: Add and update the count in table `acteurs` /*public function updateCount($ref, $ref_id) { $req = $this->pdo->prepare("SELECT COUNT(id) as count, vote FROM votes WHERE ref=? AND ref_id=? GROUP BY vote"); $req->execute([$ref, $ref_id]); $votes = $req->fetchAll(); // If no votes found, keep 0 as record $counts = [ '-1' => 0, '1' => 0 ]; foreach ($votes as $vote) { // $count['-1'] = $vote[COUNT(id)] = 1 $counts[$vote['vote']] == $vote['count']; } $req = $this->pdo->query("UPDATE $ref SET like_count = {$counts[1]}, dislike_count = {$counts[-1]} WHERE id = $ref_id"); return true; }*/ /** * Permet d'ajouter une class is-liked ou is-disliked suivant un enregistrement * @param $vote mixed false/enregistrement */ public static function getClass($vote) { if ($vote) { // Ternaire/ternary operator return ($vote['vote'] == 1) ? 'is-liked' : 'is-disliked'; } return null; } } ?>
Du coup j'ai compris le system de Class Nom_CLass
//Propriete

//Method

1)Mais ce que je ne comprend pas c'est ca requette Preparer :
UPDATE $ref SET like_count = like_count + 1 $sql_part WHERE id=?"

Pour moi $ref c'est la base de donner. Si c'est bien le cas, es une bonne pratique de nommer ca colonne comme cela?

2) D'où viennent les $ref, $ref_id si ils ont pas étais définie au préalable.

3) Apres quelques heures de lectures Jai recrée une BDD au nom de 'votes' tables au noms de:
id (int)
réf (varchar)
vote (int)

j'ai surement rater quelques chose mais je serais ravis d'en discuter pour comprendre plus.
Je vous remercie :)