Récupérer une variable dans la base de donnée [Résolu/Fermé]

Messages postés
8
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
2 décembre 2017
- - Dernière réponse :  cs_lerenardduweb - 30 mars 2014 à 11:31
Bonjour,

J'ai dans une base de donnée un table truc_topics dans laquelle la colonne topic_id enregistre toutes les pages existantes sur un forum phpBB.

En phpBB cette variable est appelée par {topic_id} côté html ou par $topic_id côté php.

J'ai du mettre en place un système de vote en php, j'inclu ma ligne d'appel à la fonction ainsi dans mon fichier html :

<!-- PHP -->
notation ($topic_id, $ip_vote);
<!-- ENDPHP -->

Mais ça ne fonctionne pas, la variable $topic_id n'est pas prise en compte entre les balises ouvrantes et fermantes php. L'id de la page consultée par la personne qui vote n'est donc pas communiquée au script php qui du coup ne fonctionne plus.

Quelqu'un connaîtrait-il une solution ?

Merci de votre lecture.
Afficher la suite 

11 réponses

Messages postés
675
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
16 septembre 2018
6
0
Merci
Bonjour,
La base de données est une base de données mysql?
Messages postés
8
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
2 décembre 2017
0
Merci
Bonsoir Anonyme209,

Oui Mysql, j'ai oublié de le préciser.
Messages postés
675
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
16 septembre 2018
6
0
Merci
Déjà, il faut se connecter à la base de données. Code php:

mysql_connect("hostname", "identifiant", "motdepasse");
mysql_select_db("nomdelabasededonnees");


Ensuite, pour récupérer une variable dans une table, c'est ce code:

$nouvellevariablephp = mysql_query("SELECT variable FROM table");
0
Merci
C'est ce que je fais, mais ça ne fonctionne pas.
Voici le php de la fonction, en entier sauf les info sur la db.

//Fonction pour l'ip
function getIp()
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ip_vote = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif(isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip_vote = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$ip_vote = $_SERVER['REMOTE_ADDR'];
}
return $ip_vote;
}
//Ip utilisateur
$ip_vote = getIp();

//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
//Vérification d'accès à la base de données
mysql_select_db("$nom_de_la_base") or die ('Erreur :'.mysql_error());

$topic_id = mysql_query("SELECT topic_id FROM cuisine_topics");

//Fonction pour la notation
function notation($id_vote,$ip_vote){

//L'utilisateur a t'il déja voté?
$deja_voter = mysql_query("SELECT ip FROM note WHERE ip = '".mysql_real_escape_string($ip_vote)."' AND id_page = '".mysql_real_escape_string($id_vote)."'");

//L'utilisateur n'a pas voté, on montre le formulaire
if(mysql_num_rows($deja_voter) == 0)
{
echo ' <form name="monform" id="monform" method="post"> <label>Noter cet article</label> <select name="note" onchange="javascript:submit(this)"> <option value="">Note</option> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </form> ';
}

//Si action de valider et que la note est différent de vide
if(isset($_POST['note']) && $_POST['note'] != NULL){
//On vérifie si le cookie existe et si tel est le cas, c'est que l'utilisateur tente de voter plusieurs fois
if(isset($_COOKIE["deja_voter"]) && $_COOKIE["deja_voter"] == $id_vote){
die ("Un seul vote autorisé ... merci!"); }

//Note de l'utilisateur
$note = $_POST['note'];
//Insertion en BDD
$insert = mysql_query("INSERT INTO note (id_page, note, ip) VALUES ('$id_vote', '$note', '$ip_vote') ");

//Si il y a une erreur
if(!$insert) {
die('Requête invalide : ' . mysql_error());
}
//Tout est ok, on informe et on redirige
else{

echo 'Merci d\'avoir note cet article! <br/> Chargement en cours <img alt="Loading" src="images/images-vote/loading.gif" style="width:32px;height:32px;"/> <script type="text/javascript"> document.getElementById("monform").innerHTML = ""; window.setTimeout(function(){self.location.href="'.$_SERVER['REQUEST_URI'].'";},3000); </script>';

}
}

//Combien d'utilisateurs ont votés?
$nombre_vote = mysql_query("SELECT id FROM note WHERE id_page = '".mysql_real_escape_string($id_vote)."'");
$total_vote = mysql_num_rows($nombre_vote);
if($total_vote != 0){
echo '<span class="review hreview-aggregate">Nombre de vote : <span class="count">'.$total_vote.'</span><br/>';

}

//Total des votes des utilisateurs
$calcul_vote = mysql_query("SELECT SUM(note) AS totalmoyenne FROM note WHERE id_page = '".mysql_real_escape_string($id_vote)."'");
$data = mysql_fetch_array($calcul_vote);
$total_calcul_vote = $data['totalmoyenne'];
if($total_calcul_vote != 0){
echo 'Total des votes : <span class="rating">'.$total_calcul_vote.'</span></span><br/>';
}

//Moyenne des votes des utilisateurs
if($total_vote != NULL && $total_calcul_vote != NULL){
$moyenne = number_format($total_calcul_vote/$total_vote, 2, ',', '');
//Si les 2 chiffres après la virgule sont 2 zéros, on les suppriment pour obtenir un entier
echo 'Note : '.str_replace(',00','',$moyenne).'/5';
//On affiche les étoiles
for($i=1; $i<=$moyenne;$i++){
echo '<img alt="'.$i.'" src="images/images-vote/etoile.png" style="width:32px;height:32px;"/>';
}
}
else{
echo 'Aucun vote pour le moment.';
}
}
?>
Messages postés
675
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
16 septembre 2018
6
0
Merci
Regarde directement dans la base de données pour voir si les données sont bien enregistrées. Pour récupérer l'ip d'un visiteur, tu n'as pas besoin de passer par cette fonction:

function getIp()
{
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
    {
        $ip_vote = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    elseif(isset($_SERVER['HTTP_CLIENT_IP']))
    {
        $ip_vote = $_SERVER['HTTP_CLIENT_IP'];
    }
    else
    {
        $ip_vote = $_SERVER['REMOTE_ADDR'];
    }
    return $ip_vote;
}

Seul ce petit bout de code suffit

$ip_vote = $_SERVER['REMOTE_ADDR'];
Messages postés
8
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
2 décembre 2017
0
Merci
Merci pour le bout de code ;-)

Elles ne risquent pas d'être enregistrées puisque le script ne lit pas la variable, donc il est impossible de voter.
Le système de notation n'apparaît que si une id page existe.
Messages postés
675
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
16 septembre 2018
6
0
Merci
Et ça, ce n'est pas du code qui enregistre les données dans la base de données?:
$insert = mysql_query("INSERT INTO note (id_page, note, ip) VALUES ('$id_vote', '$note', '$ip_vote') ");
Messages postés
8
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
2 décembre 2017
0
Merci
Si mais soit je mets une numéro de page bidon :

<!-- PHP --> 
notation ('28', $ip_vote);
<!-- ENDPHP -->
Et dans ce cas les 5 étoiles apparaissent et je clique sur clle que je souhaite pour donner une note et ça enregistre.

Ou soit je choisis ce code :
<!-- PHP --> 
notation ($topic_id, $ip_vote);
<!-- ENDPHP -->

Et là le système de notation n'apparaît plus, car le premier argument n'est pas correctement renseigné, je ne peux donc plus voter.
Messages postés
675
Date d'inscription
samedi 6 octobre 2012
Statut
Membre
Dernière intervention
16 septembre 2018
6
0
Merci
A quoi sert
".mysql_real_escape_string($ipvote)."


mysql_query("SELECT ip FROM note WHERE ip = '".mysql_real_escape_string($ip_vote)."' AND id_page = '".mysql_real_escape_string($id_vote)."'");

moi pour récupérer des données, j'utilise ça et ça marche très bien:
mysql_query("SELECT ip FROM note WHERE ip = \"$ip_vote\" AND id_page = \"$id_vote\"");
0
Merci
Oui je sais, je modifierai le code plus tard (ce n'est pas moi qui l'ai fait), mais pour le moment je cherche surtout à pouvoir récupérer l'ID de ma page généré par une variable phpbb afin de l'utiliser en php.
0
Merci
J'ai trouvé.
Merci quand même.
Il fallait quelqu'un qui connaisse vraiment bien le phpbb car en fait c'est la variable phpbb qu'il fallait récupérer en php.