Méthode POST

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Méthode POST

par Morph » 25 juin 2007, 09:32

OOOOOOOuuuuuuuiiiiiiiiiii hoo ooooooouuuuuuiiiii

Un grand merci, ça aura mis du temps mais grace à toi j'y suis arrivé. Cela fait vraiment plaisir. :D

Merci merci merci.

par Cyrano » 24 juin 2007, 21:48

Un bout de code n'arrive pas par génération spontanée. Il y a un lien qui mène vers ce formulaire qui comporte de "/" : il faut le trouver pour virer ce truc. Et ça confirme de toutes façons que comme le nom de la page est interprété comme un répertoire, si tu mettais "../gold.php" dans l'action du formulaire, ça devrait fonctionner, mais ce ne serait pas une correction très propre.

par Morph » 24 juin 2007, 21:08

En effet, quand je regarde mes autres page il n'y a pas de "/" mais là il y en a!

Donc le problème est dut à ça. Comment faire?

par Cyrano » 24 juin 2007, 20:57

IL ne devrait pas y avoir de "/" à la fin de l'url de la page de départ...

par Morph » 24 juin 2007, 19:26

Mon formulaire doit pointer vers une nouvelle page.

Je réexplique en détail:

L'utilisateur arrive en premier lieu sur emp2.php
<?php
session_start();

// on se connecte à MySQL 
$db = mysql_connect('localhost', 'Morph', '*******'); 
 // on sélectionne la base 
mysql_select_db('my_db',$db);
$sql = "select piece from accounts where login='". $_SESSION['login'] ."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
$piece = $data['piece'];

if($piece==0) 
{ 
echo 'Vous n\'avez pas de piece';
} 
elseif($piece>=10 && $piece<20)
{
include('choix_personnage.php');
}
elseif($piece>=20 && $piece<30)
{
include('choix_personnage2.php');
}
elseif($piece>=30& $piece<80)
{
include('choix_personnage3.php');
}
elseif($piece>=80& $piece<150)
{
include('choix_personnage4.php');
}

?>
emp.php appelle (avec include) le formulaire choix_personnage.php :
<form action="gold.php" method='post'>
<table align="center" border="0">
  <tr>


<TD>Votre choix:</TD>
	<TD>
	<SELECT name="fonction">
		<OPTION VALUE="50">50 pièces d'or</OPTION>
                <OPTION VALUE="110">110 pièces d'or</OPTION>
                <OPTION VALUE="200">200 pièces d'or</OPTION>
                <OPTION VALUE="500">500 pièces d'or</OPTION>
	</SELECT>
	</TD>
Personnage : <input type="text" name="characters" size="12">
<tr>
    <td colspan="2" align="center"><input type="submit" value="ok"></td>
  </tr>
</table>
</form> 
Jusqu'ici l'utilisateur voit sur son écran le formulaire
Et lorsqu'il clique sur ok, normalement, et je dis bien normalement il est dirigé vers la page gold.php :
<?php 
session_start(); 
/* Récupération des données envoyées */ 
$montant = isset($_POST['fonction']) ? $_POST['fonction'] : 0; 
$nom = isset($_POST['characters']) ? $_POST['characters'] : ""; 
/* Si les valeurs sont valides... */ 
if($montant > 0 && !empty($nom)) 
{ 
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'Morph', '*********'); 
// on sélectionne la base 
mysql_select_db('my_db',$db); 
// Définition de la requête SQL 
$sql = "UPDATE characters SET gold = gold + ". $montant ." WHERE name='". $nom ."'"; 
/* Affichage de débuggage */ 
echo("<pre>\n"); 
var_dump($sql); 
echo("</pre>\n"); 
/* Fin de débuggage */ 

mysql_query($sql) or die("Erreur d'exécution. MySQL a retourné l'erreur ". mysql_error()); 

// la variable de session nom est enregistrée 
echo '<br>FELICITATION le personnage ' .$nom; 
echo '<br>a recu son or '; 
} 
else 
{ 
echo 'dsl erreur;
} 
?> 
Et l'utilisateur doit normalement voir à l'écran "FELICITATION le personnage x a recu son or" ou "désolé erreur". Or, nous ne voyons rien de cela à l'écran et après avoir cliqué sur ok, c'est le formulaire qui nous reste sous les yeux. Une seule chose change, c'est l'url qui passe de http://localhost/.../emp2.php/ à http://localhost/.../emp2.php/gold.php/

par Cyrano » 24 juin 2007, 15:46

J'ai un peu de mal à visualiser : ton formulaire recharge la page elle-même ou doit pointer vers une autre page ?

Si c'est la même page, dans ton attribut action, remplace le nom :
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">

par Morph » 24 juin 2007, 15:16

Et bien non tout est dans le même répertoire...
C'est la que je ne comprend plus pourquoi cela ne fonctionne pas! :s

par Cyrano » 24 juin 2007, 14:33

Donc on est si je comprend bien pas dans le bon répertoire au moment du rechargement et il faudrait remonter d'un cran : dans ce cas, il faudrait mettre action="../gold.html", le "../" pointant vers le répertoire parent

par Morph » 24 juin 2007, 14:25

Soit je n'ai pas compris soit tu n'as pas (du à mes supers explications :roll: )

La page où il y a le include se nomme emp2 (url: http://localhost/.../emp2.php/gold.php )
on include choix_personnage.php (le formulaire)

à ce moment l'url est toujours http://localhost/.../emp2.php/

puis on clique sur le bouton ok pour poster et l'url devient
http://localhost/.../emp2.php/gold.php/ au lieu de http://localhost/.../gold.php/

et je pense que c'est certainement à cause de cela que la page gold.php n'est pas pris en compte.

par Cyrano » 24 juin 2007, 14:10

Dans les deux cas, la page s'appelle gold.php : comme tu n'as pas spécifié d'autre répertoire, la page se recharge sur elle-même. Si elle doit pointer ailleurs, alors modifie le chemin dans l'attribut action de ta balise <form>

par Morph » 24 juin 2007, 11:26

Hmmm! oui je comprend mieux ta façon de coder.
C'est carrément mieux que ce que j'avais fait!

Bon sinon pas d'erreurs mais toujours ce problème après avoir cliqué sur le ok du formulaire
http://localhost/.../emp2.php/gold.php
au lieu de devenir http://localhost/.../gold.php

Ce qui fait que la page emp2 (AFFICHAGE DU FORMULAIRE ) reste et que la page gold.php n'est pas prise en compte...

par Cyrano » 24 juin 2007, 10:54

Mouais, comme tu dis, des erreurs de débutant. Mais bon, on est tous passé par là.

Tu ne récupères pas convenablement les données du formulaire et tu ne valides pas ces données non plus. Voici ton code d'ajout remanié. Tu noteras que la partie "SELECT" a disparu : le résultat n'est jamais utilisé et est en fin de compte parfaitement inutile.
<?php
session_start();
/* Récupération des données envoyées */
$montant = isset($_POST['fonction'])   ? $_POST['fonction']   : 0;
$nom     = isset($_POST['characters']) ? $_POST['characters'] : "";
/* Si les valeurs sont valides... */
if($montant > 0 && !empty($nom))
{
    // on se connecte à MySQL 
    $db = mysql_connect('localhost', 'Demonyak', '*********'); 
    // on sélectionne la base 
    mysql_select_db('antrix',$db);
    // Définition de la requête SQL    
    $sql = "UPDATE characters SET gold = gold + ". $montant ." WHERE name='". $nom ."'"; 
    /* Affichage de débuggage */    
    echo("<pre>\n");
    var_dump($sql);
    echo("</pre>\n");
    /* Fin de débuggage */
    
    mysql_query($sql) or die("Erreur d'exécution. MySQL a retourné l'erreur ". mysql_error()); 
    
    // la variable de session nom est enregistrée 
    echo '<br>FELICITATION le personnage ' .$nom; 
}
else
{
    // Les valeur envoyées sont invalides :
    // Le montant est à zéro et le nom de personnage est absent
    // On définit un autre message ............
}
?>

par Morph » 24 juin 2007, 10:35

Plus d'erreur avec une concaténation propre :)

mais il y a un problème la requete affiche:
Update characters Set gold = gold + where name=''

il n'y a donc pas de name

Le soucis est très certainement du à mon url:
http://localhost/.../emp2.php/gold.php

Je vous renvois d'affilé mes 3 codes pour que ce ne soit pas le mélange complet

AFFICHAGE DU FORMULAIRE
<?php
session_start();

// on se connecte à MySQL 
$db = mysql_connect('localhost', 'Morph', '********'); 
 // on sélectionne la base 
mysql_select_db('my_db',$db);
$sql = "select piece from accounts where login='". $_SESSION['login'] ."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
$piece = $data['piece'];

if($piece==0) 
{ 
echo 'Vous n\'avez pas de piece';
} 
elseif($piece>=10 && $epk<20)
{
include('choix_personnage.php');
}
elseif($piece>=20 && $piece<30)
{
include('choix_personnage2.php');
}
elseif($piece>=30& $piece<80)
{
include('choix_personnage3.php');
}
elseif($piece>=80& $piece<150)
{
include('choix_personnage4.php');
}
exit;
?>
LE FORMULAIRE
<form action="gold.php" method='post'>
<table align="center" border="0">
  <tr>


<TD>Votre choix:</TD>
	<TD>
	<SELECT name="fonction">
		<OPTION VALUE="50">50 pièces d'or</OPTION>
                <OPTION VALUE="110">110 pièces d'or</OPTION>
                <OPTION VALUE="200">200 pièces d'or</OPTION>
	</SELECT>
	</TD>
Personnage : <input type="text" name="characters" size="12">
<tr>
    <td colspan="2" align="center"><input type="submit" value="ok"></td>
  </tr>
LE RAJOUT D'OR
<?php

session_start();

// on se connecte à MySQL 
$db = mysql_connect('localhost', 'Morph', '***********'); 
 // on sélectionne la base 
mysql_select_db('antrix',$db);
$sql = "select gold from characters where name='".$characters."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
$gold = $data['gold'];

$sql = "Update characters Set gold = gold + ". $_POST['fonction'] ." where name='".$characters."'"; 

echo($sql);

mysql_query($sql); 

// la variable de session nom est enregistrée 
echo '<br>FELICITATION le personnage ' .$characters; 
 

?>
A tout les coups, il sagit d'une erreur de débutant :oops: J'apprends et même beaucoup grace à l'aide de tous. Merci dans tous le cas au temps que vous prenez à aider toute la grande communauté du forum!

par Cyrano » 24 juin 2007, 00:35

Et avec une concaténation propre ?
$sql = "Update characters Set gold = gold + ". $_POST['fonction'] ." where name='".$characters."'"; 

par Morph » 23 juin 2007, 22:08

Quand j'arrive sur .../epika2.php/gold.php rien ne s'affiche
et lorsque je supprime .../epika2.php/ pour que l'url ne devienne que .../gold.php
(ce qui serait plus normal, je ne comprend pas pourquoi mon url prends cette forme :s )

j'ai un message d'erreur:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\wamp\www\authentification_redirections\gold.php on line 15

ligne 15 =
$sql = "Update characters Set gold = gold + $_POST['fonction']  where name='".$characters."'";