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 :

Echange de valeurs dont le nombre n'est pas défini [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Echange de valeurs dont le nombre n'est pas défini
    Bonjour, j'ai un petit probleme pour envoyer et recevoir un nombre non defini de valeurs pour des varibles connues, voici mpn code :

    //on affiche sous forme de tableau les lignes que l'on veut modifier
    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
     
    $n=0;
    foreach ($_SESSION['choixModif'] as $key => $value) 
    {
    	$result = mysql_query("SELECT * FROM baie_port WHERE ID = \"$value\""); 
    	$champs=mysql_fetch_array($result);
    	echo '<tr align="center">
    	<form method="post" action="fin_modif.php">
    	<td><input type="text" readonly size ="3" maxlength=3 name="ID'.$n.'" value="'.$champs[0].'"</td>
    	<td><input type="text" size ="6" maxlength=6 name="col1'.$n.'" value="'.$champs[1].'"</td>
    	<td><input type="text" size ="6" maxlength=6 name="col2'.$n.'" value="'.$champs[2].'"</td>
    	<td><input type="text" size ="6" maxlength=6 name="col3.$n.'" value="'.$champs[3].'"</td>
    	<td><input type="text" size ="6" maxlength=6 name="col4'.$n.'" value="'.$champs[4].'"</td>
    	<tr>';
    	$n++;
    }
    echo '<input type="hidden" name="nb_ligne" value="'.$n.'"';
    echo '<tr align="center">
    <center><input type="submit" name="changemets" value="Modifier"></center></form>
    </tr>';
    echo "<table>";
     
    unset ($_SESSION['choixModif']);
    // on modifie toute les lignes précédement affichées
    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
     
    import_request_variables("p","recu_");
     
    for($i=0;$i<$recu_nb_ligne;$i++)
    {
    	@ $etat=mysql_query("UPDATE `baie_port` SET `baie_départ` = \"$recu_col1".$i."\",
    	`port_départ` = \"$recu_col2".$i."\",`baie_arrivée` = \"$recu_col3".$i."\",
    	`port_arrivée` = \"$recu_col4".$i."\" 
            WHERE `ID`= \"$recu_ID".$i."\" ");
    	if (!$etat)
    	{
    		$messageErreur = mysql_errno().' : '.mysql_error();
    		echo "<center><h2>Erreur mise &agrave; jour : ".$messageErreur."<h2></center>";
    	}
    	else
    		echo "<center><h2>Mise &agrave; jour r&eacute;ussie !<h2></center>";
    }
    mysql_close();
    Ce qui modifie après execution les lignes allant de 0 à $i !
    Je ne vois pas ce qui cloche ! :

  2. #2
    Membre confirmé Avatar de papyphp
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    438
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 438
    Points : 587
    Points
    587
    Par défaut
    Salut,

    Je peux me tromper mais je pense que tes updates se font bien sauf le dernier qui te donne un message d'erreur ???
    Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    euh non tous les updates se font bi1, mais dans les champs de ma bases se trouvent les valeurs 0, 0, 0, ..., 0 à la 1ére ligne, 1, 1, 1, 1, ..., 1 à la 2nd et ainsi de suite !!

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Tu te trompes dans la concaténation dans ta requête.
    Dans ton UPDATE, PHP va envoyer à MySQL par exemple la valeur de $recu_col1 concaténée à la valeur de $i...

    Voici mes propositions.

    1- Tu dis ne pas savoir combien de champs tu auras alors autant faire une boucle. Note l'utilisation des noms de champs sous forme de tableaux (à la manière PHP) dans le HTML, ça fonctionne très bien :
    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
    foreach ($_SESSION['choixModif'] as $key => $value)
    {
       $result = mysql_query("SELECT * FROM baie_port WHERE ID = '$value'");
       $champs=mysql_fetch_array($result);
       echo '<tr align="center">
       <form method="post" action="fin_modif.php">
       <td><input type="text" readonly size ="3" maxlength=3 name="ID[0]" value="'.$champs[0].'"</td>';
       for($i=0; $i<4; ++$i){
          echo '<td><input type="text" size ="6" maxlength=6 name="col['.$i.']" value="'.$champs[$i].'"</td>';
       }
       echo '<tr>';
       $n++;
    }
    echo '<input type="hidden" name="nb_ligne" value="'.count($champs).'"';
    echo '<tr align="center">
    <center><input type="submit" name="changemets" value="Modifier"></center></form>
    </tr>';
    echo "<table>";
     
    unset ($_SESSION['choixModif']);
    Puis :
    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
    import_request_variables("p","recu_");
     
    for($i=0;$i<$recu_nb_ligne;$i++)
    {
       $sql = "UPDATE `baie_port`
               SET `baie_départ` = '".$recu_col[0]."',
                  `port_départ` = '".$recu_col[1]."',
                  `baie_arrivée` = '".$recu_col[2]."',
                  `port_arrivée` = '".$recu_col[3]."'
               WHERE `ID`= '".$recu_ID[0]."' ";
       @ $etat=mysql_query($sql);
       if (!$etat)
       {
          $messageErreur = mysql_errno().' : '.mysql_error();
          echo "<center><h2>Erreur mise &agrave; jour : ".$messageErreur."<h2></center>";
       }
       else
          echo "<center><h2>Mise &agrave; jour r&eacute;ussie !<h2></center>";
    }
    mysql_close();
    Perso, je ferais soit un UPDATE pour chaque champ soit une concaténation du SQL pour chaque champ. Ainsi, ce serait vraiment indépendant du nombre de champs.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Merci pour petit exemple ce n'est pas exactement ce que je voulais faire mais je m'en suis inspiré

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/09/2017, 11h39
  2. Réponses: 13
    Dernier message: 24/02/2011, 17h10
  3. Réponses: 16
    Dernier message: 27/02/2008, 09h12
  4. Réponses: 2
    Dernier message: 11/11/2007, 16h49
  5. Réponses: 2
    Dernier message: 01/11/2006, 22h36

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