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 :

Problème liste déroulante pas mise à jour


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut Problème liste déroulante pas mise à jour
    Bonsoir,
    J'ai un petit problème, j'ai une bdd gérée par des formulaires PHP, j'ai testé le tout avec WampServer, tout fonctionne très bien. Mais lorsque j'ai mis le tout chez mon hébergeur, mes formulaires ont des comportements bizarres. J'ai contacté le support de mon hébergeur sans succès, ils prétendent que le problème vient de mes scripts.
    Un des problèmes les plus gênants est le suivant:
    un formulaire permettant d'éditer les données dans lequel j'ai deux listes déroulantes, en local les listes déroulantes affichent les données passées par des variables mais sur le serveur de l'hébergeur les listes déroulantes n'affichent pas ces données mais le début de la liste.

    voici le code du formulaire en question:

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    <link rel="stylesheet" href="style.css" type="text/css">
     
    <style type="text/css">
    INPUT 
    {width:400px;}
    TD  
    {width:134px;}
    </style>
    <?php error_reporting (E_ALL ^ E_NOTICE); ?>
    <?php
     
    include ("include/variables.inc.php");
    include("menu.php");
    $liendb = mysql_connect($bddserver, $bddlogin, $bddpassword);
    mysql_select_db  ($bdd);
    $idpays = $_POST['idp'];
    $idregion = $_POST['idr'];
    //
    $rqSql = "SELECT idpays, nompays FROM pays ORDER BY nompays ASC";
    // Exécution de la requête
    $result = mysql_query($rqSql, $liendb);
     
    // Construction de la chaîne de caractères qui fait la // liste
     
    $ld = "<SELECT NAME='choix'>";
     
    // On boucle sur la table
    while ($row = mysql_fetch_array($result)) {
        // $row est un tableau associatif
        // les éléments sont «indicés» par les noms
        // des colonnes. Je préfère cette technique à celle
        // des indices numériques..on ajoute une colonne..
        $idpays = $row["idpays"];
        $nompays = $row["nompays"];
     
        if ( $idpays == $idp) {
            $s = "selected";
        } else {
            $s = "";
        }
     
     
        $ld .= "<OPTION VALUE='$idpays' $s >
                    $nompays</OPTION>";
    }
    $ld .= "</SELECT>";
    //
     
    $rqSqlr = "SELECT idregion, region FROM regions ORDER BY region ASC";
    $resultr = mysql_query( $rqSqlr, $liendb);
    $ldr = "<SELECT NAME='choixregion'>";
    //$ldr .= "<OPTION VALUE=0>Choisissez</OPTION>";
    // On boucle sur la table
    while ($row = mysql_fetch_array($resultr)) {
        // $row est un tableau associatif
        // les éléments sont «indicés» par les noms
        // des colonnes. Je préfère cette technique à celle
        // des indices numériques..on ajoute une colonne..
        $idregion = $row["idregion"];
        $region = $row["region"];
     
        if ( $idregion == $idr) {
            $sr = "selected";
        } else {
            $sr = "";
        }
     
     
        $ldr .= "<OPTION VALUE='$idregion' $sr >
                    $region</OPTION>";
    }
    $ldr .= "</SELECT>";
     
     
    //<option value="choix3" selected="selected">Choix 3</option> $_POST['idregion']
     
    if  ($_REQUEST['action']=="maj")
    { 
     
      $sql = "UPDATE producteurs SET nom_producteur = '".$_REQUEST['nom_producteur']."',".
              "ville = '".$_REQUEST['ville']."',".	 
              "idpays = '".$_POST['choix']."',".
    					"idregion = '".$_POST['choixregion']."',".					
              "tel = '".$_REQUEST['tel']."',".
              "email = '".$_REQUEST['email']."',".
              "web = '".$_REQUEST['web']."'".
             "WHERE idproducteur='".$_REQUEST['id']."'";
     
      mysql_query ($sql);
      header("Location: http://localhost/Vins/producteurs.php");	
    }
    elseif  ($_REQUEST['action']=="suppr" && $_REQUEST['id']>=1)
    {
      $sql = "DELETE FROM producteurs WHERE idproducteur='".$_REQUEST['id']."'";
      mysql_query ($sql);
      header("Location: http://localhost/Vins/producteurs.php");
    }
     
    echo "<p align=left> :: Fiche producteur [".$_REQUEST['id']."]</p>";
     
    $sql  =  "SELECT idproducteur, nom_producteur, ville, producteurs.idpays, pays.nompays, producteurs.idregion, regions.region, tel, email, web
    FROM producteurs
    INNER JOIN pays
    ON producteurs.idpays = pays.idpays
    INNER JOIN regions
    ON producteurs.idregion = regions.idregion
    WHERE idproducteur = '".$_REQUEST['id']."'";
     
    $resultat = mysql_query ($sql);
    $resultat = mysql_query($sql) or die(mysql_error()); 
    $producteurs = mysql_fetch_array ($resultat);
     
    ?>
    <div class="boite1">
    <form action="producteurs_edite.php" method="post">
    <input type="hidden" name="enregistre" value="oui" />
    <input type="hidden" name="id" value="<?php echo $_REQUEST['id']; ?>" />
     
    <table>
    <tr>
     <td>Producteur</td>
     <td><input type="text" name="nom_producteur" value="<?php echo $producteurs['nom_producteur']; ?>" /></td>
    </tr>
    <tr>
     <td>Ville</td>
     <td><input type="text" name="ville" value="<?php echo $producteurs['ville']; ?>" /></td>
    </tr>
    <tr>
     <td>Pays</td>
     <td>
    <?php
    print $ld;
    ?>
     </td>
    </tr>
    <tr>
     <td>Régions</td>
     <td>
    <?php
    print $ldr;
    ?>
     </td>
    </tr>
     <tr>
     <td>Téléphone</td>
     <td><input type="text" name="tel" value="<?php echo $producteurs['tel']; ?>" /></td>
    </tr>
    <tr>
     <td>Email</td>
     <td><input type="text" name="email" value="<?php echo $producteurs['email']; ?>" /></td>
    </tr>
    <tr>
     <td>Web</td>
     <td><input type="text" name="web" value="<?php echo $producteurs['web']; ?>" /></td>
    </tr>
     
    </table>
     
    <br/>
     
    <select  name="action">
     <option  value="maj">  Enregistrer  la  fiche  </option>
     <option  value="suppr">  Supprimer  la  fiche  </option>
    </select>
     
    <input  type="submit"  value="Enregistrer">
     
    </form>
    </div>
    </body>
    </html>
     
    <?php 
     
    mysql_close ($liendb);
     
    ?>
    Je ne comprends pas pourquoi en local cela fonctionne et pas sur le serveur de mont hébergeur!

    Merci d'avance à ceux qui pourront m'aider

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    voici une manière plus juste et plus propre d'écrire ton code, en respectant la logique de traitement/affichage des données :
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    <?php error_reporting (E_ALL ^ E_NOTICE); 
    // ------------------------
    // connection BdD
    $liendb = mysql_connect($bddserver, $bddlogin, $bddpassword);
    mysql_select_db ($bdd);
    // recupération données
    $idpays = $_POST['idp'];
    $idregion = $_POST['idr'];
    // ------------------------
    // TRAITEMENT du formulaire
    if ($_REQUEST['action']=="maj")
    { 
    	// ATTENTION : normalement ICI => GESTION d'ERREURS (champs obligatoires, validité email,...)
     
    	// MISE A JOUR de la fiche dans la table
    	// IMPORTANT : mysql_real_escape_string() => PROTECTION contre injection SQL
    	$sql = "UPDATE producteurs SET ".
    		" nom_producteur = '".mysql_real_escape_string($_REQUEST['nom_producteur'])."',".
    		" ville = '".mysql_real_escape_string($_REQUEST['ville'])."',".	 
    		" idpays = '".mysql_real_escape_string($_POST['choix'])."',".
    		" idregion = '".mysql_real_escape_string($_POST['choixregion'])."',".					
    		" tel = '".mysql_real_escape_string($_REQUEST['tel'])."',".
    		" email = '".mysql_real_escape_string($_REQUEST['email'])."',".
    		" web = '".mysql_real_escape_string($_REQUEST['web'])."'".
    		" WHERE idproducteur='".mysql_real_escape_string($_REQUEST['id'])."';";
    	mysql_query ($sql);
    	// redirection
    	header("location: http://localhost/Vins/producteurs.php");
    	exit;
    }
    elseif ($_REQUEST['action']=="suppr" && $_REQUEST['id']>=1)
    {
    	// SUPPRESSION de la fiche dans la table
    	$sql = "DELETE FROM producteurs WHERE idproducteur='".mysql_real_escape_string($_REQUEST['id'])."';";
    	mysql_query ($sql);
    	// redirection
    	header("location: http://localhost/Vins/producteurs.php");
    	exit;
    }
    // fin traitement
    // ------------------------
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" href="style.css" type="text/css">
     
    <style type="text/css">
    INPUT 	{width:400px;}
    TD 	{width:134px;}
    </style>
    </head>
    <body>
    <?php
    // ------------------------
    include ("include/variables.inc.php");
    include("menu.php");
    // ------------------------
    ?>
    <p align="left"> : Fiche producteur [<?php echo $_REQUEST['id']; ?>]</p>
    <?php
    // ------------------------
    // requete : INFOS de ce PRODUCTEUR
    $sql = "SELECT idproducteur, nom_producteur, ville, producteurs.idpays, pays.nompays, producteurs.idregion, regions.region, tel, email, web
    	FROM producteurs
    	INNER JOIN pays
    	ON producteurs.idpays = pays.idpays
    	INNER JOIN regions
    	ON producteurs.idregion = regions.idregion
    	WHERE idproducteur = '".mysql_real_escape_string($_REQUEST['id'])."';";
    $resultat = mysql_query ($sql);
    $resultat = mysql_query($sql) or die(mysql_error()); 
    $producteurs = mysql_fetch_array ($resultat);
    // ------------------------
    ?>
    <div class="boite1">
    <form method="post" action="producteurs_edite.php">
    <input type="hidden" name="enregistre" value="oui" />
    <input type="hidden" name="id" value="<?php echo $_REQUEST['id']; ?>" />
     
    <table>
    <tr>
    	<td>Producteur</td>
    	<td><input type="text" name="nom_producteur" value="<?php echo $producteurs['nom_producteur']; ?>" /></td>
    </tr>
    <tr>
    	<td>Ville</td>
    	<td><input type="text" name="ville" value="<?php echo $producteurs['ville']; ?>" /></td>
    </tr>
    <tr>
    	<td>Pays</td>
    	<td><select name="choix">
    <?php // requete PAYS
    $rqSql = "SELECT idpays, nompays FROM pays ORDER BY nompays ASC;";
    $result = mysql_query($rqSql, $liendb);	// Exécution de la requête
    // On boucle sur la table
    while ($row = mysql_fetch_array($result)) {
      $s = ($row['idpays'] == $idp)? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
      echo '<option value="'.$row['idpays'].'" '.$s.'>'.$row['nompays'].'</option>'."\n"; // (\n : passage à la ligne)
    } 
    ?>
    	</select></td>
    </tr>
    <tr>
    	<td>Régions</td>
    	<td><select name="choixregion">
    <?php // requete REGION
    $rqSqlr = "SELECT idregion, region FROM regions ORDER BY region ASC;";
    $resultr = mysql_query( $rqSqlr, $liendb);
    //$ldr .= "<option value=0>Choisissez</option>";
    // On boucle sur la table
    while ($row = mysql_fetch_array($resultr)) {
      $sr = ($row['idregion'] == $idr)? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
      echo '<option value="'.$row['idregion'].'" '.$sr.'>'.$row['region'].'</option>'."\n"; // (\n : passage à la ligne)
    } 
    ?>
    	</select></td>
    </tr>
    	<tr>
    	<td>Téléphone</td>
    	<td><input type="text" name="tel" value="<?php echo $producteurs['tel']; ?>" /></td>
    </tr>
    <tr>
    	<td>Email</td>
    	<td><input type="text" name="email" value="<?php echo $producteurs['email']; ?>" /></td>
    </tr>
    <tr>
    	<td>Web</td>
    	<td><input type="text" name="web" value="<?php echo $producteurs['web']; ?>" /></td>
    </tr>
     
    </table>
     
    <br/>
     
    <select name="action">
    	<option value="maj"> Enregistrer la fiche 	</option>
    	<option value="suppr"> Supprimer la fiche 	</option>
    </select>
     
    <input type="submit" value="Enregistrer" />
     
    </form>
    </div>
     
    <?php
    mysql_close ($liendb);
    ?>
     
    </body>
    </html>
    PS :
    1/ header("location: ..."); => doit être appelé AVANT tout affichage de code html.
    2/ ATTENTION : normalement => GESTION d'ERREURS (champs obligatoires, validité email,...)
    3/ IMPORTANT : mysql_real_escape_string() => PROTECTION contre injection SQL
    4/ (facultatif) "SELECT .....;" - "UPDATE .....;" - "DELETE .....;" : le ; sert à "fermer" la requête (précaution = empêche d'ajouter quoi que ce soit après)
    Dernière modification par Invité ; 22/12/2011 à 08h18.

  3. #3
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Merci, je viens de tester, mais j'ai un message d'erreur:

    Access denied for user 'apache'@'localhost' (using password: NO)

    ???

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par notebleue Voir le message
    ... j'ai mis le tout chez mon hébergeur
    Access denied for user 'apache'@'localhost' (using password: NO)
    Il faudrait penser à modifier les paramètres de connexion... puisque tu n'es plus en local !
    Et (si ce n'est pas déjà fait) transférer les tables/données de la base de données sur le serveur...
    ...après avoir créé une base de données sur le serveur (si ce n'est pas déjà fait)

  5. #5
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Oui merci, entretemps je l'ai fait, je n'ai plus le message d'erreur, mais mes listes déroulantes ne sont toujours pas mises à jour, je ne comprends vraiment pas où est le problème.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	header("location: http://localhost/Vins/producteurs.php");
    Là aussi, il faut mettre le lien correct.
    Et pour savoir "par où passe le script", mets des echo ...;

  7. #7
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Oui, cela aussi je l'ai fait et j'ai également modifié ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s = ($row['idpays'] == $idp)? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
    de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $s = ($row['idpays'] == ($_REQUEST['idp']))? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
    et maintenant cela fonctionne.

    Merci beaucoup pour ton aide

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

Discussions similaires

  1. [A-03] : liste deroulante pas mise à jour
    Par Didier71 dans le forum IHM
    Réponses: 2
    Dernier message: 11/03/2009, 21h04
  2. Liste déroulante et mise à jour
    Par meazfpc dans le forum IHM
    Réponses: 8
    Dernier message: 08/07/2008, 18h37
  3. liste déroulante et mise à jour de celle-ci
    Par ludwigMatrix dans le forum IHM
    Réponses: 2
    Dernier message: 08/11/2007, 19h02
  4. liste déroulante et mise à jour
    Par x0249 dans le forum IHM
    Réponses: 3
    Dernier message: 21/05/2007, 09h34
  5. Liste déroulante avec mise à jour champ en dynamique
    Par B-Pascal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/07/2006, 15h53

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