Problème d'ajout et de retrait de points

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 : Problème d'ajout et de retrait de points

par DrEAM's » 18 juil. 2008, 20:50

Sa fonctionne!!

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

par Ryle » 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é
  ...
}

par DrEAM's » 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

par guilt92 » 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...

par DrEAM's » 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 :'(

par guilt92 » 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.

Problème d'ajout et de retrait de points

par DrEAM's » 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!