Affichage enregistrements et update

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par hx.jonathan, 10 Août 2007.

  1. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Salut les gars,

    Voici mon problème. J'ai une page qui sert à afficher des enregistrements de ma bdd dans un formulaire html, et une autre page qui sert à faire un UPDATE de ces données.
    La première page commence avec une liste déroulante html qui me permet de savoir ce qu'il faut afficher. En fonction de ce choix, je préremplis mon formulaire html. En dessous de cette première page j'ai un bouton qui me permet d'enregistrer les modifications. Ce bouton renvoi vers ma deuxième pahe qui est en gros une reuqete SQL d'UPDATE.

    Lorsque je sélectionne une OPTION dans ma liste déroulante, l'affichage est impecable. Mais lorsque je clique sur le bouton "Enregistrer les modifications", il m'actualise la page et c'est LA qu'il y a un problème. il prend en compte les mofication dans le premier champ ANNEE mais pas dans le champ COUPLE MOIS (ex: Janvier/Fevrier).




    Ma page d'affichage des données grâce à la liste déroulante :

    Code:
    <?php
    include_once 'fonctions.php';
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
              <head>
              <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
    		  <link rel="stylesheet" type="text/css" href="styles_club.css" />
              </head>
              <body>
    <form method="post">
        <select name="mon_champ">
            <option>Janvier/Fevrier</option>
            <option>Fevrier/Mars</option>
            <option>Mars/Avril</option>
        </select>
        <input type="submit" value="OK"/>
    </form>
    	  
    <?php
    
    if (isset($_POST['mon_champ'])){
    
    $mon_champ=$_POST['mon_champ'];
    
    }
    else
    {
    $mon_champ="Janvier/Fevrier";
    }
    
    		 
    //connexion BDD 
    connexion_DB('bd_club');
    
    // REQUETE SQL 
    $res2 = mysql_query('SELECT * FROM activites WHERE couple_mois="'.$mon_champ.'"');
    
    print '<form method="POST" action=check3.php>';
    
    //boucle 
    
    $cpt=0;
    while($row2 = mysql_fetch_array($res2))
    {
    $cpt++;
    
    $annee=$row2['annee'];
    $couple_mois=$row2['couple_mois'];
    
    //affichage enregistrements
    print "<input type='hidden' name='cpt' size='1' value='$cpt'></input>";// pour pouvoir récupérer la valeur de cpt pour savoir le nbr d'itérations.
    print "<input type='text' name= 'annee".$cpt."' size='5' value='$annee'></input>";
    print "<input type='text' name= 'couple_mois".$cpt."' size='10' value='$couple_mois'></input>";
    
    
    
    echo "<br />";
     }
    echo "<br />";
    print '<div align="center"><input type="submit" name="envoie" VALUE="Enregistrer les modifications"></div>';
    print '</form>';
    echo $cpt;
    
    mysql_close();
    ?>
    		  
    		  </body>
    		  
    		  
    		  </html>

    Ma page de mise à jour :

    Code:
    <?php
    include_once 'fonctions.php';
    
    connexion_DB('bd_club');
    
    if (isset($_POST['annee'])&&($_POST['couple_mois'])&&($_POST['cpt'])){
    
    $annee=$_POST['annee'];
    $couple_mois=$_POST['couple_mois'];
    
    }
    
    
    
    $essai=$_POST['cpt'];
    echo $essai;
    
    for($i=1; $i<$essai+1;$i++){
    
    $VarDynAnnee='annee'.$i;
    $VarDynCouple='couple_mois'.$i;
    
    
    $sql = "UPDATE activites SET annee = '".$_POST[$VarDynAnnee]."',couple_mois = '".$_POST[$VarDynCouple]."'WHERE ID_ACTIV = '$i'"; 
     
    
     
    echo "<br/>".$sql;
    
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    
    }
    		
    ?>
    


    [/img]

    [Edit HawkEye: titre modifié --> en minuscules]
     
  2. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Dans ton formulaire, il n'y a aucun champ ayant comme nom "annee" et "couple_mois". Tu leur rajoutes tout le temps le $cpt après le nom:
     
  3. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Je mets $cpt car de cette manière je peux récupérer toutes les occurences de la boucle While.

    Est-ce que je me trompe ??

    Que me conseilles-tu ?
     
  4. FloBaoti
    FloBaoti WRInaute impliqué
    Inscrit:
    30 Avril 2006
    Messages:
    640
    J'aime reçus:
    0
    Ben tu fais comme tu veux, mais n'essaye pas de récupérer $_POST['annee'] dans ton script alors, puisque cette variable n'existera jamais.
     
  5. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
  6. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Salut,

    Ouais je crois que je vais faire comme tu me dis. Car là je commence à m'arracher les cheveux. Je suis pas du tou un expert en php donc j'ai besoin d'un bon coup de main.

    Tu proposes donc que je fasse ceci :

    Code:
    $cpt=0;
    while($row2 = mysql_fetch_array($res2))
    {
    $cpt++;
    $ID_ACTIV=$row2['ID_ACTIV'];
    $annee=$row2['annee'];
    
    
    //affichage enregistrements
    print "<input type='hidden' name='cpt' size='1' value='$cpt'></input>";// pour pouvoir récupérer la valeur de cpt pour savoir le nbr d'itérations.
    print "<input type='hidden' name='idact[$cpt]' size='1' value='$ID_ACTIV'></input>";
    print "<input type='text' name= 'annee[$cpt]' size='5' value='$annee'></input>";
    
    C'est bien ça ?
     
  7. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    Exactement, du coup, tu as deux tableaux de données qui sont beaucoup plus faciles à gérer qu'un ensemble de variables à formes similaires...

    edit:

    par contre, j'ai vu que tu avais mis l'incrémentation du compteur avant donc ça veut dire que la numérotation ne commencera pas à 0 mais à 1

    http://lv2.php.net/manual/fr/ref.array.php, ça peut toujours aider pour les tableaux...
     
  8. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Voilà je l'ai mis après.

    Code:
    $cpt=0;
    while($row = mysql_fetch_array($res2))
    {
    
    $ID_ACTIV=$row['ID_ACTIV'];
    $annee=$row['annee'];
    
    
    //affichage enregistrements
    print "<input type='hidden' name='cpt' size='1' value='$cpt'></input>";// pour pouvoir récupérer la valeur de cpt pour savoir le nbr d'itérations.
    print "<input type='text' name='idact[$cpt]' size='1' value='$ID_ACTIV'></input>";
    print "<input type='text' name= 'annee[$cpt]' size='5' value='$annee'></input>";
    $cpt++;
    
    echo "<br />";
     }
    echo "<br />";
    print '<div align="center"><input type="submit" name="envoie" VALUE="Enregistrer les modifications"></div>';
    print '</form>';
    echo $cpt;
    
    mysql_close();
    Ensuite comment puis-je exploiter ces infos tableau dans la page de mise à jour ?
     
  9. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    tu as d'une part un variable $_POST['annee'] ($_POST['annee'][0], ..., $_POST['annee'][n]).

    que tu peux explorer en faisant une boucle :

    $i=0;

    while (isset($_POST['annee'][$i])) ou la boucle for avec pour limite $_POST['cpt']
    {
    faire l'UPDATE, tu peux de même récupérer dans $_POST['idact'][$i], la valeur qui correspond...
    }
    Code:
    print "<input type='hidden' name='cpt' size='1' value='$cpt'></input>";// pour pouvoir récupérer la valeur de cpt pour savoir le nbr d'itérations.
    mets-le après ton while dans la première page....

    et à la réflexion la boucle for semble la mieux...
     
  10. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    J'essaye je te dis quoi dans 2minutes
     
  11. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Voilà ce que j'ai fais :

    page affichage :

    Code:
    connexion_DB('bd_club');
    
    
    if (isset($_POST['annee'])){
    
    $annee=$_POST['annee'];
    
    echo $annee;
    }
    
    
    $cpt=$_POST['cpt'];
    
    
    for($i=1; $i<$cpt;$i++){
    
    
    
    $sql = "UPDATE activites SET annee = '"$"','"$"'WHERE ID_ACTIV = '$i'"; 
    
    
     
    echo "<br/>".$sql;
    
    
    }
    Pour la page de mise à jour:

    Code:
    connexion_DB('bd_club');
    
    
    if (isset($_POST['annee'])){
    
    $annee=$_POST['annee'];
    
    echo $annee;
    }
    
    
    $cpt=$_POST['cpt'];
    
    
    for($i=1; $i<$cpt;$i++){
    
    
    
    $sql = "UPDATE activites SET annee = '"$"','"$"'WHERE ID_ACTIV = '$i'"; 
    
    
     
    echo "<br/>".$sql;
    
    
    }
    Qu'en penses-tu ?

    Pour la requête UPDATE je ne sais pas trop.
    Peux-tu vérifier les deux pages STP.

    Merci pour ton aide. J'ai enfin l'impression de progresser.

    John
     
  12. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Je dois partir, je sais pas si tu seras là tantôt vers 16h30 ?
     
  13. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    :D

    Ca dépend de quel fuseau horaire on parle...

    Cependant, je crois qu'il est bon que j'éclaircisse un point car, si je ne me trompe pas tu débutes en php...

    La première page de formulaire était bonne, juste en mettant le total du compteur hors de la boucle et les variables $_POST n'existent pas sur la première page puisque c'est la validation du formulaire html qui les crée. Toutes les valeurs que tu souhaites récupérer doivent être des "input" du formulaire.

    Ton shéma doit être celui ci :

    Formulaire sur la première page comme tu l'avais fait précédement...

    Tu envoies les infos au serveur avec le bouton submit de ton formulaire et tu lui demande un nouvelle page.

    Dans cette nouvelle page, tu peux utiliser les données qui ont été postées par l'utilisateur à la page précédente.

    Le script de ta deuxième page doit ressembler à ça :

    Code:
    connexion_DB('bd_club');
    
    
    for ($i=0;$i<$_POST['cpt'];$i++)
    {
    
    $sql = "UPDATE activites SET annee = '".$_POST['annee'][$i]."' WHERE ID_ACTIV = '$i'";
    }
    
    
    
    Seulement, je ne comprends pas vraiment le shéma de ta base donc mon aide au niveau SQL n'est sans doute pas terrible.

    Essaye de poster la shéma de ta base et de définir ta problématique avec une phrase simple.

    style : "J'ai des clubs de foot qui ont joué certaines années, je veux faire un formulaire qui mette à jour les années durant lesquelles ils ont joué"...

    Au début, tu parlais de couples de mois, tu as abandonné?
     
  14. hx.jonathan
    hx.jonathan WRInaute discret
    Inscrit:
    2 Mars 2005
    Messages:
    159
    J'aime reçus:
    0
    Ok je suis de retour.

    Merci pour tes infos.

    1) Je dois mettre le cpt++ dans la boucle quand même, non ? Je vois pas comment le compteur peut s'incrémenter alors ?

    2)Voici le script de ma deuxième page :

    Code:
    <?php
    include_once 'fonctions.php';
    
    connexion_DB('bd_club');
    
    
    if (isset($_POST['annee'])){
    
    $annee=$_POST['annee'];
    
    }
    
    for($i=1; $i<$cpt=$_POST['cpt'];$i++){
    
    
    
    $sql = "UPDATE activites SET annee = '".$_POST['annee'][$i]."' WHERE ID_ACTIV = '$i'"; 
    
    
     
    echo "<br/>".$sql;
    
    
    }
    
    //header("Location:http://127.0.0.1/absence/index.php?page=04");
    
    ?>
    
    Je constate qu'il n'enregistre pas mes modifications !! Pourtant voici le résultat de la requête :

    Code:
    UPDATE activites SET annee = '2008' WHERE ID_ACTIV = '1'
    UPDATE activites SET annee = '2004' WHERE ID_ACTIV = '2'
    UPDATE activites SET annee = '2008' WHERE ID_ACTIV = '3'
    UPDATE activites SET annee = '2008' WHERE ID_ACTIV = '4'
    UPDATE activites SET annee = '2008' WHERE ID_ACTIV = '5'
    UPDATE activites SET annee = '2008' WHERE ID_ACTIV = '6'
    UPDATE activites SET annee = '2007' WHERE ID_ACTIV = '7'

    3) Je dois faire un site pour un club d'activités. J'ai juste une table avec:

    Code:
    ID_ACTIV 	CLE PRIMAIRE 	 
    annee   	 
    mois 	
    couple_mois 	
    num_jour 	
    nom_jour 	
    resume 
    details 	 
    autre
    date_modif
    BUT: qu'ils puissent afficher les activités qui sont organisées tous les mois par le club et mettre à jour ces activités. REM: les activités se font du 15 au 15 et non du 1 au 31 de chaque mois.

    Pour ce qu'il y a à faire, je pensais faire une seule table.

    Voilà tu sais tout :D
     
  15. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    J'étais en week end...

    Pour l'observation 1) Il faut que tu mettes $ctp++; dans ta boucle

    2)tu es connecté à la base mais tu ne lui ordonnes pas de faire ce que tu lui veux! Il faut que tu fasses un query avec ta requête (tu trouveras l'explication sur php.net)

    3)Je pense que tu n'as jamais étudier les bases de données donc je vais te donner un conseil là dessus.

    le mieux c'est de faire une table mois et une table activité que tu vas lier par la suite. De cette façon, tu notes quand commence les periodes d'activité (on va même dire que si ça passe par la suite sur une periode de 15 jours, tu n'auras rien à changer) et tu peux considérer qu'une activité peut être répeter sur un autre mois ou qu'il y a plusieurs activités chaque mois.

    table tbl_mois (un nom avec un suffixe style tbl te permet de ne pas confondre les tables avec les champs):

    id_mois (clef primaire)
    date_debut (stocké en format int, temps unix)
    date_fin (pareil)

    tbl_activite:

    id_activite (clef primaire)
    resume
    details
    autre


    tbl_acti_mois :

    id_mois,id_activite
    date_modif

    exemple :

    l'activité vélo se passe au mois de mars/avril 2007 et au mois de mai/juin 2008

    tbl_activite
    1
    vélo
    on fait du vélo
    pensez à prendre votre selle

    tbl_mois
    1
    (temps unix du 15 mars 2007)
    (temps unix du 15 avril 2007)

    2
    (temps unix du 15 mai 2008)
    (temps unix du 15 juin 2008)

    tbl_acti_mois
    1,1
    (temps unix de la date de modif)

    1,2
    (temps unix de la date de modif)

    http://www.php.net

    doit te permettre de trouver plus ou moins tout ce que tu veux pour le php...

    je t'avouerai que je gère beaucoup moins bien le SQL!

    Bon courage
     
  16. rog
    rog WRInaute passionné
    Inscrit:
    21 Septembre 2006
    Messages:
    1 346
    J'aime reçus:
    0
    ceci est une declaration de variable et non une requête sur une base de donnée

    rog
     
Chargement...
Similar Threads - Affichage enregistrements update Forum Date
Affichage "notation - étoiles" dans le moteur de recherche. Référencement Google 15 Octobre 2022
Search Console Comment réparer l'affichage de Google dans la mauvaise balise de description Meta ? Problèmes de référencement spécifiques à vos sites 19 Août 2022
WordPress Problème affichage style avec Elementor (titre, bordures, separateur) Administration d'un site Web 8 Août 2022
Le simple affichage de ma page déclenche les événements onClick... Merci Google Analytics 17 Mai 2022
Affichage des données démographiques Google Analytics 10 Mai 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022
Problème de vitesse d'affichage des pages sur Analytics Google Analytics 26 Avril 2022
Problème affichage Meta Title, Desc ... Débuter en référencement 20 Janvier 2022
Google chrome : affichage incomplet Google : l'entreprise, les sites web, les services 18 Janvier 2022
redirection permanente et affichage URL Rewriting et .htaccess 3 Janvier 2022
Absence d'affichage de données dans tableau de bord Analytics Google Analytics 25 Juin 2021
Virtuemart : affichage des poids et dimensions e-commerce 8 Février 2021
données "portée" et "affichage" des vidéos sur Hootsuite Facebook 15 Décembre 2020
Référencement url sur Google - Affichage positions sur mobile différents d'un OS à un autre ? Référencement Google 7 Août 2020
En test : affichage des informations de licence dans Google Images YouTube, Google Images et Google Maps 28 Février 2020
Affichage chiffre d'affaires et taux de conversion zéro Google Analytics 26 Février 2020
WordPress Problème affichage accent sur Wordpress Développement d'un site Web ou d'une appli mobile 17 Février 2020
Position zéro et Featured Snippet : modification affichage Référencement Google 23 Janvier 2020
Astuce pour continuer l'affichage des étoiles dans les SERP de GOOGLE: balises de données structurée Référencement Google 6 Janvier 2020
Nouvel affichage Google : Sujets abordés par l'éditeur Référencement Google 4 Janvier 2020