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 :

Probleme de boucle


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut Probleme de boucle
    je cherche à updater des nom de technicien selon le numero de carte via un tableau, mais je me retrouve avec la liste complete des mes carte mise à jour,



    comment peut on faire pour la mise à jour ne soit effective uniquement pour une carte unique.

    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
    113
    114
    <?php
    // On commence par récupérer les champs
    if(isset($_POST['num']))      $num=$_POST['num'];
    else      $num="num";
     
    if(isset($_POST['nom_tech']))      $nom_tech=$_POST['nom_tech'];
    else      $nom_tech="";
     
     
    // On vérifie si les champs sont vides
    if(empty($nom_tech))
        {
        echo '<font color="red">Attention, aucun champs ne peut rester vide !</font>';
        }
     
    // Aucun champ n'est vide, on peut enregistrer dans la table
    else     
        {
           // connexion à la base
    $db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
    // sélection de la base  
     
        mysql_select_db('cartes',$db)  or die('Erreur de selection '.mysql_error());
     
    	// on regarde si la carte existe déjà
        $sql = "SELECT id FROM maj ";
        $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
     
        // on compte le nombre de résultats
        $res = mysql_num_rows($req);
     
     
     
        // on écrit la requête sql
        $sql = "UPDATE maj SET nom_tech='$nom_tech' where num=$num";
     
     
     
        // on insère les informations du formulaire dans la table
        mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
     
     
        // on affiche le résultat pour le visiteur
        echo 'Vos infos on été ajoutées.';
     
        mysql_close();  // on ferme la connexion
        } 
     
    ?> 
    <?php
    // information pour la connection à le DB carte
    $host = 'localhost';
    $user = 'root';
    $pass = '';
    $db = 'cartes';
     
    // connection à la DB badge_list
    $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
    mysql_select_db($db) or die ('Erreur :'.mysql_error());
     
     
    // requête SQL qui compte le nombre total d'enregistrements dans la table et qui
    //récupère tous les enregistrements
    $select = 'SELECT num, nom_tech FROM maj';
     
    $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
     
     
     
     
    // si on a récupéré un résultat on l'affiche.
     
     
        // début du tableau
    	echo '<br />'."\n";
    	echo '<br />'."\n";
    	echo "table maj";
        echo '<table bgcolor="#FFFFFF">'."\n";
            // première ligne on affiche les titres 
            echo '<tr>';
    		echo '<td bgcolor="#669999"><b><u></u></b></td>';
            echo '<td bgcolor="#669999"><b><u>Numéro carte</u></b></td>';
            echo '<td bgcolor="#669999"><b><u>technicien</u></b></td>';
    		echo '<td bgcolor="#669999"><b><u></u></b></td>';
            echo '</tr>'."\n";
        // lecture et affichage des résultats sur 4 colonnes, 1 résultat par ligne.    
        while($row = mysql_fetch_array($result)) {
    	    echo '<tr>';
    		echo '<td bgcolor="#CCCCCC"></td>';
            echo '<td bgcolor="#CCCCCC">'.$row['num'].'</td>';
            echo '<td bgcolor="#CCCCCC">'.$row['nom_tech'].'</td>';
    		echo '<td bgcolor="#CCCCCC"><form method="POST" action="tech.php"><input type="text" name="nom_tech" size="20" value="technicien" maxlength="35"><input type="submit" value="Update" name="envoyer"></form></td>';
    		echo '<td bgcolor="#CCCCCC"></td>';
    		}
       		echo '</tr>'."\n";
     
        echo '</table>'."\n";
     
        // fin du tableau.
     
     
     
    // on libère le résultat
    mysql_free_result($result);
    mysql_close();  // on ferme la connexion
     
    ?>
    <?php echo "<br />" ?>
    <?php echo "<br />" ?>
    <hr />
     
     
    </html>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faut que ton formulaire renvoit, dans un champ hidden par exemple, l'id de la ligne a mettre à jour.
    Tu as bien prévu un $num dans ta requête mais il ne correspond a rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations forums :
    Inscription : Mars 2008
    Messages : 134
    Par défaut
    Il faut en effet ajoute pour chaque Bouton de ton tableau un champs caché contenant le Numéro de carte du technicien.

    Ensuite tu fais l'update via ce Numéro.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 72
    Par défaut
    Sinon tu pourrais aussi utiliser un script Ajax qui permettrait ceci :

    Nous affichons classiquement le formulaire mais avec un seul bouton update, ou un bouton commun.

    Lors de la modification d'un des champs input, nous stockons dans un tableau l'identifiant de l'input modifié.

    Ainsi une fois que tout tes inputs ont été modifiés, tu envoi en paramètre le tableau stocké en même temps que les champs input.

    Ensuite le travail est fait sur le tableau généré par ajax : toutes les valeurs dedans sont a récupérer et a mettre a jour.

    Ainsi cela t'éviterait un cas particulier :

    l'utilisateur modifie 2 inputs, mais lors du clic sur update cela n'en met qu'un a jour sur 2.

    Bonne continuation

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    sinon autre variante mettre dans le name de chaque boutton l'id de la carte et tu boucle en reception sur tout les cartes et tu test sur quel boutton

    if(isset($_POST['bt_mon ']))

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 211
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    // On commence par récupérer les champs
    if(isset($_POST['num']))      $num=$_POST['num'];
    else      $num="num";
    Si num est ton numéro de carte, comment peux-tu lui l'accepter et lui donner la valeur "num" si il n'est pas renseigné??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	// on regarde si la carte existe déjà
        $sql = "SELECT id FROM maj ";
        $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 
     
        // on compte le nombre de résultats
        $res = mysql_num_rows($req);
    Heu... Non, ici tu ne regardes rien, tu sélectionnes juste tous les id de ta table, et compte le nombre de résultats - et tu ne te ressers d'ailleurs pas de $res.

    Comme dit précédemment, il te faut rajouter a chacun de tes formulaires un champ caché:
    <input type="hidden" name="num" value="<?php echo $row['num']; ?>" />

Discussions similaires

  1. Probleme de boucle a s arracher les cheuveux
    Par calimero642 dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2006, 14h44
  2. Probleme de boucle avec des processus sous UNIX
    Par sebastieng dans le forum POSIX
    Réponses: 6
    Dernier message: 15/10/2005, 18h57
  3. [Language]Problème de boucle
    Par marc_dd dans le forum Langage
    Réponses: 11
    Dernier message: 06/10/2005, 14h24
  4. Problem de boucle.....
    Par skad dans le forum C++
    Réponses: 6
    Dernier message: 29/09/2005, 16h28
  5. [C#] Probleme de boucle for et random
    Par Freeman166 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 09/01/2005, 14h34

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