Page 1 sur 3
traitement sur la m page
Posté : 30 juil. 2005, 04:51
par Invité
salut !
Comment fait on deja pour lorsque l'utilisateur valide son formulaire, le traitement se passe sur la meme page genre:
le gars rentre son nom et son prenom et cela apparait dans la liste ?
merci !
Posté : 30 juil. 2005, 10:04
par Cyrano
Salut,
tu peux télécharger un exemple de formulaire complet avec validation et traitement sur une seule et même page
ICI
Le principe de base : dans l'attribut action de ton formulaire, tu mets la valeur "<?php echo($_SERVER['PHP_SELF']); ?>" et en début de fichier, tu commences par tester si le formulaire a été envoyé ou si c'est un premier affichage. Tu trouveras tout ça dans les commentaires du fichier indiqué ci-dessus.
Posté : 30 juil. 2005, 11:45
par m8sql
Merci bien Cyrano,
You're nice

Posté : 01 août 2005, 16:00
par m8sql
salut !
j'ai un pb pour faire le traitement sur la m page.
admettons que j ai :
<form="form1" method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> form name="form1" method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> <tr><td align="right" width="34"> Nom
</td> <td><input name="nom" type="text" class="textearea" id="nom" size="15"></td> <td align="right"> Prénom
</td> <td><input name="prénom" type="text" class="textearea" id="prénom" size="15"><input class="input" type="submit" name="submit" value="Ok"> <span class="separ"> *Saisir la 1ère lettre du nom et prénom en majuscule ex : Bruce Lee </span></td> </tr>
</form>
et mon traitement :
<?php
// Récupération des données du formulaire
if (isset($_POST['envoi']))
{
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
$nom=$_POST['nom'];
$prénom=$_POST['prénom'];
$requete="insert into liste values('','$prénom','$nom')";
mysql_query($requete);
}
?>
<?
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
//créer la requete et insertion
//requete et affiche
$requete="select id,nom,prénom from liste order by nom";
$envoi=mysql_query($requete);
// début de la boucle
while($tableau = mysql_fetch_array($envoi)) {
// on stocke nos données
$tablo[]=$tableau;
}
$nbcol=4; // nombre de colonnes
echo '<table bgcolor=#FFFFFF cellspacing=0 cellpadding=0 align=center border=1 bordercolor=#afc5cc rules=none>';
for($i=0;$i<count($tablo);$i++){
if($i%$nbcol==0)
echo '<tr>';
echo '<td class=bordureDroite>'.$tablo[$i]['id'].'</td><td class=bordureDroite>'.$tablo[$i]['prénom'].'</td><td class=bordureDroite>'.$tablo[$i]['nom'].'</td>';
if($i%$nbcol==($nbcol-1) or $i==(count($tablo)-1))
echo '</tr>';
}
echo '</table>';
//fermeture de la connexion vers MySQL
mysql_close();
?>
voilà , ca m'affiche pas d'erreur quand je veux insérer un nom ,l'insertion ne se fait pas(juste un bla
Posté : 01 août 2005, 16:16
par Cyrano
Bon, dans un premier temps, n'utilise jamais de caractères accentués dans un nom de champ de formulaire ni dans une variable PHP et pas plus dans le nom d'un champ de base de données:
Ensuite sépare correctement HTML/PHP/SQL. Corrigé vite fait, ça donne ceci:
<form id="form1" method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<table summary="">
<tr>
<td align="right" width="34"> Nom </td>
<td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>
<td align="right"> Prénom </td>
<td><input name="prenom" type="text" class="textearea" id="prenom" size="15"><input class="input" type="submit" name="submit" value="Ok"> <span class="separ"> *Saisir la 1ère lettre du nom et prénom en majuscule ex : Bruce Lee </span></td>
</tr>
</table>
</form>
Et ton traitement :
<?php
// Récupération des données du formulaire
if (isset($_POST['envoi']))
{
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
$nom=$_POST['nom'];
$prénom=$_POST['prenom'];
$requete="insert into liste values('','". $prenom ."','". $nom ."')";
mysql_query($requete);
}
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
//créer la requete et insertion
//requete et affiche
$requete="select id,nom,prenom from liste order by nom";
$envoi=mysql_query($requete);
// début de la boucle
while($tableau = mysql_fetch_array($envoi))
{
// on stocke nos données
$tablo[]=$tableau;
}
$nbcol=4; // nombre de colonnes
?>
<table bgcolor=#FFFFFF cellspacing=0 cellpadding=0 align=center border=1 bordercolor=#afc5cc rules=none>
<?php
for($i=0;$i<count($tablo);$i++)
{
if($i%$nbcol==0)
{
?>
<tr>
<?php
}
?>
<td class=bordureDroite><?php echo($tablo[$i]['id']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['prenom']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['nom']); ?></td>
<?php
if($i%$nbcol==($nbcol-1) or $i==(count($tablo)-1))
{
?>
</tr>
<?php
}
}
?>
</table>
<?php
//fermeture de la connexion vers MySQL
mysql_close();
?>
Posté : 01 août 2005, 16:53
par m8sql
Cyrano, j'ai refait comme tu m'as dit, mais le traitement concernant le insert into ne fonctionne pas, je te recopie le source en intégral.
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
<style type="text/css">
table {font-size:10px
}
body {
background-color:#f6ffff
}
a.function:active {
color: #ff9933;
}
a.function {
color: #ff9933;
}
a.function:link {
}
a.function:visited {
color: #ff9933;
}
a.function:hover {
color: #ff9933;
text-decoration:none
}
</style>
<script language="JavaScript" type="text/javascript">
<!-- Hide script from old browsers
function newWindow() {
catWindow = window.open("noticelist.htm", "catWin", "width=650,height=800")
}
// End hiding script from old browsers -->
<!--
function show2() {
if(document.getElementById)
document.getElementById ("form1").style.visibility = "visible";
}
function show3() {
if(document.getElementById)
document.getElementById ("form2").style.visibility = "visible";
}
//-->
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body leftmargin="0" topmargin="10" marginwidth="0" marginheight="0" bgcolor="#f6ffff">
<?php
// Récupération des données du formulaire
if (isset($_POST['envoi']))
{
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
$nom=$_POST['nom'];
$prénom=$_POST['prenom'];
$requete="insert into liste values('','". $prenom ."','". $nom ."')";
mysql_query($requete);
}
?>
<table width="911" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td valign="top" bgcolor="dodce0" width="205"><a href="backoffice.php"><img src="1wingmyadmin.gif" border="0"></a></td>
<td>
<table width="800" border="0" cellpadding="0" cellspacing="0" bgcolor="f6ffff" align="center">
<tr>
<td valign="top" align="left">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="500" align="center">
<a href="javascript:show2()" class="function">Ajouter un invité</a> |
<a href="javascript:show3()" class="function">Effacer un invité</a> |
<a href="mdp.php" class="function">Voir la modification sur le site</a>
<a href="javascript:newWindow()" class="menu01">notice</a>
</td>
</tr>
</table>
<table border="0" cellspacing="0" cellpadding="0" align="left" id="form1" style="visibility:hidden">
<form id="form1" method="post" action="<?php $_SERVER['PHP_SELF'] ?>">
<tr>
<td align="right" width="34"> Nom </td>
<td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>
<td align="right"> Prénom </td>
<td><input name="prenom" type="text" class="textearea" id="prenom" size="15"><input class="input" type="submit" name="submit" value="Ok"> <span class="separ"> *Saisir la 1ère lettre du nom et prénom en majuscule ex : Bruce Lee </span></td>
</tr> </form>
</table>
</td>
</tr>
</table>
<tr><td valign="top">
<table border="0" cellspacing="0" cellpadding="0" align="left" id="form2" style="visibility:hidden">
<form name="form2" method="post" action="suppr.php">
<tr>
<td width="34" align="right"> Id </td>
<td><input name="id" type="text" class="textearea" id="id" size="3" maxlength="3">
<input type="image" src="suppr.gif" alt="suppression" name="submit2" value="Suppression">
<span class="separ"> *Saisir le n° de l'identité dans la liste à effacer</span></td>
</tr>
</form>
</table>
</td>
</tr>
</table>
<table bgcolor="#f6ffff" width="100%" align="center">
<tr><td>
<?php
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
//créer la requete et insertion
//requete et affiche
$requete="select id,nom,prenom from liste order by nom";
$envoi=mysql_query($requete);
// début de la boucle
while($tableau = mysql_fetch_array($envoi))
{
// on stocke nos données
$tablo[]=$tableau;
}
$nbcol=4; // nombre de colonnes
?>
<table bgcolor=#FFFFFF cellspacing=0 cellpadding=0 align=center border=1 bordercolor=#afc5cc rules=none>
<?php
for($i=0;$i<count($tablo);$i++)
{
if($i%$nbcol==0)
{
?>
<tr>
<?php
}
?>
<td class=bordureDroite><?php echo($tablo[$i]['id']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['prenom']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['nom']); ?></td>
<?php
if($i%$nbcol==($nbcol-1) or $i==(count($tablo)-1))
{
?>
</tr>
<?php
}
}
?>
</table>
<?php
//fermeture de la connexion vers MySQL
mysql_close();
?>
</td></tr>
</table></td>
</tr>
</table>
</body>
</html>
Posté : 01 août 2005, 17:08
par Cyrano
As-tu essayé de faire afficher la requête générée par exemple pour vérifier qu'elle ressemble bien à ce qu'elle doit être ?
Ensuite, je vais passer pour un manique, mais aligner proprement son code avec une indentation correcte, ça facilite quand même énormément la lecture :
<html>
<head>
<link href="style.css" rel="stylesheet" type="text/css">
<style type="text/css">
table {font-size:10px
}
body {
background-color:#f6ffff
}
a.function:active {
color: #ff9933;
}
a.function {
color: #ff9933;
}
a.function:link {
}
a.function:visited {
color: #ff9933;
}
a.function:hover {
color: #ff9933;
text-decoration:none
}
</style>
<script language="JavaScript" type="text/javascript">
<!-- Hide script from old browsers
function newWindow() {
catWindow = window.open("noticelist.htm", "catWin", "width=650,height=800")
}
// End hiding script from old browsers -->
<!--
function show2() {
if(document.getElementById)
document.getElementById ("form1").style.visibility = "visible";
}
function show3() {
if(document.getElementById)
document.getElementById ("form2").style.visibility = "visible";
}
//-->
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body leftmargin="0" topmargin="10" marginwidth="0" marginheight="0" bgcolor="#f6ffff">
<?php
// Récupération des données du formulaire
if (isset($_POST['envoi']))
{
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
$nom=$_POST['nom'];
$prénom=$_POST['prenom'];
$requete="insert into liste values('','". $prenom ."','". $nom ."')";
/* ~~~~~~~~~~~ débuggage ~~~~~~~~~~ */
echo($requete);
mysql_query($requete);
}
?>
<table width="911" border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td valign="top" bgcolor="dodce0" width="205"><a href="backoffice.php"><img src="1wingmyadmin.gif" border="0"></a></td>
<td>
<table width="800" border="0" cellpadding="0" cellspacing="0" bgcolor="f6ffff" align="center">
<tr>
<td valign="top" align="left">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="500" align="center">
<a href="javascript:show2()" class="function">Ajouter un invité</a> |
<a href="javascript:show3()" class="function">Effacer un invité</a> |
<a href="mdp.php" class="function">Voir la modification sur le site</a>
<a href="javascript:newWindow()" class="menu01">notice</a>
</td>
</tr>
</table>
<form id="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<table border="0" cellspacing="0" cellpadding="0" align="left" id="form1" style="visibility:hidden">
<tr>
<td align="right" width="34"> Nom </td>
<td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>
<td align="right"> Prénom </td>
<td><input name="prenom" type="text" class="textearea" id="prenom" size="15"><input class="input" type="submit" name="submit" value="Ok"> <span class="separ"> *Saisir la 1ère lettre du nom et prénom en majuscule ex : Bruce Lee </span></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
<tr>
<td valign="top">
<table border="0" cellspacing="0" cellpadding="0" align="left" id="form2" style="visibility:hidden">
<form name="form2" method="post" action="suppr.php">
<tr>
<td width="34" align="right"> Id </td>
<td>
<input name="id" type="text" class="textearea" id="id" size="3" maxlength="3">
<input type="image" src="suppr.gif" alt="suppression" name="submit2" value="Suppression">
<span class="separ"> *Saisir le n° de l'identité dans la liste à effacer</span>
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
<table bgcolor="#f6ffff" width="100%" align="center">
<tr>
<td>
<?php
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
//créer la requete et insertion
//requete et affiche
$requete="select id,nom,prenom from liste order by nom";
$envoi=mysql_query($requete);
// début de la boucle
$tablo = array();
while($tableau = mysql_fetch_array($envoi))
{
// on stocke nos données
$tablo[]=$tableau;
}
$nbcol=4; // nombre de colonnes
?>
<table bgcolor=#FFFFFF cellspacing=0 cellpadding=0 align=center border=1 bordercolor=#afc5cc rules=none>
<?php
for($i=0;$i<count($tablo);$i++)
{
if($i%$nbcol==0)
{
?>
<tr>
<?php
}
?>
<td class=bordureDroite><?php echo($tablo[$i]['id']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['prenom']); ?></td>
<td class=bordureDroite><?php echo($tablo[$i]['nom']); ?></td>
<?php
if($i%$nbcol==($nbcol-1) or $i==(count($tablo)-1))
{
?>
</tr>
<?php
}
}
?>
</table>
<?php
//fermeture de la connexion vers MySQL
mysql_close();
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
Posté : 01 août 2005, 17:21
par raptor
C'est un combat de tartines

Posté : 01 août 2005, 17:25
par m8sql
ok cyrano,
POur l'indentation, merci pour l'exemple, mais faut dire aussi que monindentation saute quand je poste ici.
Sinon comme un gros c**ard , j'avais changé le name de submit, dans
if (isset($_POST['submit']))
et non pas $_POST['envoi']
Cependant, j'ai une erreur undefined variable prenom à la ligne 54 :
$requete="insert into liste values('','". $prenom ."','". $nom ."')";
???
Posté : 01 août 2005, 17:27
par Cyrano
Mouais, et si j'ai remis le code, c'est parce que j'ai aussi modifié un détail, minime, mais important, je te laisse trouver

Posté : 01 août 2005, 17:36
par m8sql
<?php
// Récupération des données du formulaire
if (isset($_POST['submit']))
{
//connexion à la bdd
$connexion=mysql_connect("localhost","root","");
mysql_select_db("test",$connexion);
$nom=$_POST['nom'];
$prénom=$_POST['prenom'];
$requete="insert into liste values('','". $prenom ."','". $nom ."')";
/* ~~~~~~~~~~~ débuggage ~~~~~~~~~~ */
echo($requete);
mysql_query($requete);
}
?>
Non là je vois pas, il affiche la valeur de nom mais pas celle de prenom.
Non non ch'ais pas, cyrano.
Posté : 01 août 2005, 17:39
par Cyrano
Ha tiens donc, tu viens de découvrir les trois quart de la réponse à ton problème...

Posté : 01 août 2005, 17:41
par m8sql
llllllllooooooooooooooooooooooolllllllllll
le vieux é dans $prénom
tu me hack !!! c'est pas possible !!

Posté : 01 août 2005, 17:43
par Cyrano
même pas, suffit de lire le code : relis donc une de mes réponse plus haut à propos des caractères accentués. C'est un principe de base qu'avait bien tenté d'effacer Microsoft qui permet de nommer n'importe quoi n'importe comment, mais chez un hébergeur qui a un système UNIX/Linux, la musique ne se joue pas avec la même partition et les caractères spéciaux soint moins bien acceptés.
Posté : 01 août 2005, 18:05
par m8sql
Merci pour tout.
U're the best