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 tableau php [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Requête tableau php
    Bonjour,

    J'ai un tableau en php dans lequel je peux modifier les valeurs ce qui modifie ma table mysql.
    Voilà mon problème, lorsque je clique sur 'Modifier', ma requête fonctionne hormis le fait que les cases que je laisse vide ce mettent à zéro, alors que je voudrais qu'il reste à Null.

    Quelqu'un aurais une idée ?

    Code :

    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
    $select = "SELECT NumOf, Habillage_Finition, Marches_Finition, ContreMarches_Finition, Socle_Finition, NomControleur_Finition FROM ordredefabrication";
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
    if($total) 
    {
    	//		debut du tableau
    	echo '<table bgcolor="#FFFFFF">'."\n";
     	echo '<tr>';
    	echo 'Finition';
    	echo '<br>';
    	echo '<td bgcolor="#005AA9"><b><u>N°</u></b></td>';
    	echo '<td bgcolor="#005AA9"><b><u>Habillage</u></b></td>';
        	echo '<td bgcolor="#005AA9"><b><u>Marches</u></b></td>';
        	echo '<td bgcolor="#005AA9"><b><u>ContreMarches</u></b></td>';
    	echo '<td bgcolor="#005AA9"><b><u>Socle</u></b></td>';
        	echo '<td bgcolor="#005AA9"><b><u>NomControleur</u></b></td>';
    	echo '</tr>'."\n";
    	$i = 0;
    	while($row = mysql_fetch_array($result)) 
    	{	
    		$color = ++$i % 2 ? '#CCCCCC' : '#FFFFFF';	
    		echo '<tr>';
    		echo '<form action="" method="POST">';
    		echo '<td> <input readonly method="POST" style="border-style: none; border:0; background-color:'.$color.'" name="NumOf" value='.$row['NumOf'].'></td>';
    		echo '<td> <input method="POST" style="border-style: none; border:0; background-color:'.$color.'" name="Habillage_Finition" value='.$row['Habillage_Finition'].'></td>';
    		echo '<td> <input border:none;  method="POST" style="border-style: none; border:0; background-color:'.$color.'" name="Marches_Finition" value='.$row['Marches_Finition'].'></td>';
    		echo '<td> <input method="POST" style="border-style: none; border:0; background-color:'.$color.'" name="ContreMarches_Finition" value='.$row['ContreMarches_Finition'].'></td>';
    		echo '<td> <input method="POST" style="border-style: none; border:0; background-color:'.$color.'" name="Socle_Finition" value='.$row['Socle_Finition'].'></td>';
    		echo '<td> <input method="POST" style="border-style: none; border:0; margin:auto; background-color:'.$color.'" name="NomControleur_Finition" value='.$row['NomControleur_Finition'].'></td>';
    		echo '<td><input type="submit" name="Modifier" value="Modifier"/> </form>';
    		echo '</tr>'."\n";
    		// size=""
    	}
    	echo '</table>'."\n";
    	//	fin du tableau.
    	if(isset($_POST['Modifier'])) // si un clic a été fait sur le bouton submit (Modifier)
    	{
    		$NumOf=$_POST['NumOf'];
    		$Habillage_Finition=$_POST['Habillage_Finition'];
    		$Marches_Finition=$_POST['Marches_Finition'];
    		$ContreMarches_Finition=$_POST['ContreMarches_Finition'];
    		$Socle_Finition=$_POST['Socle_Finition'];
    		$NomControleur_Finition=$_POST['NomControleur_Finition'];
     
    		$reqModif = "UPDATE ordredefabrication SET Habillage_Finition = '$Habillage_Finition', 
    			Marches_Finition = '$Marches_Finition', ContreMarches_Finition = '$ContreMarches_Finition', 
    			Socle_Finition = '$Socle_Finition', NomControleur_Finition = '$NomControleur_Finition' 
    			where NumOf = '$NumOf'";
    		$res = mysql_query($reqModif) or die ('Erreur : '.mysql_error() );
    		$tot = mysql_free_result($res);
    	}
    }
    Image:


  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Il suffit de tester la valeur de ta donnée pour ne mettre à jour que les champs qui sont valorisés !

    J'avais un peu de temps
    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
     
    $tabFields = array('Habillage_Finition', 'Marches_Finition', 'ContreMarches_Finition', 'Socle_Finition', 'NomControleur_Finition'); // Tableau qui contient les champs existants dans ta BDD
    $select = 'SELECT NumOf, '.implode(',', $tabFields).' FROM ordredefabrication';
     
    $result = mysql_query($select) or die ('Erreur : '.mysql_error() );
    $total = mysql_num_rows($result);
    if ($total) 
    {
    // [...] Affichage du tableau
     
        if(isset($_POST['Modifier']) && !empty($_POST['NumOf'])) // on rajoute ici une sécurité sur $_POST['NumOf'], puisque NumOf est un paramètre obligatoire pour permettre la mise à jour
        {
            $modifs = array(); // Le tableau qui contiendra les valeurs à mettre à jour
            foreach ($tabFields as $key) // On boucle sur la liste des champs de la base, pour être sûr de ne pas avoir de champs qui n'existe pas en base
            {
                if (!empty($_POST[$key]) && '' != $_POST[$key]) // On ne récupère que les valeurs non nulles et valorisées, donc différentes d'une chaîne vide
                {
                	$modifs[$key] = $key.' = '.mysql_real_escape_string($_POST[$key]); // Enrichissement du tableau de modifs, avec un mysql_real_escape_string() pour sécuriser la mise à jour et éviter de polluer ta base ou de t'exposer à une injection SQL
                }
            }
            if (!empty($modifs)) // Si on a des valeurs à mettre à jour
            {
                $reqModif = 'UPDATE ordredefabrication SET '.implode(',', $modifs).' WHERE NumOf = '.$modifs['NumOf']; // On met à jour
                $res = mysql_query($reqModif) or die ('Erreur : '.mysql_error() );
                $tot = mysql_free_result($res);
            }
        }
    }
    Par contre, je te conseille de revoir certains points :
    - le style en dur dans ta page...C'est pas joli ! Je te conseille de passer par les CSS
    - mysql_ est dépréciée, passes sous mysqli ou PDO !
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour ce code et ces conseils

    Par-contre j'ai un souci dans la requête Update, le NumOf n'est pas identifié :/ .

    Edit:
    J'ai mis $_POST au lieu de $modifs et ça à l'air de mieux marcher.

  4. #4
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Effectivement, mea culpa !
    C'est bien mysql_real_escape_string($_POST['NumOf']) qu'il faut mettre au lieu de $modifs
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Me voilà rassuré .
    Donc c'est bon ça marche nickel.

    Je profite du forum pour poser deux autres questions:

    _ Quand je fais une modification le tableau ne se recharge pas automatiquement, et c'est un problème de devoir recharger manuellement la page à chaque fois :/ .

    _ Et savez-vous comment enlever les bordures de l'input ? J'ai essayé plusieurs choses du genre border:none; border:0px; etc et je ne vois pas ce qui ne va pas.
    Ça m'aiderais car pour l'instant ça donne ça(voir ci-dessous) et ce n'est pas très joli.

    (partie gauche tableau 'normal', à droite tableau 'input')

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ça dépend de ce que tu entends par "ne se recharge pas". C'est du simple calcul qui ne se fait pas où le procédure doit envoyer une requête au serveur pour mettre à jour ce qui ne se recharge pas (cf. ajax) ?

    Pour les bordures qui te tracassent, tu as oublié le border-collapse: collapse

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    D abord merci pour le border-collapse, ça marche mieux comme ça .

    Pour l'autre problème, ce qui ce passe c'est que lorsque j'appuie sur Modifier, l'update se fait normalement mais le tableau(sur le site) reste identique à ce qu'il était avant l'update.
    J'aimerais lors de l'appuie sur le bouton modifier le tableau se recharge avec les nouvelles valeurs.

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bah le plus simple c'est de recharger ta page non ?
    Et si tu ne préfères pas, il faut pour cela ne recharger que le tableau via un appel ajax.
    J'ai fait un tuto sur le rechargement de listes liées en Ajax : ici

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Je relance ce sujet que je croyais résolu mais je me suis rendu compte d'une erreur dans la solution de k'amm, en effet cela marche très bien sauf pour ma variable 'NomControleur_Finition' qui est varchar.
    Dans la requête il n'y a pas de guillemet et l'update ne se fait pas.

    Avec ce système voilà la requête que j'obtiens :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE ordredefabrication SET Habillage_Finition = 4,Marches_Finition = 40,ContreMarches_Finition = 400,Socle_Finition = 4000,NomControleur_Finition = ss WHERE NumOf = 4

    Et donc l'erreur:

    Erreur : Champ 'ss' inconnu dans field list

  10. #10
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Trois possibilités :
    - tu indiques dans ton $tabFields le type voulu (nombre, chaîne de caractère, etc) et filtre en fonction ensuite.
    - tu testes le type pour déterminer le comportement ensuite :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (is_num($_POST[$key]))
        $modifs[$key] = $key.' = '.mysql_real_escape_string($_POST[$key]);
    else
        $modifs[$key] = $key.' = "'.mysql_real_escape_string($_POST[$key]).'"';
    - tu encadre systématiquement tes données avec des guillemets :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $modifs[$key] = $key.' = "'.mysql_real_escape_string($_POST[$key]).'"';
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup !
    Cette fois si c'est belle et bien résolu !

    J'ai utilisé la deuxième méthode mais je te corrige. is_num ne marche pas, il faut utiliser is_numeric.

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

Discussions similaires

  1. [PHP 5.0] Copier le résultat d'une requête mysql dans un autre tableau PHP
    Par Didier100 dans le forum Langage
    Réponses: 6
    Dernier message: 30/05/2012, 23h59
  2. Réponses: 4
    Dernier message: 29/02/2008, 17h14
  3. Réponses: 15
    Dernier message: 11/05/2007, 15h28
  4. [DOM XML] XML -> tableau PHP
    Par Mucsy dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 03/06/2005, 11h44
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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