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 :

Extraction champs puis mise à jour simultanée [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Extraction champs puis mise à jour simultanée
    Bonjour à tous,

    Je fais mes premiers pas dans ce domaine. J'ai beau cherché je ne trouve pas ma solution. Merci de votre aide. Mon pb :
    J'extrais d'une base les N° de série affectés à chaque ligne (issues d'un filtre exemple WHERE lign_bdc = 27). L'ensemble des N° de série s'affiche à l'écran.

    Je souhaite mettre à jour ces numéros de série. ça fonctionne pour le dernier mais pas pour les autres. Merci de m'aider. Voici un extrait de mon code.

    Fichier 1 : form_num_serie.php
    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
     
    <?php 
    $sql = " SELECT ".$tblpref."num_serie.num,lign_bdc,article_num,num_serie, article, substring(designation,1,45) as designation FROM ".$tblpref."num_serie 
    LEFT JOIN " . $tblpref ."article ON ".$tblpref."article.num = $num_art
    WHERE lign_bdc = '".$_POST['num_cont']."' AND article_num = '$num_art' ";//on extrait de la base les enregistrements correspondant au bdc et à l'article correspondant.
     
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    ?>
    <form name="form_num_serie" method="post" action="num_serie_update.php">
    <center><table class="boiteaction">
      <caption><?php echo "LISTE DES N° DE SERIE"; ?></caption>
    <tr>
    <th><?php echo "Article"; ?></th>
    <th><?php echo "Désignation"; ?></th>
    <th><?php echo "N° de Série"; ?></th>
    <th><?php echo "Validation"; ?></th>
    </tr>
    <?php
    $nombre =0;
    while($data = mysql_fetch_array($req))
        {
    	$num = $data['num'];
    	$lign_bdc = $data['lign_bdc'];
    	$article_nom = $data['article'];
    	$designation = $data['designation'];
    	$serie = $data['num_serie'];
    	$nombre = $nombre +1;
    	if($nombre & 1){
    	$line="0";
    	}else{
    	$line="1"; 
    	}
    ?>
    <tr class="texte<?php echo"$line" ?>" onmouseover="this.className='highlight'" onmouseout="this.className='texte<?php echo"$line" ?>'">
    <td class="highlight"><?php echo "$article_nom $lign_bdc $num"; ?></td>
    <td class="highlight"><?php echo $designation; ?></td>
    <td class="highlight"><input type="text" name="serie" style="width:225px" value="<?php echo $serie; ?>"></td>
    <div align="center"><input type="hidden" name="num_cont" value="<?php echo $num_cont; ?>">
    <div align="center"><input type="hidden" name="quanti" value="<?php echo $quanti; ?>">
    <div align="center"><input type="hidden" name="article" value="<?php echo $article; ?>">
    <div align="center"><input type="hidden" name="num" value="<?php echo $num; ?>">
    <td class="submit" colspan="3"><input type="submit" name="Submit" value="<?php echo $lang_envoyer; ?>">
    <?php
    }
    ?>
    <tr> 
    </td></tr></table>
    </form>
    Fichier 2 : num_serie_update.php
    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
     
    $serie=isset($_POST['serie'])?$_POST['serie']:"";
    $num=isset($_POST['num'])?$_POST['num']:"";
    $num_cont=isset($_POST['num_cont'])?$_POST['num_cont']:"";
    $quanti=isset($_POST['quanti'])?$_POST['quanti']:"";
    $article=isset($_POST['article'])?$_POST['article']:"";
     
     
    $sql = "SELECT * FROM " . $tblpref ."num_serie WHERE num_serie = '".$serie."'";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    $test = mysql_num_rows($req);
     
    $sql2 = "UPDATE ".$tblpref."num_serie SET num_serie='".$serie."' WHERE num = '".$num."'";
    mysql_query($sql2) OR die("<p>Erreur Mysql<br/>$sql2<br/>".mysql_error()."</p>");
     
     
    $message = "<center><h2>N° de Série mis à jour</h2></center>";
    echo $message;
    include("form_num_serie.php");
    ?>

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour

    Si je comprends bien tu souhaites avoir un affichage du genre :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     champ1 | champ 2 | champ3
    valch1 1| valch2 1|valch3 1 
    valch1 2| valch2 2|valch3 2
    valch1 3| valch2 3|valch3 3
    Et tu n'obtiens en fait que la dernière ligne, et donc seulement la dernière ligne est mise à jour en base.

    Ce problème vient de ta boucle de remplissage du tableau. Tu parcours les résultats de la requête de sélection et chaque tour de boucle tu remplaces la valeur affectée au tour suivant. Donc forcément, tu ne récupères que la dernière ligne

    Ce qu'il faut que tu fasses, c'est remplir les champs et le tableau à afficher dans la boucle et utiliser des tableaux comme champ POST.
    Bon courage !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Réponse
    Merci de l'aide que vous tentez de m'apportez. Néanmois, je ne vois pas comment résoudre mon problème et ce n'est pas faute d'y consacrer du temps. Il est vrai que je ne suis pas du tout spécialiste en la matière. Je suis davantage plus doué dans la mesure des phénomènes RF.(Transmodulation, Intermodulation, S/N Common Path distorsion et autres ...). Oui je sais c'est du charabia qui plus est n'a pas à se trouver sur ce site. C'est ma façon à moi de vous exprimer ma frustration lorsque j'entends ce nouveau vocabulaire auquel je mets du temps à m'adapter (Age oblige certainement). Bref,

    Ma table actuelle (mysql):

    tbl_num_serie

    num num_serie lign_bdc article_num
    1 A 27 340
    2 B 27 340
    3 Z 28 350

    Objet : Extraire de cette table les articles dont lign_bdc = 27.

    Afficher sur une page ces articles. (jusque là je sais faire)

    Je souhaiterais sur cette page pouvoir modifier le num_serie de chacun d'eux puis par un bouton valider mettre à jour dans la bdd leur valeur saisie à l'écran.

    Résultat :

    tbl_num_serie

    num num_serie lign_bdc article_num
    1 C 27 340
    2 C 27 340
    3 Z 28 350

    Je vous remercie toutes et tous pour l'aide que vous pourrez m'apporter.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par Antherak Voir le message
    Résultat :

    tbl_num_serie

    num num_serie lign_bdc article_num
    1 C 27 340
    2 C 27 340
    3 Z 28 350
    C'est ce que tu obtiens ou ce que tu souhaite obtenir ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Re,
    Oui, c'est ce que je souhaiterais obtenir.
    Actuellement mon code ne me le permet pas. J'affiche les lignes correspondant à mon tri.
    Je clique sur l'icone de la ligne à modifier.
    ça m'ouvre une autre page php dans laquelle je modifie le champ série.
    Je "submit" et ça m'"update" la base. Mais c'est lourd car je dois le faire autant de fois qu'il y a de ligne.
    Ce que je souhaite c'est affiché les lignes correspondant à mon tri.
    Saisir sur cette même page les N° de série à entrer ou à modifier (la valeur par défaut étant un echo $serie_num contenu dans la base). et ce pour chaque ligne.
    Puis valider. Cette action entrainerait un update de tous les N° de série saisi ou modifié. (Je ne sais pas si c'est clair).
    Merci de votre lecture

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon, donc ce que tu dois faire c'est utiliser des champs sous forme de tableaux, puis récupérer les informations dans des boucles. Tu peux par exemple indexer tes champs par la clé primaire (num pour toi)
    Donc quelque chose comme ça (j'ai épuré l'affichage, il faut que tu remettes ça dans ton tableau)
    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
    <tr>
    <th><?php echo "Article"; ?></th>
    <th><?php echo "Désignation"; ?></th>
    <th><?php echo "N° de Série"; ?></th>
    </tr>
    <?php
    $index = 0;
    while($data = mysql_fetch_array($req))
        {
    	$num = $data['num'];
    	$lign_bdc = $data['lign_bdc'];
    	$article_nom = $data['article'];
    	$designation = $data['designation'];
    	$serie = $data['num_serie'];
    	$index++;
    ?>
    <tr class="texte<?php echo"$line" ?>" onmouseover="this.className='highlight'" onmouseout="this.className='texte<?php echo"$line" ?>'">
    <td><?php echo "$article_nom $lign_bdc $num"; ?></td>
    <td><?php echo $designation; ?></td>
    <td><input type="text" name="serie[<?php echo $num; ?>]" style="width:225px" value="<?php echo $serie; ?>"></td>
    </tr>
    <?php
    }
    ?>
    <tr><td colspan="3"><input type="submit" name="Submit" value="<?php echo $lang_envoyer; ?>"></td></tr>
    Et à l'arrivée tu récupères tes données à mettre à jour dans une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $series = isset($_POST['serie'])?$_POST['serie']:array();
    foreach ($series as $num => $serie)
    {
      $sql2 = "UPDATE ".$tblpref."num_serie SET num_serie='".$serie."' WHERE num = '".$num."'";
      mysql_query($sql2) OR die("<p>Erreur Mysql<br/>$sql2<br/>".mysql_error()."</p>");
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Réponse
    Merci CELIRA infiniment pour l'aide à la fois pédagogique et précieuse que tu m'as apporté.
    Ce que tu as proposé et très clair et fonctionnel. De plus j'ai appris cette fameuse indexation dont tu as parlé.

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

Discussions similaires

  1. [MySQL] Mise à jour simultanée dans deux tables
    Par IGalaxy dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/04/2009, 20h26
  2. Mise à jour simultanée de n lignes ?
    Par ghohm dans le forum Requêtes
    Réponses: 4
    Dernier message: 18/12/2008, 20h25
  3. Réponses: 5
    Dernier message: 02/06/2008, 09h18
  4. Sélection puis mise à jour
    Par acouel92 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 14/03/2007, 07h54
  5. Réponses: 2
    Dernier message: 09/03/2007, 09h58

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