inserer une variable $_GET ds ma base..?

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 : inserer une variable $_GET ds ma base..?

par kam91 » 26 avr. 2005, 18:24

YEahh Merci a toi Cyrano ca marche maintenant et c'etait vraiment pas bete du tout pour le champ invisible !!

merci a toi de m'avoir aider :lol: :lol:

merci a toi heddicmi aussi !!

==> probleme resolu :idea:

par Cyrano » 26 avr. 2005, 17:49

Ok, j'ai compris: dans ta balise form, il faut que tu récupères et que tu ajoutes l'ID reçu en paramètre, sinon, au rechargement de la page, l'id n'est pas envoyé.

Autre méthode, tu ajoute l'id dans un champ caché (input type="hidden") et tu le récupères lors du traitement par la méthode POST du formulaire en l'initialisant : $id = $_POST['id']
C'est tout

par kam91 » 26 avr. 2005, 17:43

elle apparait sur mon url exemple pour cette page :

http://localhost/site/comment_zik.php?id=4
elle apparait bien dans mon URL

la 1ere requete quand je l'affiche me donne

SELECT * FROM comment WHERE news_id="4"

mais pour la deuxieme requete elle $id est vide

par heddicmi » 26 avr. 2005, 17:29

Es-tu sur de ta 1ère requete ? Tu pourrais la vérifier pour voir si elle contient la valeur de $id... Si oui, elle est perdu dans le cheminement... sinon, tu ne la récupères pas au début de ta page...

par Cyrano » 26 avr. 2005, 17:28

Le problème vient probablement de la manière dont tu envoies cette variable; est-ce qu'elle apparait bien dans l'url quand tu arrives sur cettte page ?

par kam91 » 26 avr. 2005, 17:24

comment je pourrais recuperé la valeur de l'ID de la news sans passer par $_GET si cela pose un probleme;

et comment ce fait t'il que cette requete avec $id fonctionne parfaitement :
$sql = 'SELECT * FROM comment WHERE news_id="'.$id.'"'; 
et avec lautre requete :
'INSERT INTO comment VALUES("", "'.$id.'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['message']).'", "'.addslashes($_POST['auteur']).'", "'.addslashes($_POST['email']).'")';
C'est Vide #-o

par heddicmi » 26 avr. 2005, 16:34

Vu ta requête, tu vois donc que ta variable $id est vide... Le problème ne vient donc pas de la requête, mais de $id...

par Kam » 26 avr. 2005, 16:26

pour repondre a heddicmi je viens de faire echo sql ca m'affiche pr un commentaire ajouté
INSERT INTO comment VALUES("", "", "2005-04-26 16:10:44", "hdghd", "hfghg", "gdhg") 
c a dire que le deuxieme champ est vide..

j'ai fait comme Cyrano j'ai inversé les " et les ' mais ca me met tjrs 0 sur news_id

pour le @ devant get c'etait pour enlever l'erreur : Notice: Undefined index: id in c a dire qd j'ouvre la page comment.php sans qu'aucune id soit affectée ca m'affiche cette erreur.

par Cyrano » 26 avr. 2005, 16:08

Salut,
l'erreur possible, c'est l'inversion des " et des '
 $sql = 'INSERT INTO comment VALUES("", "'.$id.'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['message']).'", "'.addslashes($_POST['auteur']).'", "'.addslashes($_POST['email']).'")';
Devrait être :
$sql = "INSERT INTO comment VALUES('', '". $id ."', '". date("Y-m-d H:i:s") ."', '". addslashes($_POST['message']) ."', '". addslashes($_POST['auteur']) ."', '". addslashes($_POST['email']) ."')";
Par contre plus haut, tu mets :
$id = @$_GET['id'];
Utiliser le @ n'est pas propre comme programmation, mais tu l'as fait car, quand il n'y a pas de paramètre, tu affiches une erreur. Il serait plus approprié de tester l'existence de la valeur:
if(isset($_GET['id']))
{
    $id = $_GET['id'];
}
Mais il manquera encore quelque chose: la variable $id ne sera pas initialisée s'il n'y a pas de paramètre et qu'on envoie le formulaire à l'enregistrement, il te faudrait donc ajouter un else pour attribuer un ID par défaut.

par heddicmi » 26 avr. 2005, 16:01

As-tu fais un echo $sql de ta requête d'insertion... Regarde ce qu'elle donne et exécute là directement dans PHPMyAdmin (je suppose que tu l'utilises)...

Ca te permettra déjà de regarder si ta requête est correcte et avec les bonnes valeurs.. .Et si tu penses qu'elle est correct, PHPMyAdmin te diras pourquoi elle veux pas mettre ta valeur.

inserer une variable $_GET ds ma base..?

par Kam » 26 avr. 2005, 15:42

Salut je debute en PHP j'ai suivie un tutorial pr faire mon premier script de news et maintenant je veut lui attribuer un systeme de Commentaire pr chaque news ajoutée , j'ai donc créer un liens " Ajouté commentaire " sur ma news et envoyer sur une nouvelle page, sur cette nouvelle page j'ai recuperé l'ID de la news a l'aide de $_GET['id'] et je l'ai envoyé dans ma base de donnée dans la table " comment " sur le champ " news_id" avec INSERT INTO etc..

seulement a chaque commentaire ajouté, la valeur ds ma base est vide comme si il n'y avait pas de valeur sur $_GET['id'] or quand je fais echo $_GET['id']; elle m'affiche une bonne valeur de l'ID , le numerom même qui devrait etre inserer dans la base..

je ne comprend pas pourquoi.. si quelqu'un pouvait m'aider un script de news avec systeme de commentaires c'est le plus rependu sur le net
merçi

voici le code concerné

Code : Tout sélectionner

<? include "connect.php"; $id = @$_GET['id']; $sql = 'SELECT * FROM comment WHERE news_id="'.$id.'"'; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on va scanner tous les tuples un par un while ($data = mysql_fetch_array($req)) { // on décompose la date sscanf($data['date'], "%4s-%2s-%2s %2s:%2s:%2s", $an, $mois, $jour, $heure, $min, $sec); // on affiche les résultats echo '<body bgcolor="#003494"><table width="100%" border="0"> <tr bgcolor="#000000"> <td> <table width="100%" border="0"> <tr bgcolor="#847CAD"> <td><font face="Courier New, Courier, mono" size="2" color="#CCCCCC">De <a href="mailto:' ,$data['email'], '">' ,$data['auteur'], '</a> post&eacute; le ' , $jour , '/' , $mois , '/' , $an , ' à ' , $heure , ':' , $min , ':' , $sec ,'</font><font face="Verdana, Arial, Helvetica, sans-serif" color="#FFFFFF"><b></b></font></td> </tr> <tr bgcolor="#EAE6FD"> <td><p><font face="Verdana, Arial, Helvetica, sans-serif">' , nl2br(stripslashes(htmlentities(trim($data['message'])))) , '</font></p></td> </tr> </table> </td> </tr> </table><hr noshade size="1">'; } // on teste si le formulaire a été validé if (isset($_POST['go']) && $_POST['go']=='Ajouter Commentaire') { // on teste la déclaration de nos variables if (!isset($_POST['auteur']) || !isset($_POST['email']) || !isset($_POST['message'])) { $erreur = 'Les variables nécessaires au script ne sont pas définies.'; } else { if (empty($_POST['auteur']) || empty($_POST['email']) || empty($_POST['message'])) { $erreur = 'Au moins un des champs est vide.'; } // si tout est bon, on peut commencer l'insertion dans la base else { // lancement de la requête d'insertion $sql = 'INSERT INTO comment VALUES("", "'.$id.'", "'.date("Y-m-d H:i:s").'", "'.addslashes($_POST['message']).'", "'.addslashes($_POST['auteur']).'", "'.addslashes($_POST['email']).'")'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on redirige vers la page d'accueil du site (attention, cette redirection ne fonctionne qui si vous avez placé cette page dans un répertoire à partir de la racine du site). Si ce n'est pas le cas, veuillez entrer ici le bon chemin d'accès afin de retomber sur la page d'accueil du site. header('Location: comment_zik.php'); // on termine le script courant exit(); } } } ?> <html> <head> <title>Insertion d'un Commentaire !</title> </head> <body> <!-- on fait pointer le formulaire vers la page traitant les données --> <form action="comment_zik.php" method="post"> <table> <tr><td> <span class="gras">Auteur :</span> </td><td> <input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo stripslashes(htmlentities(trim($_POST['auteur']))); ?>"> </td></tr><tr><td> <span class="gras">Email :</span> </td><td> <input type="text" name="email" maxlength="50" size="50" value="<?php if (isset($_POST['email'])) echo stripslashes(htmlentities(trim($_POST['email']))); ?>"> </td></tr><tr><td> <span class="gras">Message :</span> </td><td> <textarea name="message" cols="50" rows="10"><?php if (isset($_POST['message'])) echo stripslashes(htmlentities(trim($_POST['message']))); ?></textarea> </td></tr><tr><td><td align="right"> <input type="submit" name="go" value="Ajouter Commentaire"> </td></tr></table> </form> <?php // on affiche les erreurs éventuelles if (isset($erreur)) echo '<br /><br />',$erreur; ?> </body> </html>
et voici comment j'ai creer ma table..

Code : Tout sélectionner

CREATE TABLE `comment` ( `id` int(11) NOT NULL auto_increment, `news_id` int(11) NOT NULL default '0', `date` datetime NOT NULL default '0000-00-00 00:00:00', `message` text NOT NULL, `auteur` varchar(100) NOT NULL default '', `email` varchar(100) NOT NULL default '', PRIMARY KEY (`id`) ) TYPE=MyISAM ;