Page 1 sur 1

Problème requête MySQL

Posté : 19 mai 2012, 10:37
par Nixou19
Bonjour à tous.

Je suis en train de coder un compteur de vue à l'aide d'un tableau et d'une requête MySQL pour pouvoir afficher un top 10 des nombre vues ultérieurement.


Voici mon code :

Code : Tout sélectionner

<?php /* * Si le fichier où l'on stock, * les données n'existe pas encore * on le crée. */ $fichier = 'htcompteur'; if( !file_exists($fichier) ) { $fp = fopen($fichier, "w"); fwrite($fp, serialize(array())); fclose($fp); } /* * Définition de variables * nécessaire au compteur : * - deux termes constants, * - l'ip du visiteur, * - la date et l'heure. */ $argument_visites = 'visites'; $argument_requêtes = 'requêtes'; $ip = $_SERVER['REMOTE_ADDR']; $time = date('YmdGis'); /* * Récupération des données du * compteur précédemment stockées. */ $lignes = file($fichier); $donnees = unserialize($lignes[0]); /* * Pour chaque clés du tableau de données * qui ne soit pas attribuée aux visite et aux requêtes * si la valeur correspond à une date antérieur * au même jour, on supprime l'ip du visiteur. */ foreach( $donnees as $cle => $valeur ) { if( substr($valeur, 0, 8) != substr($time, 0, 8) && $cle != $argument_visites && $cle != $argument_requêtes ) { unset($donnees[$cle]); } } /* * On incrémente ( ajoute +1 ) la valeur * du nombre de requêtes. * Si l'ip n'est pas encore enregistrée, * on incrémente la valeur du nombre de visites * et on ajoute l'ip dans le tableau accompagné * de la date et de l'heure de l'exécution. */ $donnees[$argument_requêtes]++; if( !$donnees[$ip] ) { $donnees[$argument_visites]++; $donnees[$ip] = $time; } /* * On effectue un petit report de variable * pour une utilisation ultérieur plus aisée. */ $nb_visiteurs = $donnees[$argument_visites]; $nb_aujourdhui = count($donnees)-2; $nb_requetes = $donnees[$argument_requêtes]; /* * On stock le tableau dans le fichier de données * en écrasant sa valeur précédente. */ $fp = fopen($fichier,"w"); fwrite($fp, serialize($donnees)); fclose($fp); try { $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=categories', 'root', 'root', $pdo_options); //Nouvelle entrée dans la base de donnée $req = $bdd->exec('UPDATE nbview SET nbview = $nb_requetes WHERE url = \'<a href=animaux/chien.php>Chien</a>\''); echo 'Ca a bien été ajouté à la base de donnée.'; } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } /* * On affiche les résultats du compteur. */ ?> <div id=compteur> <?php echo $nb_visiteurs." visiteurs dont "; echo $nb_aujourdhui." aujourd'hui, "; echo $nb_requetes." pages affichées "; ?></div>
et voici l'erreur que cela me retourne : Erreur : SQLSTATE[42S22]: Column not found: 1054 Unknown column '$nb_requetes' in 'field list'

Si vous pouviez trouver solution à mon problème, je vous en serais fort reconnaissant.
Merci d'avance.
Nixou19

Re: Problème requête MySQL

Posté : 19 mai 2012, 10:40
par xTG
Une petite aide :
$var = 'test';
echo '$var'; // $var
echo "$var"; // test
;)

Re: Problème requête MySQL

Posté : 19 mai 2012, 10:45
par Nixou19
Merci, tu m'as aidé à résoudre ce problème :).

Cependant, un autre problème se pose... La base de donnée n'est pas mise à jour. Je suis pourtant certain que l'url est la bonne (j'ai fait un coper/coller depuis la database).

Re: Problème requête MySQL

Posté : 19 mai 2012, 11:07
par Nixou19
Bon. J'ai retourné le code dans tous les sens et ... j'ai pas trouvé de solution. Là je ne vois vraiment pas. J'ai beau lire plusieurs tutos sur le EDIT en SQL... Pas moyen de comprendre. Vous savez d'où cela peut-il venir ?

Re: Problème requête MySQL

Posté : 19 mai 2012, 11:25
par Nixou19
J'ai trouvé. Visiblement, le nom de la table ne peut pas être le même que la colonne. Peu importe, je m'en débrouillerai. Le soucis, maintenant, c'est qu'il m'inscrit bien "$nb_requetes" à la place de ce qui est contenu dans la variable. Quelqu'un a une idée ?

Re: Problème requête MySQL

Posté : 19 mai 2012, 11:38
par Nixou19
Bon... J'ai modifié mon code, dans l'espoir d'un fonctionnement... Et toujours rien. La variable n'est pas écrite dans MySQL. En revanche, si je mets "2", il sera bien inscrit dans la database.
Voici le code.

    //Nouvelle entrée dans la base de donnée
$req = $bdd->prepare('UPDATE nbview SET nbviews = ? WHERE nom = ?');
$req->execute(array($nb_requetes, $nb_nom));

Re: Problème requête MySQL

Posté : 19 mai 2012, 11:56
par xTG
As-tu vérifié le contenu de tes variables ?