Problème d'ajout et de retrait de points

Eléphanteau du PHP | 41 Messages

17 juil. 2008, 17:40

et oui encore moi désoler hein^^

Donc voilà ma page d'échange de points:
<?php 
session_start();
if(isset($_POST["trade"])) 
{
header('Location: '.$_POST["trade"]); 
}
	?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Boutique <?php echo $nom_serveur  ?></title>
<style type="text/css">
<!--
.Style1 {
	color: #000000;
	font-size: 14px;
	font-weight: bold;
}
.Style2 {
	color: #00CCFF;
	font-weight: bold;
}
-->
</style>
</head>

<body>
<body onselectstart="return false" oncontextmenu="return false" ondragstart="return false" onMouseOver="window.status='&copy;<?php echo $nom_serveur  ?>; return true;" >  
<?php
echo '<form method=\"post\" action=\"boutique3.php\">';
	$nb_points = $_SESSION['points'];
	if($_GET['transfert_points'] == 1)
		{
        $id_compte = $_SESSION['id_compte'];
		$points_debut = $_SESSION['points'];
/*-----------------------------------------------------------*/

{
	
}
/*-----------------------------------------------------------*/		

						$points_fin = $points_debut - $nb_points;
						$points_fin = ceil($points_fin);
												
						mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
						$argent = mysql_query("UPDATE accounts SET points='$points_fin' WHERE acct='".$_SESSION['id_compte']."'");
						
						$points_fin1 = $points_debut1 + $nb_points;
						$points_fin1 = ceil($points_fin1);
						mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
						$verif = mysql_query("SELECT login FROM accounts WHERE login='".$compte_arrive."'") or die ("Le compte n'existe pas!");
						$row_verif = mysql_fetch_assoc($verif);


						$points_fin1 = $points_debut1 + $nb_points;
						$points_fin1 = ceil($points_fin1);
						mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
						$argent1 = mysql_query("UPDATE accounts SET points='$points_fin1' WHERE login='".$compte_arrive."'");
						
						$ajout = mysql_query($requete);

					echo'Le don de points c\'est bien passé!<meta http-equiv="refresh" content="1;URL=boutique2.php">';
					}

echo'<div id="contenu"><table align="center" width="100%" border="1" cellspacing="1" cellpadding="2"><tr>
  <td align="center" class="texte2"><hr style="color:#FFFFFF" />
  <span class="titre"><strong>DONNER DES POINTS A UN AMIS </strong></span><hr style="color:#FFFFFF" />';

echo'<table width="90%" border="1" cellpadding="2" cellspacing="0">';
echo'<tr>';
echo'<td align="center" class="texte2"><strong>Nom du Compte du Destinataire</strong></td>';
echo'<td align="center" class="texte2"><strong>Nombre de points &agrave; donner</strong></td>';
echo'</tr>';
echo'<tr>';
echo'<td align="center" class="texte2"><input type="text" size="22" name="compte_arrive" value="'.$compte_arrive.'" /></td>';
echo'<form action="" method="post">';

echo'<td align="center"><select name="points">';
for($i=1;$i<= $nb_points;$i++) {

echo'<option value="<?php echo $i;?>">Echanger '.$i.' point(s)</option>';

    }

echo'</select></td>';

echo'</tr>
  <tr>
    <td height="25" colspan="2" align="center" class="texte2"><strong>ATTENTION:</strong> Tout DON de points &agrave; un autre compte est irr&eacute;versible. </td>
  </tr>';  
echo'<tr>
    <td height="25" colspan="2" align="center"><input type="hidden" name="gm" value="go" />';

if ($nb_points == 0)
{echo'<input type="submit" value="Envoyer" DISABLED/>';};
if ($nb_points >= 1)
{echo'<a href="boutique3.php?id='.$_GET['id'].'
 &cat=7&transfert_points=1"><input type="submit" value="Envoyer"/></a></form>';};
echo '</td></table>';
// Fin de la partie de sélection des points
?>
Se qui se passe c'est que cela ne vérifie pas si le compte vers lequel on souhaite envoyer les points existe, il retire tous les points du compte >.< et il ne les ajoute pas au compte de destination...

Un petit coup de pouce ne serais pas de refus!

Mammouth du PHP | 1353 Messages

17 juil. 2008, 17:48

Ton code n'est pas cohérent.

Tu déclares un formulaire en method=post sans mettre d'action et après tu fais un
<a href="boutique3.php?id='.$_GET['id'].' 
 &cat=7&transfert_points=1"><input type="submit" value="Envoyer"/></a>
c'est à dire un lien autour du submit (qui ne peut rien soumettre de toutes facons car action est vide...

donc en gros tu ne récupères pas les valeurs du formulaire... Fais un tour dans les tutoriaux de php france notamment celui des formulaires pour voir comment ca fonctionne.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 41 Messages

18 juil. 2008, 16:08

Up j'ai toujours le même problème de vérification du compte de destination:
Mon code php:
<?php 
session_start();

foreach ($_POST as $key => $value) $$key = addslashes($value);
foreach ($_GET as $key => $value) $$key = addslashes($value);

if(isset($_POST["trade"])) 
{
header('Location: '.$_POST["trade"]); 
}
    ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Boutique <?php echo $nom_serveur  ?></title>
<style type="text/css">
<!--
.Style1 {
    color: #000000;
    font-size: 14px;
    font-weight: bold;
}
.Style2 {
    color: #00CCFF;
    font-weight: bold;
}
-->
</style>
</head>

<body>
<body onselectstart="return false" oncontextmenu="return false" ondragstart="return false" onMouseOver="window.status='&copy;<?php echo $nom_serveur  ?>; return true;" >  
<?php		
echo '<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">';
    $nb_points = $_SESSION['points'];
echo'<div id="contenu"><table align="center" width="100%" border="1" cellspacing="1" cellpadding="2"><tr>
  <td align="center" class="texte2"><hr style="color:#FFFFFF" />
  <span class="titre"><strong>DONNER DES POINTS A UN AMIS </strong></span><hr style="color:#FFFFFF" />';
    if($_GET['transfert_points'] == 1)
        {
        $id_compte = $_SESSION['id_compte'];
        $points_debut = $_SESSION['points'];
		echo '<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">';
}							
if(isset($_POST['compte_arrive']))
{
	$compte_arrive = htmlspecialchars($_POST['compte_arrive'], ENT_QUOTES); // mise en variable du nom de compte de destination
	mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
	$res = mysql_query("SELECT COUNT(*) FROM accounts WHERE login = '$compte_arrive'");
	if(mysql_num_rows($res) > 0)
{
	echo"Le compte <b>$compte_arrive</b> a en re&ccedil;us votre don de <b>$points_don</b> points<meta http-equiv='refresh' content='2;URL=boutique2.php'>";
	}else{
	echo 'Erreur<br />';
	echo "Le compte <b>$compte_arrive</b> n'existe pas!";
	}
                        $points_fin = $points_debut - $points_don;
                        $points_fin = ceil($points_fin);
                                                
                        mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
                        $argent = mysql_query("UPDATE accounts SET points='$points_fin' WHERE acct='".$_SESSION['id_compte']."'");
                        
                        $points_fin1 = $points_debut1 + $points_don;
                        $points_fin1 = ceil($points_fin1);

                        mysql_select_db($logon,$connexion)or die("connexion à la base impossible");
                        $argent = mysql_query("UPDATE accounts SET points='$points_fin1' WHERE login='".$compte_arrive."'");
                        
                        $ajout = mysql_query($requete);    
						
	}				
echo'<table width="90%" border="1" cellpadding="2" cellspacing="0">';
echo'<tr>';
echo'<td align="center" class="texte2"><strong>Nom du Compte du Destinataire</strong></td>';
echo'<td align="center" class="texte2"><strong>Nombre de points &agrave; donner</strong></td>';
echo'</tr>';
echo'<tr>';
echo'<td align="center" class="texte2"><input type="text" size="22" name="compte_arrive"/></td>';
echo'<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">';

echo'<td align="center"><select name="points_don">';
if($nb_points == 0)
{echo'<option value="'.$i.'">Vous ne disposez d\'aucun point</option>';};
if($nb_points >= 1)
{{for($i=1;$i<= $nb_points;$i++) 
{echo'<option value="'.$i.'">Echanger '.$i.' point(s)</option>';};}};

echo'</select></td>';

echo'</tr>
  <tr>
    <td height="25" colspan="2" align="center" class="texte2"><strong>ATTENTION:</strong> Tout DON de points &agrave; un autre compte est irr&eacute;versible. </td>
  </tr>';  
echo'<tr>
    <td height="25" colspan="2" align="center"><input type="hidden" name="gm" value="go" />';

if ($nb_points == 0)
{echo'<input type="submit" value="Envoyer" DISABLED/>';};
if ($nb_points >= 1)
{echo'<a href="#"><input type="submit" value="Envoyer"/></a></form>';};
echo '</td></table>';																
// Fin de la partie de sélection des points
?> 
Merci de m'aider :'(

Mammouth du PHP | 1353 Messages

18 juil. 2008, 16:32

Encore pas mal de problèmes dans ce code

Déjà tu déclares deux fois le formulaire :
echo '<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">'; 
         //... 
    if($_GET['transfert_points'] == 1) 
        { 
      //...
        echo '<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">'; 
Ensuite il ne faut pas mélanger les GET et les POST comme je l'ai dit plus haut. Si tu veux, tu peux inclure des valeurs (comme ton id) dans un champ caché du formulaire
<input name="id" type="hidden" value="<?php echo $_GET['id'];?>"/>
Et ensuite dans ta page de traitement tu pourras récupérer ta valeur avec un simple
<?php $id = $_POST["id"];?>
Essaye peut etre de ta familiariser avec les formulaires et la récupération des valeurs puis ensuite passe à l'étape insertion en base...

Aussi pour que le code soit nettement plus clair tu pourras ne mettre du php que quand c'est nécessaire :

Exemple au lieu d'écrire :
echo'<table width="90%" border="1" cellpadding="2" cellspacing="0">'; 
echo'<tr>'; 
echo'<td align="center" class="texte2"><strong>Nom du Compte du Destinataire</strong></td>'; 
echo'<td align="center" class="texte2"><strong>Nombre de points &agrave; donner</strong></td>'; 
echo'</tr>'; 
echo'<tr>'; 
echo'<td align="center" class="texte2"><input type="text" size="22" name="compte_arrive"/></td>'; 
echo'<form method="post" action="boutique3.php?id='.$_GET['id'].'&cat=7&transfert_points=1">';


on écrit :
<table width="90%" border="1" cellpadding="2" cellspacing="0">
<tr>
<td align="center" class="texte2"><strong>Nom du Compte du Destinataire</strong></td>
<td align="center" class="texte2"><strong>Nombre de points &agrave; donner</strong></td>
</tr>
<tr>
<td align="center" class="texte2"><input type="text" size="22" name="compte_arrive"/></td>
<form method="post" action="boutique3.php?id=<?php echo $_GET['id'];?>&cat=7&transfert_points=1"> 
C'est plus simple à lire et à maintenir à mon sens...
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 41 Messages

18 juil. 2008, 17:31

je sais j'ai bidouiller par ci par là pour le moment c'est un 'croquis'.
Je voudrais juste une réponse pour la vérification du compte de destination...
Mais je prend tes remarques en compte

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 juil. 2008, 20:16

Tu mélanges le résultat de la requête et le nombre d'enregistrements qu'elle retourne.

Un SELECT COUNT(*) retournera toujours un résultat, celui-ci pouvant être égal à 0.

Il te faut donc non pas compter le nombre de résultat avec mysql_num_rows(), mais récupérer la valeur retournée avec mysql_fetch_row() et la tester :
$res = mysql_query("SELECT COUNT(*) FROM accounts WHERE login = '".$compte_arrive."'"); 
$row = mysql_fetch_row($res); // il y a toujours un resultat
if ($row[0] > 0) { // au moins un résultat trouvé
  ...
}
Avec un fetch_assoc et un alias dans la requête :
$res = mysql_query("SELECT COUNT(*) AS nb FROM accounts WHERE login = '".$compte_arrive."'"); 
$row = mysql_fetch_assoc($res);
if ($row['nb'] > 0) { // au moins un résultat trouvé
  ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 41 Messages

18 juil. 2008, 20:50

Sa fonctionne!!

Merci a vous, Ô grand bonhomme vert a tête d'oiseau!(Horus version vert?)