Ajout dynamique dans base sql via PHP

Ajout dynamique dans base sql via PHP - PHP - Programmation

Marsh Posté le 20-04-2006 à 11:36:10    

Bonjour à tous,
 
voila mon petit soucis, je cherche a faire un systeme de vote pour une web radio, j'ai déjà la base, mais il me reste un dernier problème. En effet, quand une personne qui vote pour un titre qui n'est pas encore rensigné dans la base de données, j'aimerai qeu ca l'ajoute automatiquement, mais suites au tests que j'ai fait (voir ci dessous), le serveur sql m'insulte, et inexorablement ca ajoute des lignes vides dans la base...
 
 
 

Code :
  1. <?php
  2. $flag=NULL;
  3. // On récupère les variables
  4. $ftitre = fopen ("http://adresse.fr/titre.txt","r" );
  5. $titre = fgets ($ftitre, 60);
  6. fclose ($ftitre);
  7. $fartiste = fopen ("http://adresse/artiste.txt","r" );
  8. $artiste = fgets ($fartiste, 60);
  9. fclose ($fartiste);
  10. // connexion à la base  
  11. $db = mysql_connect('sql.adresse.fr', 'user', 'password'); 
  12. mysql_select_db('base',$db);
  13. error_reporting(E_ALL);
  14.   $sqlvote = "SELECT points, titre, artiste FROM Top_Flop
  15. WHERE titre=$titre
  16. AND artiste=$artiste"; 
  17.   $resultat=mysql_query($sqlvote);
  18. while ($data = mysql_fetch_array($sqlvote))
  19. {
  20.   $id = $data[id_titre];
  21.   $points = $data[points]; 
  22.   $titre = $data[titre];
  23.   $artiste = $data[artiste]; 
  24.   $points = $points + 1; 
  25.   $vote = "UPDATE Top_Flop SET points = '$points' WHERE id_titre=$id"; 
  26.   $resultat=mysql_query($vote);
  27.   $flag="oui";
  28.   echo "Merci d\'avoir donner ton avis sur $artiste - $titre ($points points)" ; 
  29. }
  30. if ($flag == NULL)
  31. {
  32. //le titre n'est pas référencé, on le rentre
  33. $sql = "INSERT INTO Top_Flop VALUES('','$artiste','$titre','1')";
  34.      mysql_query($sql);
  35. }
  36.   mysql_close();  // on ferme la connexion
  37. ?>

Reply

Marsh Posté le 20-04-2006 à 11:36:10   

Reply

Marsh Posté le 20-04-2006 à 11:57:36    

$data[id_titre] est bien renseigné pour chaque titre? L'ID est bien unique? Ca serait mieux si tu mettais le msg d'erreur...

Reply

Marsh Posté le 20-04-2006 à 12:04:54    

Oui bien sur, dans ma base il est rensigné en tant que auto increment, donc je ne le rensigne jamais quand je rempli, sql le fait tout seul ^^ (d'ou le "INSERT INTO Top_Flop VALUES('','$artiste','$titre','1')"; avec un champs vide dans le premier champs...
En version manuel ca marche très bien l'ajout, maintenant il bug un peu plus en fait ca ajoute toujours le meme titre si on vote plusisuers fois d'affilé...
[edit] faute de frappe pouvant ne plus faire comprendre le message.


Message édité par cyrilpop le 20-04-2006 à 12:06:13
Reply

Marsh Posté le 20-04-2006 à 12:48:47    

tant que tu posteras pas le msg d'erreur que php t'affiche, je pourrai pas t'aider +...

Reply

Marsh Posté le 20-04-2006 à 12:49:00    

J'ai modifié un peu le code en métant des flag histoire de voir aux intermédiaires. Le nouveau code est :
 

Code :
  1. $sqlvote = "SELECT Top_Flop.*
  2. FROM Top_Flop
  3. WHERE titre = \"$titre\"
  4. AND artiste = \"$artiste\""; 
  5.   $resultat = mysql_query($sqlvote);
  6. echo $resultat;
  7. ?><br><?php
  8. echo $sqlvote;
  9. if ($resultat != NULL)
  10. {
  11.   $data = mysql_fetch_array($sqlvote);
  12.   $id = $data[id_titre];
  13.   $points = $data[points]; 
  14.   $titre = $data[titre];
  15.   $artiste = $data[artiste]; 
  16.   $points = $points + 1; 
  17.   $vote = "UPDATE Top_Flop SET points = '$points' WHERE id_titre=$id"; 
  18.   $resultat=mysql_query($vote);
  19.   $flag="oui";
  20.   echo "Merci d\'avoir donner ton avis sur $artiste - $titre ($points points)" ; 
  21. }
  22. if ($flag == NULL)
  23. {
  24. //le titre n'est pas référencé, on le rentre
  25. $sql = "INSERT INTO Top_Flop VALUES('','$artiste','$titre','1')";
  26.      mysql_query($sql);
  27. }
  28.   mysql_close();  // on ferme la connexion
  29. ?>


 
En retour j'ai ceci :
 

Citation :


Resource id #4
SELECT Top_Flop.* FROM Top_Flop WHERE titre = "Even The Spirits Are Afraid" AND artiste = "The Gathering"
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/adresse/top.php on line 33
 
Notice: Use of undefined constant id_titre - assumed 'id_titre' in /var/www/adresse/top.php on line 34
 
Notice: Use of undefined constant points - assumed 'points' in /var/www/adresse/top.php on line 35
 
Notice: Use of undefined constant titre - assumed 'titre' in /var/www/adresse/top.php on line 36
 
Notice: Use of undefined constant artiste - assumed 'artiste' in /var/www/adresse/top.php on line 37
Merci d\'avoir donner ton avis sur - (1 points)

Reply

Marsh Posté le 20-04-2006 à 12:52:19    

est-ce qu'au moins, t'es bien connecté à ta BD. Le msg d'erreur sur la ligne 33 suggère que la ressource n'est pas une connexion valide à ta bd...

Reply

Marsh Posté le 20-04-2006 à 12:56:51    

oui je suis bien connecter, je viens de mettre un flag qui rentre une ligne bidon, et la ligne st bien visible depuis la table d'admin

Reply

Marsh Posté le 20-04-2006 à 13:53:17    

Bonjour,
 
A la ligne 18:
 

Citation :

$vote = "UPDATE Top_Flop SET points = '$points' WHERE id_titre=$id";  


 
Il me semble que tu devrais plutôt mettre:
 

Citation :

$vote = "UPDATE Top_Flop SET points = '$points' WHERE id_titre='".$id."'";  

Reply

Marsh Posté le 20-04-2006 à 13:59:26    

ça change strictement rien AiRdi :o
 
pour les erreurs Use of undefined constant XXX c'est parce qu'il manque des quotes dans tes tableaux associatifs:

Code :
  1. $id = $data['id_titre'];


 
pour le pb de la requete:

Code :
  1. $data = mysql_fetch_array($sqlvote);


c'est pas la requete que prends fetch_array en paramètre mais le resultat d'un query :o
 

Reply

Marsh Posté le 20-04-2006 à 14:01:31    

Allelouya...
 
Après avoir tatonné; recherché de la doc sur internet, j'ai enfin trouvé la solution... Ouf j'ai bien cru ne jamais y arriver. Je la donne pour les suivants qui voudrait pouvoir en profiter ^^

Code :
  1. <?php
  2. $flag=NULL;
  3. // On récupère les variables
  4. $ftitre = fopen ("http://adresse/titre.txt","r" );
  5. $titre = fgets ($ftitre, 60);
  6. fclose ($ftitre);
  7. $fartiste = fopen ("http://adresse/artiste.txt","r" );
  8. $artiste = fgets ($fartiste, 60);
  9. fclose ($fartiste);
  10. // connexion à la base  
  11. $db = mysql_connect('sql.adresse.fr', 'login', 'password'); 
  12. mysql_select_db('base',$db);
  13.   $sqlvote = "SELECT Top_Flop.*
  14. FROM Top_Flop
  15. WHERE titre = \"$titre\"
  16. AND artiste = \"$artiste\"";
  17.   $req = mysql_query($sqlvote);
  18.   $data = mysql_fetch_assoc($req);
  19. if ($data[id_titre] != NULL)
  20. {
  21.   $id = $data[id_titre];
  22.   $points = $data[points]; 
  23.   $titre = $data[titre];
  24.   $artiste = $data[artiste]; 
  25.   $points = $points + 1; 
  26.   $vote = "UPDATE Top_Flop SET points = '$points' WHERE id_titre = $id";
  27.   mysql_query($vote);
  28.   $flag="oui";
  29. }
  30. if ($flag == NULL)
  31. {
  32. //le titre n'est pas référencé, on le rentre
  33. $sql = "INSERT INTO Top_Flop VALUES('','$artiste','$titre','1')";
  34.      mysql_query($sql);
  35. }
  36. mysql_close();  // on ferme la connexion
  37. echo "Merci d'avoir donner ton avis sur $artiste - $titre ($points points)" ;
  38. ?>


 
 
En tout cas merci a vous tous pour votre participation :)


Message édité par cyrilpop le 20-04-2006 à 14:02:04
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed