Méthode POST

Mammouth du PHP | 19672 Messages

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

Eléphanteau du PHP | 21 Messages

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

Mammouth du PHP | 19672 Messages

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

Eléphanteau du PHP | 21 Messages

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/

Mammouth du PHP | 19672 Messages

24 juin 2007, 20:57

IL ne devrait pas y avoir de "/" à la fin de l'url de la page de départ...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

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?

Mammouth du PHP | 19672 Messages

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

Eléphanteau du PHP | 21 Messages

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.