traitement sur la m page

Invité
Invité n'ayant pas de compte PHPfrance

30 juil. 2005, 04:51

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 !

Mammouth du PHP | 19672 Messages

30 juil. 2005, 10:04

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 62 Messages

30 juil. 2005, 11:45

Merci bien Cyrano,
You're nice :D
Je suis chaud je brûle d'en savoir +

Eléphant du PHP | 62 Messages

01 août 2005, 16:00

:oops:
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">&nbsp;Nom&nbsp;
</td>											<td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>					 						 <td align="right">&nbsp;Pr&eacute;nom&nbsp;
</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">&nbsp;*Saisir la 1&egrave;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
Je suis chaud je brûle d'en savoir +

Mammouth du PHP | 19672 Messages

01 août 2005, 16:16

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">&nbsp;Nom&nbsp;</td>
      <td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>
      <td align="right">&nbsp;Prénom&nbsp;</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">&nbsp;*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();
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 62 Messages

01 août 2005, 16:53

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&eacute;</a>&nbsp;|&nbsp;
									  <a href="javascript:show3()" class="function">Effacer un invit&eacute;</a>&nbsp;|&nbsp;
									  <a href="mdp.php" class="function">Voir la modification sur le site</a>&nbsp;
									  <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">&nbsp;Nom&nbsp;</td> 
						  					<td><input name="nom" type="text" class="textearea" id="nom" size="15"></td> 
						 					<td align="right">&nbsp;Prénom&nbsp;</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">&nbsp;*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">&nbsp;Id&nbsp;</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">&nbsp;*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>
Je suis chaud je brûle d'en savoir +

Mammouth du PHP | 19672 Messages

01 août 2005, 17:08

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>&nbsp;|&nbsp;
                  <a href="javascript:show3()" class="function">Effacer un invité</a>&nbsp;|&nbsp;
                  <a href="mdp.php" class="function">Voir la modification sur le site</a>&nbsp;
                  <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">&nbsp;Nom&nbsp;</td>
                  <td><input name="nom" type="text" class="textearea" id="nom" size="15"></td>
                  <td align="right">&nbsp;Prénom&nbsp;</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">&nbsp;*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">&nbsp;Id&nbsp;</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">&nbsp;*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>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 543 Messages

01 août 2005, 17:21

C'est un combat de tartines :)

Eléphant du PHP | 62 Messages

01 août 2005, 17:25

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 ."')"; 
???
Modifié en dernier par m8sql le 01 août 2005, 17:28, modifié 1 fois.
Je suis chaud je brûle d'en savoir +

Mammouth du PHP | 19672 Messages

01 août 2005, 17:27

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 62 Messages

01 août 2005, 17:36

<?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.
Je suis chaud je brûle d'en savoir +

Mammouth du PHP | 19672 Messages

01 août 2005, 17:39

Ha tiens donc, tu viens de découvrir les trois quart de la réponse à ton problème... ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 62 Messages

01 août 2005, 17:41

llllllllooooooooooooooooooooooolllllllllll
le vieux é dans $prénom
tu me hack !!! c'est pas possible !!
;)
Je suis chaud je brûle d'en savoir +

Mammouth du PHP | 19672 Messages

01 août 2005, 17:43

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 62 Messages

01 août 2005, 18:05

Merci pour tout.
U're the best
Je suis chaud je brûle d'en savoir +