Page 1 sur 1
"value" dans une forme
Posté : 22 oct. 2009, 10:29
par pipercub
Nouveau a PHP j'ai un probleme: pour me faire la main j'ai crée une pretite BDD d'essai, simple carnet d'adresse avec une seule table.
Dans la page "Editer" ou l'utiliateur peut changer le data, j'ai le problème en ce que la chaine à entrer est tronquée, seul le premier mot est entré, le reste disparait. Par exemple si on entre: '34 Rue du marché', seul le chiffre 34 est mis en place, ou 'Le Mans', seul 'Le' est en place.
Que faut-il faire pour conserver l'intégrité des chaines?
Voici un raccourci du code:
Code : Tout sélectionner
//
$recherche="SELECT
....
(rue) AS rue,
(ville) AS ville
FROM carnet_adresse"
$resultat=MYSQL_QUERY($recherche);
$ROW=MYSQL_FETCH_ARRAY($resultat);
ECHO "<FORM METHOD='POST' ACTION='editer_2.php>";
....
$rue=$ROW['rue'];
$ville=$ROW['ville'];
...
// table et forme pour éditer
...
<td>Rue</td></td><INPUT TYPE='TEXT" NAME="rue" VALUE=' . $rue . '></td>
<td>Ville</td><td><INPUT TYPE= "TEXT" NAME ="vile" Value=' . $ville .'></td>...
// c'est la que les chaines sont tromquées.
Merci.
Re: "value" dans une forme
Posté : 22 oct. 2009, 23:03
par charabia
Utilise les balises PHP pour que ton code soit plus lisible.
C'est bien lorsque tu valides le formulaire de modification que ça tronque ? Il nous faudrait le code de la page edit.
Re: "value" dans une forme
Posté : 23 oct. 2009, 12:38
par pipercub
Merci d'avoir répondu à mon appel à l'aide. J'avais trop réduit le code pour ne pas encombrer mais vous avez raison, il en faut plus pour cemprendre le problème. La DBB s'appelle 'carnet' at la table s'appelle 'adresse'. La table a 5 chanps: id, nom, prénom, rue et ville. En éditant tout est bien mis dans la BDD mais sur la table/foems d'èdition seuls les premiers mots des chaines sont montrés. Il y a une autre page 'editer2.php' qui entre le data dans le BDD avec la commande 'UPDATE'. Il devrait bien y avoir un moyen de conserver l'intégrité des chaines dans la table/forme.
Voici le code:
<HTML>
<HEAD>
<TITLE>editer.php</TITLE>
</HEAD>
<BODY>
<BR>
Entrer le numero a editer
<form method ="POST" action= "editer.php">
<input type="text" name="id">
<input type="submit" name="submit" value="ENTREZ">
</form>
<br>
<?php
$connection = mysql_connect('localhost','root','') OR die
('Impossible de se connecter a MySQL: ' . mysql_error() );
mysql_select_db ('carnet') OR die
('Impossible de se connecter a la BDD: ' . mysql_error() );
$id =@ $_POST['id'];
$recherche="SELECT
(id) as id,
(nom) as nom,
(prenom) as prenom,
(rue) as rue,
(ville) as ville
FROM adresse
WHERE id='$id'
";
$resultat = mysql_query ($recherche);
$row = mysql_fetch_array ($resultat);
echo "<form method ='POST' action= 'editer_2.php'>";
echo '<Table>';
echo '<tr><td align="right"><b>ID:</b></td><td><input type="text" name="id" value=' . $row['id'] . '></td></tr>
<tr><td align="right"><b>NOM:</b></td> <td><input type="text" name="nom" value=' . $row['nom'] . '></td></tr>
<tr><td align="right"><b>PRENOM:</b></td><td><input type="text" name="prenom" value=' . $row['prenom'] . '></td></tr>
<tr><td align="right"><b>RUE:</b></td><td><input type="text" name="rue" value=' . $row['rue'] . '></td></tr>
<tr><td align="right"><b>VILLE:</b></td><td><input type="text" name="ville" value=' . $row['ville'] . '></td></tr>
<tr><td align="right"><input type ="submit" name ="send" value="EDITEZ"></td></tr>
</table>';
echo '</form>';
$nom=$row['nom'];
$prenom=$row['prenom'];
$rue=$row['rue'];
$ville=$row['ville'];
?>
</body>
</html>
Merci de votre aide.
Re: "value" dans une forme
Posté : 23 oct. 2009, 14:06
par charabia
Oups on ne s'est pas compris, je parlais de ta page "editer_2.php", celle qui fait le traitement.
Les bbcode PHP pour colorer ton code n'oublie pas !
Re: "value" dans une forme
Posté : 23 oct. 2009, 14:30
par sylvaing26
Les bbcode PHP pour colorer ton code n'oublie pas !
C'est clair c'est plutot chaud a debugger sans la coloration synthaxique
Re: "value" dans une forme
Posté : 23 oct. 2009, 19:34
par dunbar
Salut,
Comme ceci, ça donne quoi
<HTML>
<HEAD>
<TITLE>editer.php</TITLE>
</HEAD>
<BODY>
<?php
//--> Définition des paramètres de connexion à la base de données.//
$db_host = 'localhost'; //-->Serveur sur lequel se trouve le serveur de base de données.//
$db_login = 'root'; //-->Login de connexion à la base de données.//
$db_pass = ''; //-->Passeword de connexion à la base de données.//
$db_base = 'carnet'; //-->Base de données.//
//--> Fin des paramètres de connexion à la base de données.//
//-->Connexion à la base de données.//
$sql_db = mysql_connect($db_host, $db_login, $db_pass) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $sql_db .
"<br />" . "Impossible d'établir une connexion avec le serveur MySQL</font>");
mysql_select_db($db_base) or die("<font color='#0000A0'>Erreur MySQL :<br />" . $db_base . "<br />" .
"Impossible d'établir une connexion avec la base " . $db_base . "</font>");
//-->Fin de la requête de connexion à la base de données.//
$Edition = (isSet($_GET['action']) ? $_GET['action'] : '');
switch ($Edition)
{
case 'edition':
$id = (isSet($_POST['id']) ? $_POST['id'] : '');
$Recherche = "SELECT id, nom, prenom, rue, ville FROM adresse WHERE id = '".$id."'";
$Resultat = mysql_query($Recherche) or die('Erreur SQL !'.$Recherche.'<br>'.mysql_error());
$row = mysql_fetch_array ($Resultat);
echo '<form method ="POST" action="editer.php?action=majedition&id='.$row['id'].'">';
echo '<Table>';
echo '<tr><td align="right"><b>ID:</b></td><td><input type="text" name="id" value=' . $row['id'] . '></td></tr>
<tr><td align="right"><b>NOM:</b></td> <td><input type="text" name="nom" value=' . $row['nom'] . '></td></tr>
<tr><td align="right"><b>PRENOM:</b></td><td><input type="text" name="prenom" value=' . $row['prenom'] . '></td></tr>
<tr><td align="right"><b>RUE:</b></td><td><input type="text" name="rue" value=' . $row['rue'] . '></td></tr>
<tr><td align="right"><b>VILLE:</b></td><td><input type="text" name="ville" value=' . $row['ville'] . '></td></tr>
<tr><td align="right"><input type ="submit" name ="send" value="EDITEZ"></td></tr>
</table>';
echo '</form>';
$nom = $row['nom'];
$prenom = $row['prenom'];
$rue = $row['rue'];
$ville = $row['ville'];
break;
case 'majedition':
///***Control des données ici peut-être ?.---///
$id = (isSet($_GET['id']) ? $_GET['id'] : '');
$SqlUpdate = "UPDATE adresse
SET
nom = '".mysql_real_escape_string($_POST['nom'])."',
prenom = '".mysql_real_escape_string($_POST['prenom'])."',
rue = '".mysql_real_escape_string($_POST['rue'])."',
ville = '".mysql_real_escape_string($_POST['ville'])."'
WHERE id = '".$id."'";
$req = mysql_query($SqlUpdate) or die('Erreur SQL !'.$SqlUpdate.'<br>'.mysql_error());
break;
default;
echo 'Entrer le numero a editer
<form method="post" action="editer.php?action=edition">
<input type="text" name="id">
<input type="submit" name="submit" value="ENTREZ">
</form>';
break;
}
?>
</body>
</html>
Re: "value" dans une forme
Posté : 25 oct. 2009, 04:02
par pipercub
Merci de vos réponses.
Navré pour le manque de couleurs des balises. Je n'ai pas encore compris comment les mettre ici, de même les numéros des lignes de code. De même pour mettre du code dans une fenêtre séparée...comme tout le monde sait le faire...
Dommage que je ne puisse pas montrer le résultat de mon problème sur l'écran, cela sauverait beaucoup de temps et d'explications.
Merci à Dunbar pour le code. Cela fonctionne mais cela n'a pas solutioné le problème. Celui-ci réside dans la "FORM". Si on ajoute une autre table sans "FORM", sans "INPUT" et sans "VALUE", une simple table, les chaines sont mises avec toute leut intégrité, aussitôt que l'on utilise "FORM", "INPUT" et "VALUE", les chaines sont tronquées et il ne subsiste que le premier mot, rien après le premier espace: '34 Rue du marché' devient '34', tout court, 'Le Mans' devient 'Le'.
Curieux de ne pas trouvé cela dans tous les livres de PHP. Cela ne doit pas être la première fois que quelqu'un veuille créer une page donnant à l'utilisateur la chance de voir une entrée de la BBD et de pouvoir en modifier le contenu, avec "UPDATE".
Une solution "boiteuse" serait de montrer à l'utilisateur le data à modifier, de le supprimer avec "DELETE" et d'entrer à nouveau le nouveau data avec "INSERT". Pas très élégant.
Merci encore.
Re: "value" dans une forme
Posté : 26 oct. 2009, 09:52
par Aureusms
Bizarre en effet car moi j'utilise cette technique et je n'ai pas de troncage de valeur.
Cela m'est arrivé il y a longtemps à cause des quote ou double quote :
Fait un
echo '<pre>';
print_r ($row); //au passage utilise mysql_fetch_assoc au lieu de mysql_fetch_array => plus rapide dans ton cas)
echo '</pre>';
et place le avant la balise form.
Si tu veux montre nous le résultat.
Re: "value" dans une forme
Posté : 27 oct. 2009, 10:31
par pipercub
Merci Aureusms pour le renseignement. Très interressant.
Il est difficile à comprendre pourquoi la Forme tronque les valeurs après le premier espace. J'ai tout essayé, y compris de faire la forme en HTML avec les valeurs en PHP:
<input type="text" name="id" value="<?php echo'' . $row['id'] . ''; ?>">
Cela ne marche toujours pas...
Voici une vue de l'écran avec "print_r" coome vous l'avez indiqué:
Array
(
[0] => 2
[id] => 2
[1] => Durant Dupont
[nom] => Durant Dupont
[2] => Jean Jacques
[prenom] => Jean Jacques
[3] => 56 Bd de la gare
[rue] => 56 Bd de la gare
[4] => Saint Florent
[ville] => Saint Florent
)
Et voici la Forme la forme avec les valeurs tronquées...
ID: 2
NOM: Durant
PRENOM: Jean
RUE: 56
VILLE: Saint
Re: "value" dans une forme
Posté : 27 oct. 2009, 11:21
par Kran
Comme pour toute propriété d'une balise HTML, la valeur de la propriété
value doit être écrite entre guillements doubles, sinon il ne prendra que le premier block de texte avant le premier espace...
Essayes en rajoutant des guillements doubles comme ceci :
echo '<tr><td align="right"><b>ID:</b></td><td><input type="text" name="id" value="' . $row['id'] . '"></td></tr>
<tr><td align="right"><b>NOM:</b></td> <td><input type="text" name="nom" value="' . $row['nom'] . '"></td></tr>
<tr><td align="right"><b>PRENOM:</b></td><td><input type="text" name="prenom" value="' . $row['prenom'] . '"></td></tr>
<tr><td align="right"><b>RUE:</b></td><td><input type="text" name="rue" value="' . $row['rue'] . '"></td></tr>
<tr><td align="right"><b>VILLE:</b></td><td><input type="text" name="ville" value="' . $row['ville'] . '"></td></tr>
<tr><td align="right"><input type ="submit" name ="send" value="EDITEZ"></td></tr>
</table>';
Et utilise plutot mysql_fetch_assoc au lieu de mysql_fetch_array comme l'a suggèré Aureusms : Ca t'évitera d'avoir des valeurs en double dans le tableau vu que tu ne te sers pas de l'index numérique...
Re: "value" dans une forme
Posté : 28 oct. 2009, 02:06
par pipercub
Grand merci à Kran.
Tout fonctionne à la perfection.
Je croyais avoir tout essayè mais pas ces doubles quotes. Ceci n'ètait qu'une petite BDD d'essai . Je vais maintenant pouvoir passer à la 'vraie BDD'.
Une fois encore merci à tous et surtout à Kran.
Amitiès