Méthode POST

Eléphanteau du PHP | 21 Messages

22 juin 2007, 20:27

Bonsoir,

Je rencontre un petit soucis au niveau de la commande post.
J'ai premièrement créé choix_personnage.html
<form action="gold.php" method='post'>
<table align="center" border="0">
  <tr>


<TD>Votre choix:</TD>
	<TD>
	<SELECT name="fonction">
		<OPTION VALUE="gold50">50 pièces d'or</OPTION>
                <OPTION VALUE="gold110">110 pièces d'or</OPTION>
                <OPTION VALUE="gold200">200 pièces d'or</OPTION>
                <OPTION VALUE="gold500">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>
Puis j'ai fait comme je l'ai indiqué dans le script gold.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 gold from characters where characters='".$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 +VALEUR DE choix_personnage where characters='".$characters."'"; 

mysql_query($sql); 
// la variable de session nom est enregistrée 
echo 'FELICITATION le personnage ' .$characters; 
echo ' a recu VALEUR DE choix_personnage pieces d\'or '; 

?>
Voilou alors ou je bloque c'est dans la commande uptdate (là où j'ai écrit "VALEUR DE choix_personnage "), je ne sais pas quoi écrire.

Sinon je ne suis pas certain que mes codes soient excellent, à mon avis il y a des fautes mais je commence à mieux comprendre le php grace à vous tous :wink:
Modifié en dernier par Morph le 22 juin 2007, 20:54, modifié 1 fois.

Mammouth du PHP | 19672 Messages

22 juin 2007, 20:38

Lorsque tu envoies un formulaire via la méthode POST, les valeurs saisies dans le formulaire sont stockées dans une super-globale $_POST.

Donc le choix effectué dans la liste déroulante que tu montre est dans $_POST['fonction'] où "fonction" est la valeur de l'attribut name de ta balise SELECT.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

22 juin 2007, 20:58

Donc, si j'ai bien compris cela donne ça:
<?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 gold from characters where characters='".$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 characters='".$characters."'"; 

mysql_query($sql); 
// la variable de session nom est enregistrée 
echo 'FELICITATION le personnage ' .$characters; 
echo ' a recu $_POST['fonction'] pieces d\'or '; 

?>
Mais j'ai un message d'erreur...

Mammouth du PHP | 19672 Messages

22 juin 2007, 21:02

...Mais j'ai un message d'erreur...
SI tu n'en donne pas la teneur, on ne devinera pas

Mais en fin de compte, c'est logique : tu essayes d'additionner un entier et une chaine de caractères.
Si tu fais "100 + 50gold", ça ne peut qu'occasionner une erreur. Donc il faut modifier en amont pour ne recevoir que "50" et pas "50gold"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

22 juin 2007, 22:17

[EDIT] Il y a apparament un problème de syntaxe ici (Je ne sais pas comment la corriger):
$sql = "Update characters Set gold = gold + $_POST['fonction']  where name='".$characters."'";  


Merci beaucoup :)
Désolé pour le vague de ma phrase "j'ai un message d'erreur" j'ai du poster très rapidement avant de m'absenter...

Je n'ai plus de message d'erreur mais aucune valeur ne s'ajoute dans ma table...

Je suppose que cela est du:
soit à un probleme de syntaxe
soit à ce que je vais vous montrer... (ou les 2)

En fait, j'appelle le fichier html dans une page avec la fonction include:
<?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 d\'epk';
} 
elseif($piece>=10 && $piece<20)
{
include('choix_personnage.html');
}
elseif($piece>=20 && $piece<30)
{
include('choix_personnage2.html');
}
elseif($piece>=30& $piece<80)
{
include('choix_personnage3.html');
}
elseif($piece>=80& $piece<150)
{
include('choix_personnage4.html');
}

?>
Pour résumé, j'appelle le fichier html en fonction du nombre de pièce que dispose l'utilisateur mais nous n'y pretterons pas intentention dans la mesure où lorsqu'avec choix_personnage.html le script fonctionnera, j'arriverai à l'adapter avec tous les autres.

Le soucis est que mon url deviens (après avoir cliqué sur ok du fichier html -type="submit" value="ok"- ) blablabla/epika2.php/gold.php

L'erreur vient peut etre de là...

Mammouth du PHP | 19672 Messages

23 juin 2007, 01:00

le problème à la base se situe dans ton code HTML, pas dans le PHP. Plus précisément dans tes balises <option> Réfléchis trente secondes : tu reçois quoi comme valeur ? Où est inscrite cette valeur dans la balise ? Comment corriger ça ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

23 juin 2007, 20:36

oula désolé, j'avais oublié de préciser que j'avais corrigé ce problème avant de poster mon dernier message...
 <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> 
Donc mon précédent poste est toujours valable...
Encore dsl :oops:

Mammouth du PHP | 19672 Messages

23 juin 2007, 21:28

et si tu fais afficher ta requête, ça ressemble à quoi ? (echo($sql);)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 21 Messages

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."'"; 

Mammouth du PHP | 19672 Messages

24 juin 2007, 00:35

Et avec une concaténation propre ?
$sql = "Update characters Set gold = gold + ". $_POST['fonction'] ." where name='".$characters."'"; 
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, 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!
Modifié en dernier par Morph le 24 juin 2007, 11:14, modifié 2 fois.

Mammouth du PHP | 19672 Messages

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 ............
}
?>
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, 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...

Mammouth du PHP | 19672 Messages

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>
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, 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.