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 :

requête update en boucle [MySQL]


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
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut requête update en boucle
    Bonjour,

    Après avoir plusieurs fois testé des trucs, je tourne en rond... (même si c'est le principe d'une boucle )

    Blague a part...

    J'ai une table "grille"
    - id (autoincrement - cle primaire)
    - creneau
    - emission

    Le champs crenaux contient :
    - Lun7h00
    - Mar7h00
    - Mer 7h00
    ...
    - Lun8h00
    ...
    et ainsi de suite. Le but etant d'attribuer une "emission" a chacun de ces champ.
    La table emission est complete. J'ai fait mon formulaire de maniere à ce chaque colonne et ligne :


    chaque cellule du tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <tr>
              <td align="center" class="NEWSAUTEUR">7h15</td>
              <td width="13%"><? $name='lun0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='mar0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='mer0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='jeu0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='ven0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='sam0715'; include("boite_grille.php"); ?></td>
              <td width="13%"><? $name='dim0715'; include("boite_grille.php"); ?></td>
            </tr>
    donc renvoi sur un include, le voici (et j'explique ce que j'ai fait après) :

    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
      <?php
    include("identifiants.php");
    mysql_connect($adresse, $nom, $motdepasse);
    mysql_select_db($database) or die ("erreur de connexion base");
     
    $emission = mysql_query("SELECT * FROM emission WHERE id>=0 ORDER BY id DESC");
    $name2 = $name.'2';
    $ename= 'e'.$name;
    $emis= mysql_query("SELECT * FROM grille WHERE creneau='$name'");
    $resulemis= mysql_fetch_assoc($emis);
    $id=$resuemis['id'];
     
    ?>
     
     
    <select name="<? echo '$ename' ?>">
    <option value="<?php echo $resulemis['emission']; ?>"><?php echo $resulemis['emission']; ?></option>
    <?
    while( $name2 = mysql_fetch_array($emission) ) 
    { 
    ?>			
    <option value="<?php echo $name2['nom']; ?>"><?php echo $name2['nom']; ?></option>
    <? 
    } 
    ?>
    </select>
    - Pour que chaque élément de formulaire ai un nom différent, il est nommé dans le premier code (exemple : $name='lun0715')
    - ce nom est repris pour afficher par défaut l'émission déjà enregistrée dans la base de données sur chaque élément de formulaire. ça, ça marche. c'est à dire que si dans ma base de données, je tape le nom d'une émission dans tel ou tel array (lun07h00, lun08h00, mar 07h00 etc...) ça affiche bien celui la par défaut.

    Mon soucis, c'est que la requête pour ECRIRE les changement dans la BdD ne fonctionne pas et je n'arrive pas à trouver.

    ce qui se rapproche le plus pour l'instant :
    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
     
    if (isset($_POST['update']))
    {
    	$id = $_POST['$id'];
    	$crenaux = $_POST['$name'];
    	$emission = $_POST['$ename'];
    	$insertcrenaux  = mysql_query("SELECT * FROM grille WHERE id>=0");
     
       while( $donnees = mysql_fetch_array($insertcrenaux ) )
      {	
    	$cren = $donnees['crenaux'];
    	$emis = $donnees['emission'];
    	$requete1 = mysql_query("UPDATE grille SET emission='$emis' WHERE crenaux ='$cren'") or die ("Erreur sql1");
    	echo 'Grille ('.$cren.') mise à jour<br />';
     
    	}
    }
    La boucle ressort bien tous les champ 'creneau' un par un, mais ça n'ecrit rien du coté 'emission'.

    J'espère avoir été le plus clair possible...
    Donc, si quelqu'un a une idée, je suis preneur
    Pour toutes question, n'hesitez pas.

    Par avance, un gros merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    1 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 125
    Par défaut
    As tu tester la requête dans MySQL en dur?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut
    Salut, et merci

    La requête par elle même fonctionne dans mysql (ou via php) a condition que je la sorte de la boucle while. C'est elle qui cause probleme. Pas pour la lecture, mais pour l'écriture.

    Si j'écris les champs via mysql, ils ressortent bien à la lecture de la boucle (chaque émission et bien défini dans le bon créneau). Mais lorsque je veux changer d'émission via mon formulaire, c'est la que ça capote ^^

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    apparemment tu t'y prends mal pour la lecture, t'effectues 10 fois la connexion à la base, 10 fois la même requête, etc. Il faudrait que tu sortes/factorises les lignes de codes redondantes de ton boite_grille.php. Sinon pour l'insert si tu veux pouvoir tout insérer d'un coup tu peux passer des tableaux en post ça clarifie les choses, et ta première requête me semble inutile, ex pour le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <select name="cren[lun0715]">
    <select name="cren[mar0715]">
    Pour l'insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['cren'])){
    foreach($_POST['cren'] as $cren => $emis) {
    $requete1 = mysql_query("UPDATE grille SET emission='$emis' WHERE crenaux ='$cren'") or die ("Erreur sql1");
    }
    }

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 9
    Par défaut
    merci Djakisback,

    Mais je n'arrive pas à l'implanter... depuis hier soir que j'essaye, ça n'écrit rien dans la base.

    Je crois que je vais arrêter de me prendre la tête, et faire une liste déroulante par créneau au lieu de passer par un include... ça va etre lourd, mais bon.

    Il y aurait la possibilité sinon de faire une requete sql via un onchange ?

    c'est à dire que à chaque fois que l'émission est changé via mon formulaire select dans un créneau, la page est rechargée, et la requête de mise à jour faite ?

    Merci

  6. #6
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Citation Envoyé par trimate Voir le message
    merci Djakisback,
    Il y aurait la possibilité sinon de faire une requete sql via un onchange ?
    Oui tu peux faire ça en AJAX, ce sera à peine plus compliqué ^^

    Tu peux déjà modifier ça pour voir ce qui plante dans tes requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete1 = mysql_query("UPDATE grille SET emission='$emis' WHERE crenaux ='$cren'") or die ($requete1.'<hr>'.mysql_error());
    Ensuite tu peux faire des echo de toutes tes requêtes pour les vérifier à la main et voir où plante l'update ou l'insert.
    Pour tes select je conseille quand même de revoir le système. Tu peux récupérer une fois pour toutes tous les créneaux dans la base, ensuite tu parcours les résultats. Le mieux serait de faire une fonction, voir un include mais qui ne contienne que ce qui est nécessaire.

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

Discussions similaires

  1. [PDO] Requête update dans une boucle de tableau
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/05/2015, 08h55
  2. [MySQL] Requêtes UPDATE dans boucles foreach avec array
    Par vinceom92 dans le forum PHP & Base de données
    Réponses: 67
    Dernier message: 16/03/2014, 21h29
  3. Requête update dans une boucle for
    Par boubounagh dans le forum JDBC
    Réponses: 3
    Dernier message: 13/01/2012, 14h18
  4. sqlite3, requête update et sortie de boucle
    Par goran kajfes dans le forum Général Python
    Réponses: 4
    Dernier message: 26/07/2009, 18h30
  5. [MySQL] Exécuter une requête UPDATE dans une boucle
    Par vacknov dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/10/2008, 17h46

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