IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Amélioration de mon script [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut Amélioration de mon script
    Bonsoir,
    Je recontre un soucis avec mon code php. Lorsque j'effectue un simple changement (par exemple 1 devient 2 et 2 devient 1 dans mon menus déroulant) le changement des données dans la bdd se passe très bien. par contre, si je fais 3 changements (1 devient 2 puis 3 devient 1) alors les changements dans la bdd ne correspondent pas aux choix.
    Merci par avance pour votre aide.
    Voici mes codes:

    1ère page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    <?php>// Connection au serveur + Sélection de la base de données.
    mysql_connect("localhost","root","");
    mysql_select_db("rfm");
     
    //Retour du nom de la table joueur(x) contenant l'équipe par rapport au pseudo du joueur connecté.
    $retinfo = mysql_query("SELECT tablejoueurs FROM info WHERE pseudo='$pseudo'")or die(mysql_error()); 
    while ($rettable = mysql_fetch_array($retinfo))
    {
    	$table = $rettable['tablejoueurs']; 
    }
    //Remise en ordre des numéros des joueurs.
    mysql_query("UPDATE $table SET numero='1'WHERE id='1'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='2'WHERE id='2'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='3'WHERE id='3'")or die(mysql_error());
     
     
    //Retour des infos propres à chaque joueur de l'équipe et mise en tableau des infos.
    	$query_Recordset1 = "SELECT place, nom, prenom, age FROM $table ORDER BY id ASC";
    	$Recordset1 = mysql_query($query_Recordset1) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);	
     
    mysql_close();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
     
    <style type="text/css">
    <!--
    #form1 table {
    	float: left;
    }
    -->
    </style>
    </head>
    <body>
    <!--mise en forme du tableau des menus déroulants.-->
    <form id="form1" name="form1" method="post" action="modif_placebis.php">
      <label>
    <table width="60" height="140" border="1">
      <tr>
        <th width="50" height="35" scope="col">numero</th>
      </tr>
      <tr>
        <td height="25"><select name="numero1" onchange="rang(0)">
    <option value="1"selected="selected">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </select></td>
      </tr>
      <tr>
         <td height="25"><select name="numero2" onchange="rang(1)">
    <option value="1">1</option>
    <option value="2"selected="selected">2</option>
    <option value="3">3</option>
    </select></td>
      </tr>
      <tr>
        <td height="25"><select name="numero3" onchange="rang(2)">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3"selected="selected">3</option>
    </select></td>
      </tr>
    </table>
     
    <!--mise en forme du tableau des infos des joueurs.-->
    <table height="80" border="1">
      <tr>
        <th height="35">place</th>
        <th height="35">nom</th>
        <th height="35">prenom</th>
        <th height="35">age</th>
         </tr>
      <?php do { ?>
        <tr>
          <td height="25"><?php echo $row_Recordset1['place']; ?></td>
          <td><?php echo $row_Recordset1['nom']; ?></td>
          <td><?php echo $row_Recordset1['prenom']; ?></td>
          <td><?php echo $row_Recordset1['age']; ?></td>
        </tr>
        <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
    </table>
    <input type="submit"  value="Valider" />
      </label>
    </form>
    </body>
    </html>
    <!--Code Javascript pour les menus déroulants.-->
    <script type="text/javascript">
    var sel; // Variable pour récupérer tous les <select>
    var valeurs = []; // Tableau pour garder en mémoire les valeurs
    function rang(nb) { // En paramètre l'indice du <select>
    	var val = sel[nb].value; // On garde dans "val" la valeur du <select> modifié
    	for(var i=0,l=sel.length;i<l;i++) { // On parcourt la totalité des <select>
    		if((i!=nb) && (sel[i].value == val)) { // Si ce n'est pas le <select> modifié et que la valeur correspond
    			sel[i].value = valeurs[nb]; // On lui applique l'ancienne valeur de <select> modifié
    			valeurs[i] = valeurs[nb]; // Et on enregistre le changement dans le tableau des valeurs
    		}
    	}
    	valeurs[nb] = val; // On enregistre également le changement du <select> modifié
    }
    window.onload=function() { // Au chargement (initialisation)
    	sel = document.getElementsByTagName("select"); // On récupère tous les éléments <select> dans "sel"
    	for(var i=0,l=sel.length;i<l;i++) { // On parcourt tout
    		valeurs.push(sel[i].value); // Et on sauvegarde les valeurs dans le tableau "valeurs".
    	}
    }
    </script>
    Et voici ma 2ème page

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php>//Connection au serveur + Sélection de la base de données.
    mysql_connect("localhost","root","");
    mysql_select_db("rfm");
     
    //Retour du nom de la table joueur(x) contenant l'équipe par rapport au pseudo du joueur connecté.
    $retinfo = mysql_query("SELECT tablejoueurs FROM info WHERE pseudo='$pseudo'")or die(mysql_error()); 
    while ($rettable = mysql_fetch_array($retinfo))
    {
    	$table = $rettable['tablejoueurs']; 
    }
    //Retour des variables des formulaires.
    $numero1=$_POST['numero1'];
    $numero2=$_POST['numero2'];
    $numero3=$_POST['numero3'];
     
     
     
     //Lecture des données des joueurs en fonction de leur classement.
    $retourbddj1 = mysql_query("SELECT place, nom, prenom, age FROM $table WHERE id=1")or die(mysql_error()); 
    while ($donnees = mysql_fetch_array($retourbddj1))
    {
    	$place1 = $donnees['place'];
    	$nom1 = $donnees['nom'];
    	$prenom1 = $donnees['prenom'];
    	$age1 = $donnees['age'];
    }
    $retourbddj2 = mysql_query("SELECT place, nom, prenom, age FROM $table WHERE id=2")or die(mysql_error()); 
    while ($donnees = mysql_fetch_array($retourbddj2))
    {
    	$place2 = $donnees['place'];
    	$nom2 = $donnees['nom'];
    	$prenom2 = $donnees['prenom'];
    	$age2 = $donnees['age'];
    	}
    $retourbddj3 = mysql_query("SELECT place, nom, prenom, age FROM $table WHERE id=3")or die(mysql_error()); 
    while ($donnees = mysql_fetch_array($retourbddj3))
    {
    	$place3 = $donnees['place'];
    	$nom3 = $donnees['nom'];
    	$prenom3 = $donnees['prenom'];
    	$age3 = $donnees['age'];
    }
     
    //Modification du numero des joueurs dans la base de donnée en fonction des choix de l'utilisateur.
    mysql_query("UPDATE $table SET numero='$numero1'WHERE id='1'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero2'WHERE id='2'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero3'WHERE id='3'")or die(mysql_error());
     
    //Déplacement des attributs propres des joueurs sélectionnés à leur nouvel emplacement.
    mysql_query("UPDATE $table SET place='$place1',nom='$nom1',prenom='$prenom1', age='$age1'WHERE numero='1'")or die(mysql_error());
    mysql_query("UPDATE $table SET place='$place2',nom='$nom2',prenom='$prenom2', age='$age2'WHERE numero='2'")or die(mysql_error());
    mysql_query("UPDATE $table SET place='$place3',nom='$nom3',prenom='$prenom3', age='$age3'WHERE numero='3'")or die(mysql_error());
     
    mysql_close();
     
    //header("location:gest_equipebis.php");
    ?>

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    si je fais 3 changements (1 devient 2 puis 3 devient 1)
    Ca fait que 2 changements ça, et ça donne :

    1 --> 2
    2 --> 2
    3 --> 1

    Donc forcément, ça risque pas de faire ce que tu veux ^^

    Si c'était juste une faute à la rédaction de ton post, je te dirais de vérifier les valeurs que tu as dans ta DB à cette étape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Modification du numero des joueurs dans la base de donnée en fonction des choix de l'utilisateur.
    mysql_query("UPDATE $table SET numero='$numero1'WHERE id='1'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero2'WHERE id='2'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero3'WHERE id='3'")or die(mysql_error());
     
    // rajoute un die(); ici
    // die();

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Ca fait que 2 changements ça, et ça donne :

    1 --> 2
    2 --> 2
    3 --> 1

    Donc forcément, ça risque pas de faire ce que tu veux ^^

    Si c'était juste une faute à la rédaction de ton post, je te dirais de vérifier les valeurs que tu as dans ta DB à cette étape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //Modification du numero des joueurs dans la base de donnée en fonction des choix de l'utilisateur.
    mysql_query("UPDATE $table SET numero='$numero1'WHERE id='1'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero2'WHERE id='2'")or die(mysql_error());
    mysql_query("UPDATE $table SET numero='$numero3'WHERE id='3'")or die(mysql_error());
     
    // rajoute un die(); ici
    // die();
    Non, je me suis mal exprimé. Je fais 2 inversions qui provoquent 3 changements de place.
    1-->2-->2
    2-->1-->3
    3-->3-->1
    Pour ce qui est des valeurs dans la BDD, les numéros sont bons, mais les "attributs" des joueurs ne sont pas au bon endroit.

  4. #4
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    hmm j'ai vachement du mal à comprendre ton code...

    si on réfléchi un peu :
    - ID est surement la PRIMARY KEY en auto_increment et donc ne doit pas être modifiée
    - les informations personnelles du joueur sont pas censée être modifiée
    - informations de jeu (le numéro du maillot par exemple) peuvent être modifiées

    pourquoi alors, tu ne change pas seulement le champ "numero" pour un joueur donné ?

    je me trompe peut-être, mais à mon avis, tu te casses trop la tête

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 139
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    hmm j'ai vachement du mal à comprendre ton code...

    si on réfléchi un peu :
    - ID est surement la PRIMARY KEY en auto_increment et donc ne doit pas être modifiée
    - les informations personnelles du joueur sont pas censée être modifiée
    - informations de jeu (le numéro du maillot par exemple) peuvent être modifiées

    pourquoi alors, tu ne change pas seulement le champ "numero" pour un joueur donné ?

    je me trompe peut-être, mais à mon avis, tu te casses trop la tête
    En effet, l'id est ma primary key, le numéro est le numéro du maillot du joueur. La constitution de l'équipe se fait dans l'ordre 1-2-3-4 etc...
    C'est pourquoi quand tu veux inverser des joueurs, tu utilises le menu déroulant en javascript pour voir en temps réel ce que tu fais, et lorsque tu "valides", les joueurs doivent être à la bonne place(avec leurs bonnes informations(nom, prénom, ages, etc...). avec mon script, si tu fais une inversion, tout se passe très bien, mais si tu changes 2 fois un même joueur de place, ça ne marche plus.
    Ce que je souhaite faire c'est ça:

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    est-ce que ceci pourrait te convenir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    <?php
    // Connection au serveur + Sélection de la base de données.
    mysql_connect("localhost","root","");
    mysql_select_db("rfm");
     
    if (isset($_GET['pseudo']) && !empty($_GET['pseudo'])) { 
    	//Retour du nom de la table joueur(x) contenant l'équipe par rapport au pseudo du joueur connecté.
    	$retinfo = mysql_query("SELECT tablejoueurs FROM info WHERE pseudo='".$_GET['pseudo']."'")or die(mysql_error()); 
    	while ($rettable = mysql_fetch_array($retinfo))
    	{
    		$table = $rettable['tablejoueurs']; 
    	}
    } else {
    	$table = "tablejoueurs"; // table par defaut
    }
     
    // MISE A JOUR
    if (isset($_POST) && count($_POST['numero']) > 0) {
    	$error = false;
    	foreach($_POST['numero'] AS $id_joueur => $new_numero) {
    		if (empty($new_numero)) {
    			$error = true;
    		}
    		$requetes[] = $sql = "UPDATE $table SET numero = '".$new_numero."' WHERE id = '".$id_joueur."'";
    	}
    	// Ici, il faudrait en plus vérifier qu'on a bien que des 'new_numero' différents
    	if (!$error) {
    		foreach($requetes AS $request) {
    			mysql_query($request);
    		}
    	}
    }
     
    //Retour des infos propres à chaque joueur de l'équipe et mise en tableau des infos.
    $query_Recordset1 = "SELECT *, DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age FROM $table ORDER BY numero ASC";
    $Recordset1 = mysql_query($query_Recordset1) or die(mysql_error());
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);	
     
    mysql_close();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
     
    <style type="text/css">
    <!--
    #form1 table {
    	float: left;
    }
    -->
    </style>
    </head>
    <body>
    <!--mise en forme du tableau des menus déroulants.-->
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="myForm">
    <table>
      <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Age</th>
        <th>Numéro</th>
        <th>Place</th>
      </tr>
      <?php
      while ($r = mysql_fetch_assoc($Recordset1)) {
    	echo '<tr>
    			<td>'.$r['nom'].'</td>
    			<td>'.$r['prenom'].'</td>
    			<td>'.$r['age'].' ans</td>
    			<td>';
    	echo '<select name="numero['.$r['id'].']" onchange="updateNum(this.selectedIndex);">';
    	echo '<option value=""></option>';
    	for ($i = 1; $i <= 30; $i++) {
    		$num = sprintf("%02d", $i);
    		echo '<option value="'.$i.'"';
    		if ($i == $r['numero']) { echo ' selected="selected"'; }
    		echo '>'.$num.'</option>';
    	}
    	echo '</select>';
    	echo '</td>
    			<td>'.$r['place'].'</td>
    		  </tr>';
      }
      ?>
    	<tr>
    		<td colspan="5" style="text-align:center;"><input type="submit"  value="Valider" /></td>
    	</tr>
    </table>
    </form>
    <script type="text/javascript">
    function updateNum(selectedNum) {
    	var myForm = document.forms['myForm'];
    	var count = 0;
    	for (var i = 0; i < myForm.elements.length; i++) {
    		if (myForm.elements[i].type == "select-one" && myForm.elements[i].selectedIndex == selectedNum) {
    			count++;
    			if (count > 1) {
    				myForm.elements[i].selectedIndex = 0;
    			}
    		}
    	}
    }
    </script>
    </body>
    </html>

    DB :
    CREATE TABLE `tablejoueurs` (
    `id` int(11) NOT NULL auto_increment,
    `place` enum('AILIER','DEFENSEUR','AVANT-CENTRE','GARDIEN') NOT NULL,
    `nom` varchar(255) NOT NULL,
    `prenom` varchar(255) NOT NULL,
    `birthday` date NOT NULL,
    `numero` int(11) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

    --
    -- Contenu de la table `tablejoueurs`
    --

    INSERT INTO `tablejoueurs` (`id`, `place`, `nom`, `prenom`, `birthday`, `numero`) VALUES
    (1, 'AILIER', 'Toto', 'Ronaldo', '1979-07-05', 1),
    (2, 'DEFENSEUR', 'baggio', 'roberto', '1949-05-30', 10),
    (3, 'GARDIEN', 'Un nom connu', 'Un prénom connu ^^', '1984-02-22', 3);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] améliorer mon script
    Par ignem18 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 13/06/2014, 18h13
  2. amélioration de mon script
    Par Mika2008 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 15/06/2011, 09h52
  3. [langage]erreur dans mon script
    Par Fabouney dans le forum Langage
    Réponses: 11
    Dernier message: 30/06/2005, 14h58
  4. Tcsh - Mon script ne marche pas
    Par Aramis dans le forum Linux
    Réponses: 5
    Dernier message: 13/05/2004, 18h26
  5. Mon script cron n'est pas pris en compte
    Par tomnie dans le forum Linux
    Réponses: 11
    Dernier message: 31/03/2004, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo