Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/12/2011, 21h28   #1
Invité de passage
 
Femme
pianiste amateur
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Suisse

Informations professionnelles :
Activité : pianiste amateur
Secteur : Arts - Culture

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
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 :
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
notebleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 22h40   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

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

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
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 :
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)
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 23h35   #3
Invité de passage
 
Femme
pianiste amateur
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Suisse

Informations professionnelles :
Activité : pianiste amateur
Secteur : Arts - Culture

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
Merci, je viens de tester, mais j'ai un message d'erreur:

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

???
notebleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 08h12   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

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

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par notebleue Voir le message
... j'ai mis le tout chez mon hébergeur
Citation:
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)
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 10h43   #5
Invité de passage
 
Femme
pianiste amateur
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Suisse

Informations professionnelles :
Activité : pianiste amateur
Secteur : Arts - Culture

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
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.
notebleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 11h04   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

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

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
Code :
	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 ...;
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2011, 14h51   #7
Invité de passage
 
Femme
pianiste amateur
Inscription : décembre 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : Suisse

Informations professionnelles :
Activité : pianiste amateur
Secteur : Arts - Culture

Informations forums :
Inscription : décembre 2011
Messages : 8
Points : 2
Points : 2
Oui, cela aussi je l'ai fait et j'ai également modifié ceci :

Code :
$s = ($row['idpays'] == $idp)? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
de cette façon :

Code :
$s = ($row['idpays'] == ($_REQUEST['idp']))? ' selected="selected"' : ''; // (condition)vraie ? reponse-si-oui : reponse-si-non;
et maintenant cela fonctionne.

Merci beaucoup pour ton aide
notebleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h47.


 
 
 
 
Partenaires

Hébergement Web