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

Langage PHP Discussion :

Formulaire dans une boucle while() [PHP 7]


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 19
    Points : 0
    Points
    0
    Par défaut Formulaire dans une boucle while()
    Je cherche à solutionner le problème suivant:

    1. je souhaite sélectionner par mysqli certains enregistrements de ma BDD, puis pour chacun de ces enregistrements afficher un champ image et demander si on valide ou non cette image, traiter la réponse (ex: mettre à 1 le champ de validation de cette image), puis traiter l'enregistrement sélectionné suivant. Etc... jusqu'au dernier enregistrement sélectionné,

    2. le script que j'ai écrit (voir ci-dessous) fonctionne mal: la sélection des enregistrements est bonne, le 1er enregistrement est bien affiché avec son image ainsi que son formulaire (sa question, et sa demande de validation). Mais il ne s'arrête pas pour laisser l'utilisateur traiter ou non cet enregistrement. Toute la séquence des enregistrements à traiter défile ainsi (affichage image, affichage formulaire) jusqu'à la fin de mon script: et l'utilisateur n'a pas pu répondre aux questions !

    J'ai tenté d'insérer une boucle supplémentaire de type while(true) pour y insérer le traitement du test de validation du formulaire, mais cela me crée une erreur système.
    Voici la partie problématique de mon script:

    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
     
    <?php
    echo "<span style='color: blue;'>Validation des Cartes d'Identité publiées ...</span>";
    echo '<p></p>';
    $rab = "LOCK TABLES syw7g_comprofiler WRITE";
    $ras = $conn->query($rab) or die('Erreur SQL !<br>'.$rab.'<br>'.mysqli_error());
     
    $rab = "SELECT id, cb_ci, cb_ci_verif FROM syw7g_comprofiler WHERE ((cb_ci IS NOT NULL) AND (cb_ci_verif = 0))";
    $maj = $conn->query($rab) or die('Erreur SQL !<br>'.$rab.'<br>'.mysqli_error());
     
    $nb = $maj->num_rows;
    if ($nb > 0) {
      echo "On trouve $nb profils à mettre à jour <br />";
      while($arr = mysqli_fetch_array($maj)) {
        echo '<img src="images/comprofiler/'.$arr[1].'" title="carte identité" alt="carte identité">';
        ?>
        <form method="post">
        <label class="centrer">Validation de cette Carte d'identité ?<span style="color: #FFFFFF;">-------</span>Oui <input type="radio" name="civerif" id="civerif_oui" size="1" value="O"><span style="color: #FFFFFF;">----</span>Non <input type="radio" name="civerif" id="civerif_non" size="1" value="N" checked></label>
        <label class="centrer"><input type="submit" class="button" name="validation" value="valider" /><br/></label>
        </form>
        <?php
        if (isset($POST['validation'])) {
          $ci = trim(htmlspecialchars((string) $POST['civerif']));
          if ($ci=="O") {
            $rab = "UPDATE syw7g_comprofiler SET cb_ci_verif=1 WHERE id=".$arr[0];
            $modif = $conn->query($rab) or die('Erreur SQL !<br>'.$rab.'<br>'.mysqli_error());
            mysqli_free_result($modif);
          }
        }
      }
    }
    mysqli_free_result($maj);
    $rab = "UNLOCK TABLES";
    $ras = $conn->query($rab) or die('Erreur SQL !<br>'.$rab.'<br>'.mysqli_error());
    mysqli_free_result($ras);
    mysqli_close($conn);
     
    echo '<p></p>';
    echo '<h2>TRAITEMENT TERMINÉ</h2>';
    ?>
    Grand merci aux spécialistes php qui peuvent m'aider à sortir de ce guêpier !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- réponse à lire ici.

    2- A mon avis, tu aurais plutôt intérêt :
    • à n'avoir qu'un seul formulaire,
    • des cases à cocher sur chaque ligne,
    • et un seul bouton "submit" à la fin.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 19
    Points : 0
    Points
    0
    Par défaut
    Merci de m'aider.
    Mes réponses sur tes 2 points:

    1. J'ai modifié l'id utilisé dans le formulaire en y ajoutant l'id de l'enregistrement étudié dans la boucle: mais le résultat est très exactement le même, mon formulaire est inutilisable,
    2. Là je ne comprends pas tes conseils, car:
    • je n'ai qu'un seul formulaire,
    • j'ai 2 boutons radio au lieu d'une case à cocher (mais je doute que ça marche mieux en changeant uniquement ce point),
    • je n'ai qu'un seul bouton "submit" en bas du formulaire.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par clend Voir le message
    je n'ai qu'un seul formulaire
    Faux.

    Le formulaire (<form>) est DANS la boucle while.
    Il y a donc autant de formulaires que de tours de boucle.

    Regarde le code HTML généré ("Ctrl"+"U")

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 19
    Points : 0
    Points
    0
    Par défaut
    Je t’avoue que je n’y comprends plus rien.
    Dans ta première réponse à mon sujet, tu me fais remarquer qu’il ne faut jamais dans une boucle reprendre un même id, avec un exemple à l’appui.
    J’ai donc modifié mon script en tenant compte de ceci.
    Maintenant tu me dis qu’il ne faut pas mettre un formulaire dans une boucle..
    Alors je ne comprends plus l’intérêt de la remarque précédente.
    Et surtout je ne vois pas comment structurer mon script pour solutionner mon problème. Car il ne faut pas oublier que devant l’affichage de chaque enregistrement sélectionné l’utilisateur doit pouvoir préciser si l’image affichée doit être validée ou non.

    Quelle structure de script prendrais tu stp ? Merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je n'ai JAMAIS dit qu'il ne faut pas mettre un formulaire dans une boucle !
    D'où tu sors ça ??


    Par contre, j'ai dit qu'on pouvait utiliser ici un seul formulaire :
    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
    <?php // Traitement du formulaire
    if (isset($_POST['validation'])) 
    {
    	// on récupère TOUTES les lignes
    	$civerif = (isset($_POST['civerif']))? $_POST['civerif'] : ''; // array
    	if (is_array($civerif))
    	{
    		foreach( $civerif as $id => $val ) // $id est l id auto-incrémenté de la ligne à modifier
    		{
    			if( $val == 'O' ) // validé ?
    			{
    				$rab = "UPDATE syw7g_comprofiler SET cb_ci_verif=1 WHERE id=".mysqli_real_escape_string($id)."";
    				$modif = $conn->query($rab) or die('Erreur SQL !<br/>'.$rab.'<br/>'.mysqli_error());
    			}
    		}
    	}
    }
    ?>
    <span style="color: blue;">Validation des Cartes d'Identité publiées ...</span>
    <p></p>
    <?php
    $rab = "LOCK TABLES syw7g_comprofiler WRITE";
    $ras = $conn->query($rab) or die('Erreur SQL !<br/>'.$rab.'<br/>'.mysqli_error());
     
    $rab = "SELECT id, cb_ci FROM syw7g_comprofiler WHERE (cb_ci IS NOT NULL AND cb_ci_verif = 0)";
    $maj = $conn->query($rab) or die('Erreur SQL !<br/>'.$rab.'<br/>'.mysqli_error());
    $nb = $maj->num_rows;
    if ($nb > 0) 
    {
    ?>
    	<p>On trouve <?php echo $nb; ?> profils à mettre à jour : </p>
        <form method="post" action="">
    <?php
    	while($arr = mysqli_fetch_array($maj)) 
    	{
    ?>
    		<img src="images/comprofiler/<?php echo $arr[1]; ?>" alt="carte identité">
    		<p class="centrer">Valider cette Carte d'identité ? 
    		<label>Oui <input type="radio" name="civerif[<?php echo $arr[0]; ?>]" size="1" value="O" /></label>
    		<label>Non <input type="radio" name="civerif[<?php echo $arr[0]; ?>]" size="1" value="N" checked="checked" /></label>
    		</p>
    <?php
    	}
    ?>
        <p class="centrer"><input type="submit" class="button" name="validation" value="valider" /></p>
        </form>
    <?php
    }
    mysqli_free_result($maj);
    $rab = "UNLOCK TABLES";
    $ras = $conn->query($rab) or die('Erreur SQL !<br/>'.$rab.'<br/>'.mysqli_error());
    mysqli_free_result($ras);
    mysqli_close($conn);
    ?> 
    <p></p>
    <h2>TRAITEMENT TERMINÉ</h2>
    Dernière modification par Invité ; 12/02/2019 à 15h54.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2018
    Messages : 19
    Points : 0
    Points
    0
    Par défaut
    J'avais crû comprendre en lisant le document de ton lien qu'il ne fallait pas mettre un formulaire dans une boucle. Mais ne polémiquons pas sur cet enfantillage.
    L'essentiel est que tu m'as:
    1. magnifiquement organisé mon ébauche de script,
    2. que j'en profite pour prendre une leçon de bonne rédaction d'un tel script,
    3. ... et que tout fonctionne désormais à merveille.


    Je te remercie très sincèrement pour cette aide précieuse.

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

Discussions similaires

  1. Problème avec Erreur 276 dans une boucle if
    Par Eldroth dans le forum Scilab
    Réponses: 0
    Dernier message: 31/05/2012, 17h57
  2. Problème de requête SQL dans une boucle While
    Par Astraya dans le forum VB.NET
    Réponses: 3
    Dernier message: 21/01/2009, 18h18
  3. Problème avec plusieurs formulaires dans une page
    Par robindelhuxley dans le forum Ruby on Rails
    Réponses: 5
    Dernier message: 06/11/2008, 11h30
  4. Formulaire dans une boucle while
    Par starr dans le forum Langage
    Réponses: 3
    Dernier message: 09/01/2007, 09h27
  5. probléme avec un formulaire dans une pop_up
    Par sissi25 dans le forum ASP
    Réponses: 50
    Dernier message: 28/07/2006, 15h41

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