Problème requête MySQL

Nixou19
Invité n'ayant pas de compte PHPfrance

19 mai 2012, 10:37

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

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2012, 10:40

Une petite aide :
$var = 'test';
echo '$var'; // $var
echo "$var"; // test
;)

Nixou19
Invité n'ayant pas de compte PHPfrance

19 mai 2012, 10:45

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).

Nixou19
Invité n'ayant pas de compte PHPfrance

19 mai 2012, 11:07

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 ?

Nixou19
Invité n'ayant pas de compte PHPfrance

19 mai 2012, 11:25

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 ?

Nixou19
Invité n'ayant pas de compte PHPfrance

19 mai 2012, 11:38

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));

ViPHP
xTG
ViPHP | 7331 Messages

19 mai 2012, 11:56

As-tu vérifié le contenu de tes variables ?