Accueil   Accueil    Forum   Forum    Download   Download    Livre d'or   Livre d'or    Contact   Contact    Liens Web   Liens Web

[Recrutement] Aide Update sql - CMS KwsPHP - Le site clés en main

Colonne de gauche

Espace membre

Privé Masquer le formulaire de connexion


Se souvenir de moi ?


Mot de passe oublié

Menu

Forum

Sujets Importants

fleche basForum : Masquer l’entête

Accès rapide :

 

Effectuer une Recherche avancée OU


fleche bas[Résolu] [Recrutement] Aide Update sql  [4 réponses]

fleche bas

SpereD
starsj2.png
Visiteur


avatar
Hors ligne

Nombre de posts: 69 (0.01/Jour)
Inscrit(e) le: 28 juillet 2006
Visiter son site
Imprimer Permalien lundi 11 février 2013 à 14:39  
Bonjour,

J'essaye de faire un petit module pour le jeu World of Warcraft qui concerne les recrutements de joueur. Jusque la rien de bien complexe, j'ai fais la partie visible pour le visiteur lambda avec une connection à une BDD, si je modifie manuellement la BDD, les modifications apparaissent bien. La ou je bloque, malgré de nombreuse heures de recherche, c'est l'UPDATE sql coté administration.

Je fais le tout par des select option, mais je n'arrive pas a mettre a jours la base, je sèche sur la façon de bien gérer chaque select. A savoir qu'il y a 2 BDD, une avec les classes et spécialisation de chacun ( 3 à 4 ) et l'autre avec le besoin de celles-ci.

Voici les BDD :

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.  
  6. --
  7. -- Structure de la table `recrutement`
  8. --
  9.  
  10. CREATE TABLE IF NOT EXISTS `recrutement` (
  11.   `id` int(11) NOT NULL AUTO_INCREMENT,
  12.   `classe` varchar(100) NOT NULL,
  13.   `spe1` varchar(100) NOT NULL,
  14.   `spe2` varchar(100) NOT NULL,
  15.   `spe3` varchar(100) NOT NULL,
  16.   `spe4` varchar(100) NOT NULL,
  17.   PRIMARY KEY (`id`)
  18. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;
  19.  
  20. --
  21. -- Contenu de la table `recrutement`
  22. --
  23.  
  24. INSERT INTO `recrutement` (`id`, `classe`, `spe1`, `spe2`, `spe3`, `spe4`) VALUES
  25. (1, 'Chaman', 'Restauration', 'Elementaire', 'Amélioration', ''),
  26. (2, 'Chasseur', 'Bête', 'Précision', 'Survie', ''),
  27. (3, 'Demoniste', 'Déstruction', 'Démonologie', 'Affliction', ''),
  28. (4, 'Dk', 'Sang', 'Givre', 'Impie', ''),
  29. (5, 'Druide', 'Equilibre', 'Restauration', 'Gardien', 'Farouche'),
  30. (6, 'Guerrier', 'Protection', 'Arme', 'Fureur', ''),
  31. (7, 'Mage', 'Feu', 'Givre', 'Arcane', ''),
  32. (8, 'Moine', 'Maître Brasseur', 'Tisse Brûme', 'Marche Vent', ''),
  33. (9, 'Paladin', 'Protection', 'Sacré', 'Vindicte', ''),
  34. (10, 'Pretre', 'Ombre', 'Sacré', 'Discipline', ''),
  35. (11, 'Voleur', 'Finesse', 'Combat', 'Assassinat', '');
  36.  
  37. -- --------------------------------------------------------
  38.  
  39. --
  40. -- Structure de la table `recrut_besoin`
  41. --
  42.  
  43. CREATE TABLE IF NOT EXISTS `recrut_besoin` (
  44.   `id` int(11) NOT NULL AUTO_INCREMENT,
  45.   `ref` int(11) NOT NULL,
  46.   `classe` varchar(100) NOT NULL,
  47.   `besoin1` varchar(11) NOT NULL,
  48.   `besoin2` varchar(11) NOT NULL,
  49.   `besoin3` varchar(11) NOT NULL,
  50.   `besoin4` varchar(11) NOT NULL,
  51.   PRIMARY KEY (`id`),
  52.   KEY `ref` (`ref`)
  53. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
  54.  
  55. --
  56. -- Contenu de la table `recrut_besoin`
  57. --
  58.  
  59. INSERT INTO `recrut_besoin` (`id`, `ref`, `classe`, `besoin1`, `besoin2`, `besoin3`, `besoin4`) VALUES
  60. (1, 1, 'Chaman', 'fort', 'aucun', 'normal', ''),
  61. (2, 2, 'Chasseur', '', '', '', ''),
  62. (3, 3, 'Demoniste', '', '', '', ''),
  63. (4, 4, 'Dk', '', '', '', ''),
  64. (5, 5, 'Druide', '', '', '', ''),
  65. (6, 6, 'Guerrier', '', '', '', ''),
  66. (7, 7, 'Mage', '', '', '', ''),
  67. (8, 8, 'Moine', '', '', '', ''),
  68. (9, 9, 'Paladin', '', '', '', ''),
  69. (10, 10, 'Pretre', '', '', '', ''),
  70. (11, 11, 'Voleur', '', '', '', '');
  71.  
  72.  
  73. #####!!!#####
  74. ?>

J'ai repris les bases pour les tables du module d'avancée PVE de Gothi qui ressemblais un peu à ce dont j'ai besoin.

voici le code pour gestion.php

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1.  
  2. <?php
  3. // ---------------------------------------------------------------
  4. // KwsPHP kOoGar Web System
  5. // $Id$
  6. // ---------------------------------------------------------------
  7. // Création : xx/xx/xx par xxx
  8. // ---------------------------------------------------------------
  9.  
  10. /* Ce module vide vous expliquera les différentes étapes de la création du module.
  11. Ici, ce n'est que la base,  la syntaxe basique si vous préferez. Ce zip sera expliqué petit à petit, afin que vous puissiez comprendre toutes les etapes. */
  12.  
  13. /*------------------------------------------
  14. LIEN POUR Y ACCEDER : index.php?mod=module_vide&ac=gestion
  15. --------------------------------------------*/
  16.  
  17. //Ligne de protection de votre module, cette ligne assure sa sécurité.
  18. if (!(defined('__KWS__'))) {die ('Erreur d\'appel de fichier.');}
  19.  
  20. if (is_module('module_vide'))
  21. {
  22. //On vérifie le grade (ici administrateur)
  23. //Pour laisser l'acces à un certain grade, remplacer 4 par le grade minimum (0 = membre lambda, 1= membre privilegié, 2=modérateur forum, 3=modérateur général, 4=administrateur)
  24. if (get_grade() >= GRD_ADMIN)
  25. {
  26.     if(!empty($_GET['action']) == 'update'){
  27.     
  28.         //if(!empty($_POST['update'])){
  29.         
  30.             $query3 = reqmysql('SELECT * FROM `recrut_besoin`');
  31.     
  32.             while($data3 = mysql_fetch_array($query3)){
  33.                 
  34.                          $op = 1;
  35.             
  36.                 for($op = 1;$op<5;$op++){
  37.             
  38.                     $post_value = 'besoin'.$op.'_'.$data3['classe'];            
  39.             
  40.             {
  41.             
  42.                 
  43.             
  44.                 reqmysql('UPDATE `recrut_besoin` SET `besoin'.$op.'` ="'.$_POST[besoin1].'"  WHERE `classe` = "'.$data3['ref'].'"');
  45.                 }
  46.         
  47.             }
  48.     
  49.     echo df_message('information','Les donn&eacute;es ont &eacute;t&eacute; mises &agrave; jour');
  50.     
  51.     header('location:index.php?mod='.$K_mod.'&ac=gestion');
  52.     
  53.     }
  54.     
  55.         $recrut .= '<div id="acordvert">';
  56.     
  57.     $query = reqmysql('SELECT * FROM `recrutement` ORDER BY `id` ASC');
  58.     
  59.         while($data = mysql_fetch_array($query)){
  60.     
  61.     $recrut .= '<form action="index.php?mod='.$K_mod.'&amp;ac=gestion&amp;action=update" method="post" name="recrut_besoin-form">';    
  62.     $recrut .= '<div id="info2"><span class="'.$data[classe].'">'.$data[classe].'</span>';
  63.     $recrut .= '<div align="center">';
  64.     
  65.             $query2 = reqmysql('SELECT * FROM `recrut_besoin` WHERE `id` = "'.$data['id'].'"');
  66.     
  67.         while($besoin = mysql_fetch_array($query2)){
  68.         
  69.     $recrut .= '<p style="font-size:10px;">'.$data[spe1].'<select name="besoin1" size="0">';
  70.     $recrut .= '<option value="">aucun</option>';
  71.     $recrut .= '<option value="">normal</option>';
  72.     $recrut .= '<option value="">fort</option>';
  73.     $recrut .= '</select></p>';
  74.     $recrut .= '<p style="font-size:10px;">'.$data[spe2].'<select name="besoin2" >';
  75.     $recrut .= '<option value="">aucun</option>';
  76.     $recrut .= '<option value="">normal</option>';
  77.     $recrut .= '<option value="">fort</option>';
  78.     $recrut .= '</select></p>';
  79.     $recrut .= '<p style="font-size:10px;">'.$data[spe3].'<select name="besoin3" >';
  80.     $recrut .= '<option value="">aucun</option>';
  81.     $recrut .= '<option value="">normal</option>';
  82.     $recrut .= '<option value="">fort</option>';
  83.     $recrut .= '</select></p>';
  84.     $recrut .= '<p style="font-size:10px;">'.$data[spe4].'<select name="besoin4" >';
  85.     $recrut .= '<option value="">aucun</option>';
  86.     $recrut .= '<option value="">normal</option>';
  87.     $recrut .= '<option value="">fort</option>';
  88.     $recrut .= '</select></p>';
  89.     $recrut .= '</div></div>'; 
  90.     }
  91. }
  92.  
  93.     $recrut .= '<div align="center"><br /><input type="submit" value="update" /><br /><br /></div></div> ';
  94.  
  95.     };
  96.     
  97.  
  98.     
  99.     //Ligne indiquant au thème de placer un bloc de titre $titre et de contenu $contenu
  100.     bloc($result_blocs->parametre1,$recrut);
  101.     
  102.     
  103. }
  104.  
  105.  
  106. ?>
  107.  


Avec ce code, quand j'update, il y a bien quelque chose que ce passe, ca reset la table, enfin tout ce que j'avais insérer manuellement disparait. Certes, je suis conscient que c'est la base l'update, mais la, je dois louper quelque chose et j'ignore ce que c'est.
Si vous avez une piste je suis preneur.

Je pense que l'erreur dois venir de


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.  $op = 1;
  6.             
  7.                 for($op = 1;$op<5;$op++){
  8.  
  9.  
  10. #####!!!#####
  11. ?>

Mais je n'en suis pas sur

Panneau haut

Gand ar boanhag an amzer,
A benn da beb tra e teuer.
Pancarte

( Avec de la peine et du temps, On viens a bout de tout )


Infos CMS KwsPHP


Informations : Avant de poster un sujet sur le forum

Veuillez avant tout vérifiez la comparaison de vos fichiers sur votre site
Mon compte / Outils / Comparaison


La recherche avancée du forum (en ciblant au mieux les options de la recherche)
La Faq - La documentation - La documentation en vidéo - Le sujet "Install et Mise à jour"
Vous devez lire en priorité le topic de la 1.6 pour en découvrir ses fonctionnalités


Afficher



SpereD
starsj2.png
Visiteur


avatar
Hors ligne

Nombre de posts: 69 (0.01/Jour)
Inscrit(e) le: 28 juillet 2006
Visiter son site
Imprimer Permalien mardi 12 février 2013 à 14:21  
Bon après quelque tonnes de recherche, j'ai bien une correspondance sql,

Mais il me reste encore un petit soucis, l'update change bien en sql mais seulement sur toute les id en meme temps


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.      if(!empty($_GET['action']) == 'update'){
  6.     
  7.         //if(!empty($_POST['update'])){
  8.         
  9.              $query3 = reqmysql('SELECT * FROM `recrut_besoin`');
  10.     
  11.              while($data3 = mysql_fetch_array($query3)){
  12.                 {
  13.                        
  14.                 
  15.                      
  16.                  reqmysql("
  17.                          UPDATE `recrut_besoin` 
  18.                          SET         `besoin1`         ='".$_POST[besoin1]."',
  19.                                     `besoin2`         ='".$_POST[besoin2]."',
  20.                                     `besoin3`         ='".$_POST[besoin3]."',
  21.                                     `besoin4`         ='".$_POST[besoin4]."'
  22.                          WHERE      `ref`             ='".$data3['id']."'
  23.                          ") or $erreur = true;
  24.                  }
  25.         
  26.             } 
  27.         echo df_message('information','Les donn&eacute;es ont &eacute;t&eacute; mises &agrave; jour');
  28.     
  29.     header('location:index.php?mod='.$K_mod.'&ac=gestion');
  30.     
  31.     }
  32.  
  33.  
  34. #####!!!#####
  35. ?>


je continu à chercher pour tenter de trouver la solution.

Panneau haut

Gand ar boanhag an amzer,
A benn da beb tra e teuer.
Pancarte

( Avec de la peine et du temps, On viens a bout de tout )


ΦOtocinclus
Administrateur
stars7.png


avatar
Hors ligne

Nombre de posts: 3163 (0.43/Jour)
Inscrit(e) le: 02 septembre 2006
Visiter son site
Imprimer Permalien mardi 12 février 2013 à 20:01  
bonsoir,


Citation de SpereD :
A savoir qu'il y a 2 BDD, une avec les classes et spécialisation de chacun ( 3 à 4 ) et l'autre avec le besoin de celles-ci.


tout d'abord une petite précision de vocabulaire. Tu n'as pas 2 BDD mais 2 Tables dans ta BDD ...

Ensuite dans ta table `recrut_besoin`, quelles différences entre `id` et `ref` ? Tu leurs donnes visiblement les mêmes valeurs quand tu initialises ta table, et comme tu utilises `ref` pour ton update, ça pourrait nous aider ...

Ensuite il serait bien de nous en dire un peu plus sur ce que tu veux faire exactement. A quoi ressemble ton formulaire d'update, quelles sont les données transmises ?

Concernant ton code :

Citation :
if(!empty($_GET['action']) == 'update' smiley sg3bgg29g.gif { empty ou == 'update' faut choisir parce que là je crains des résultats étranges ...

//if(!empty($_POST['update'])){

$query3 = reqmysql('SELECT * FROM `recrut_besoin`' smiley sg3bgg29g.gif ; là tu récupère TOUTE ta table `recrut_besoin`

while($data3 = mysql_fetch_array($query3)){ pour chaque ligne de ta table `recrut_besoin` ...
{


dans la table `recrut_besoin` tu remplaces les besoins par ceux POSTés si `ref`== l'`id` de la ligne en cours. Comme pour chaque ligne tu as `id`==`ref` tu remplaces donc les besoins de la ligne en cours ...
reqmysql("
UPDATE `recrut_besoin`
SET `besoin1` ='".$_POST[besoin1]."',
`besoin2` ='".$_POST[besoin2]."',
`besoin3` ='".$_POST[besoin3]."',
`besoin4` ='".$_POST[besoin4]."'
WHERE `ref` ='".$data3['id']."'
") or $erreur = true;
}

}
echo df_message('information','Les données ont été mises à jour' smiley sg3bgg29g.gif ;

header('location:index.php?mod='.$K_mod.'&ac=gestion' smiley sg3bgg29g.gif ;

}



Il est donc tout à fait normal que TOUTE ta table soit mise à jour puisque tu fais ta requête d'update pour chaque ligne de ta table ...




LES C0NS, ÇA OSE TOUT. C'EST MÊME À ÇA QU'ON LES RECONNAÎT.

Michel Audiard


SpereD
starsj2.png
Visiteur


avatar
Hors ligne

Nombre de posts: 69 (0.01/Jour)
Inscrit(e) le: 28 juillet 2006
Visiter son site
Imprimer Permalien mercredi 13 février 2013 à 01:14  
Bonsoir smiley sg3agg29g.gif

d'abord, merci d'avoir répondu smiley sg3agg29g.gif

Donc oui effectivement c'est 2 tables, pardonne moi mon erreur, pour ce qui est de la table 'recrut_besoin', en faites il n'y en a aucune différence, j'ai voulu reprendre une table ainsi que sa source, que Gothicae avait fait pour un autre module, qui me paraissait correct pour mes besoins, mais il est vrai que je pourrais très bien m'en passé.

Concernant ce formulaire d'update il est sommes toute basique, du moins je le pense.

cela donnerais quelque chose du genre :

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.  
  6. classe X
  7.  spécialitation A : besoin en balise select " option Fort, faible ou aucun " 
  8.  spécialitation B : besoin en balise select " option Fort, faible ou aucun " 
  9.  spécialitation C : besoin en balise select " option Fort, faible ou aucun " 
  10.  spécialitation D : besoin en balise select " option Fort, faible ou aucun " 
  11.  
  12. classe X
  13.  spécialitation A : besoin en balise select " option Fort, faible ou aucun " 
  14.  spécialitation B : besoin en balise select " option Fort, faible ou aucun " 
  15.  spécialitation C : besoin en balise select " option Fort, faible ou aucun " 
  16.  spécialitation D : besoin en balise select " option Fort, faible ou aucun " 
  17.  
  18. et ce répété 11 fois dans la totalité
  19.  
  20.  
  21. #####!!!#####
  22. ?>


Donc je me suis porté vers une table avec " une id, une classe et les 4 spécialisations" , puis une autre table, avec " une id, ref ( qui correspond a la classe de la premiere table, puis le besoin pour chaque spécialisation ". C'est ce qui m'a semblé le plus " logique" . Pour l'update, il n'y aurait que le besoin a changer. Apres, je fais l'update de la totalité des données. j'ai pas trouvé plus "simple" en faites, si j'avais plus de connaissance, j'aurais cherché à faire un update seulement du/des besoins modifié, mais la, mon niveau de compétence n'est pas encore assez élevé pour réussir, un jours j'y arriverais, mais pour le moment j'essaye déjà et encore de bien comprendre ce que je fais surtout les erreurs, pour ne pas les reproduires smiley sg3agp.gif

tout comme j'essaye de comprendre ce que tu m'as dis.

Si j'ai bien compris, sur

Citation :

if(!empty($_GET['action']) == 'update'



il faudrais que j'enlève le (!empty qui pourrait poser problème ou donnée de résultats étranges pour reprendre tes termes.

Pour le restes, si je comprend tes trois petits points, en faites j'appel toute ma table pour rien faire a chaque ligne et demander de changer chaque ligne.

comme si


Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5. while($data3 = mysql_fetch_array($query3)){ 
  6. {
  7.  
  8.  
  9. #####!!!#####
  10. ?>

était de trop ou qu'il était en l'état inutile, dans ce cas le je comprend mieux l'erreur que j'ai à savoir que peu importe le besoin de tel ou tel classe, si je changes un besoin sur une spécialitation d'une classe, toute les classes on le meme besoin sur cette la spécialisation A.

Je vais mieux étudié la question en cherchant encore smiley sg3agg29g.gif

Merci smiley sg3agg29g.gif

=================
== huhu =========
=================

Bon et bien, je ne peux que te remercié de m'avoir mis sur la voie de la raison, tel un sage tu me mis sur la voie du chemin à parcourir, maintenant j'ai bien les modification ligne par ligne, j'ai plus qu'a faire un truc avec le selected de mis sur le choix, et la m'attendent encore moulte périple.

Voila le code corrigé, pas optimisé je pense, mais fonctionnel

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.  
  6.    if(($_GET['action']) == 'update'){
  7.     
  8.         // if(!empty($_POST['update'])){
  9.         
  10.              $query3 = reqmysql('SELECT * FROM `recrut_besoin`');
  11.     
  12.              while($data3 = mysql_fetch_array($query3)){
  13.                 {
  14.                        
  15.                 $op = 1;
  16.             
  17.                 for($op = 1;$op<5;$op++){
  18.             
  19.                     $post_value = 'besoin'.$op.'_'.$data3['classe'] ;    
  20.                      
  21.                  reqmysql('
  22.                          UPDATE `recrut_besoin` 
  23.                          SET         `besoin'.$op.'`         = "'.$_POST[$post_value].'"
  24.                          WHERE      `classe`             ="'.$data3['classe'].'"
  25.                          ') or $erreur = true;
  26.                  }
  27.         
  28.             } 
  29.         echo df_message('information','Les donn&eacute;es ont &eacute;t&eacute; mises &agrave; jour');
  30.     
  31.     header('location:index.php?mod='.$K_mod.'&ac=gestion');
  32.     
  33.     }
  34.  }
  35.  
  36.  
  37. #####!!!#####
  38. ?>

et ici la base du formulaire concernant l'appel ci dessus

Code PHP :
Pour copier le contenu exact du code,
Veuillez citer le message
  1. <?php  
  2. #####!!!#####
  3.  
  4.  
  5.     $recrut .= '<p style="font-size:10px;">'.$data[spe2].'<select name="besoin2_'.$besoin[classe].'" >';
  6.     $recrut .= '<option value="aucun">aucun</option>';
  7.     $recrut .= '<option value="normal">normal</option>';
  8.     $recrut .= '<option value="fort">fort</option>';
  9.     $recrut .= '</select></p>';
  10.  
  11.  
  12. #####!!!#####
  13. ?>
Édité 2 fois - Dernière édition: 13/02/2013 à 03:48 Par SpereD.


Panneau haut

Gand ar boanhag an amzer,
A benn da beb tra e teuer.
Pancarte

( Avec de la peine et du temps, On viens a bout de tout )


ΦOtocinclus
Administrateur
stars7.png


avatar
Hors ligne

Nombre de posts: 3163 (0.43/Jour)
Inscrit(e) le: 02 septembre 2006
Visiter son site
Imprimer Permalien jeudi 14 février 2013 à 21:48  

Citation de SpereD :
Bon et bien, je ne peux que te remercié de m'avoir mis sur la voie de la raison, tel un sage tu me mis sur la voie du chemin à parcourir,


c'est comme cela que l'on apprend. Il est préférable que tu recherches toit même une solution viable à partir d'indication de direction, plutôt que recopier "bêtement" un code tout fait ... Surtout qu'en programmation il n'existe jamais UNE solution, mais toujours différentes possibilité et à toi de trouver celle qui convient le mieux à ta façon de penser ...


LES C0NS, ÇA OSE TOUT. C'EST MÊME À ÇA QU'ON LES RECONNAÎT.

Michel Audiard


fleche bas[Résolu] [Recrutement] Aide Update sql  [4 réponses]