Code de modification mysql infonctionnel

Petit nouveau ! | 9 Messages

06 janv. 2012, 22:27

Bonjour, ce code est infonctionnel, pouvez-vous m'expliquer pourquoi ? il me semble que toute la syntaxe est correcte, étant vraiment débutant peut-être que vous considérerez que c'est la cata...
Le client devrait entrer son SteamID sur cette page HTML
7500.php
<html>
  <head>
  <noscript>
<meta http-equiv="refresh" content="0;url=http://script.starpass.fr/error_code2.php?idd=64465&idp=38034">
</noscript>
<script type="text/javascript" src="http://script.starpass.fr/error_code.php?idd=64465&idp=38034">
</script>
    <title>Indiquez votre SteamID</title> <!-- Titre de la pageounette ! -->
  </head>
<body>
<form name="steamid" action="validation7500.php" method="POST">
  <table border="0" align="center" cellspacing="2" cellpadding="2"> <!-- On choisis la "forme" du champ de saise -->
    <tr align="center">
      <td>SteamID</td> <!-- Texte apparent au champ de saisie ! -->
      <td><input type="text" name="steamid"></td> <!-- le "steamid" nous servira de valeur dans la page de validation -->
    </tr>
    <tr align="center">
      <td colspan="2"><input type="submit" value="valider"></td> <!-- On valide et envoyons -->
    </tr>
  </table>
</form>
</body>
</html>
Celui-ci devrais récupérer le SteamID du joueur et ajouter 15000 dans la colonne amount à son SteamID s'il est existant !
validation7500.php
<?php
try
{
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=sfrp', 'sfrp', '159753', $pdo_options); // Connexion à la BDD
	
	$steam = $bdd->prepare('SELECT steam FROM darkrp_wallets WHERE steam = ?'); // Requete pour recupere le steamid dans la table
	$steam->execute(array($_POST['steamid'])) or die("Votre steamID n'est pas répertorié, veuillez <a href='../index.php'>réessayer</a>");

	if(isset($_POST['steamid']) and $_POST['steamid'] == $steam) // On verifie si on a bien entrer le steam et qu'elle est bien presente dans la table 
	{
		$addcred = 7500;
		$amount = $bdd->execute('SELECT amount FROM darkrp_wallets WHERE steam = \'' . $steam . '\'');
		$amount->closeCursor();
		
		$amount = $amount + $addcred;
		$amount = $bdd->execute('UPDATE darkrp_wallets SET amount WHERE steam = \'' . $steam . '\'') 
		or die('Votre compte n\'a pas pu être crédité, veuillez reessayer ulterieurement.');
		
		echo('Votre compte a bien été crédité.<b>Votre steamId est \''.$steam.'\' et votre solde actuel est de: \''.$amount.'\'€.');
		
		$amount->closeCursor();
	}
	else
	{
		echo("Vous n'avez pas entré votre steamID, veuillez <a href='../index.php'>réessayer</a>.");
	}

	$steam->closeCursor();
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage()); // Renvoie une erreur si une requete/connexion a échoué
}
?>
Seulement l'erreur "Vous n'avez pas entré votre SteamID" intervient dans toutes conditions, SteamID valide ou non, champ rempli ou non !
Il y a-t-il un problème ? Les informations de ma base de données sont exactes !
Merci de votre aide !
Cordialement,
Alexis

ViPHP
xTG
ViPHP | 7331 Messages

06 janv. 2012, 22:36

$steam est un objet et non la valeur de ta colonne dans le SELECT, revois le fonctionnement de PDO. ;)
De plus ton traitement fait en fait une double vérification.

Tu devrais plutôt faire ainsi :
$steam = $bdd->prepare('SELECT steam FROM darkrp_wallets WHERE steam = ?'); // Requete pour vérifier l'existence du steamid
$steam->execute(array($_POST['steamid']));
if( $steam->rowCount() == 1 ){ // steamid correct car un n-uplet retourné
  // ton traitement
}else{
  echo "Votre steam ID est incorrect.";
}
Modifié en dernier par xTG le 06 janv. 2012, 22:36, modifié 1 fois.

ViPHP
ViPHP | 4039 Messages

06 janv. 2012, 22:36

infonctionnel ? C'est joli, c'est français ? :mrgreen:

Ceci dit, ta condition semble foireuse:
if ( isset( $_POST['steamid']) and $_POST['steamid'] == $steam)
Tu vois pourquoi ?

Indice: c'est pas le isset().
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 9 Messages

07 janv. 2012, 14:25

c'est == $steam non ? on ne peut pas rapporter la valeur steamid à une donnée sql ?

ViPHP
xTG
ViPHP | 7331 Messages

07 janv. 2012, 14:52

Non car le execute() prépare les résultats il ne te les renvoie pas.
Il faut utiliser une fonction telle que fetch() pour récupérer les résultats d'une requête après le execute().

Petit nouveau ! | 9 Messages

02 févr. 2012, 18:20

Bonjour ! Désolé pour le LONG LONG temps d'absence, premièrement je ne trouvais plus le forum utilisé et deuxièmement j'avais perdu les identifiants du forum et l'email que j'avais utilisé à été supprimée car j'ai changé d'opérateur !
Le code de validation est devenu ceci :
<?php
try
{
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=sfrp', 'sfrp', '159753', $pdo_options); // Connexion à la BDD
	
	$steamID = $_POST['steamid'];
	$steam = $bdd->query("SELECT steam FROM darkrp_wallets WHERE steam = '".$steamID."'") // Requete pour recupere le steamid dans la table
	or die("Votre steamID n'est pas répertorié, veuillez <a href='../index.php'>réessayer</a>");
	$steam = $steam->fetch();
	
	if(empty($steamID) AND $steamID != $steam) 
	{
		echo("Vous n'avez pas entré votre steamID, veuillez <a href='../index.php'>réessayer</a>.");
	}
	else
	{
		$addcred = 15000;
		$amount = $bdd->query("SELECT amount FROM darkrp_wallets WHERE steam = '".$steam."'");
		$amount = $amount->fetch();
		
		$amount2 = $amount + $addcred;
		$amount2 = $bdd->query("UPDATE darkrp_wallets SET amount = '".$amount."' WHERE steam = '".$steam."'") 
		or die('Votre compte n\'a pas pu être crédité, veuillez reessayer ulterieurement.');
		
		echo("Votre compte a bien été crédité.<br />Votre steamID est '".$steam."' et votre solde actuel est de: '".$amount2."'€.");
		
		$amount->closeCursor();
		$amount2->closeCursor();
	}

	$steam->closeCursor();
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage()); // Renvoie une erreur si une requete/connexion a échoué
}
?>
Seulement, une erreur

Code : Tout sélectionner

Catchable fatal error: Object of class PDOStatement could not be converted to string in /home/ah31795/web/boutique/dev/validation.php on line 26
Intervient !
Quelqu'un peux me proposer de l'aide ?
Merci énormément et encore désolé pour mon absence !

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

02 févr. 2012, 18:32

salut,

$steam (ligne 26) est un objet PDOStatement et celui ci n'a pas de méthode __tostring() ce qui fait qu'il ne peux pas s'afficher ainsi.

utilise la méthode "normale" pour récupérer l'info !


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 9 Messages

02 févr. 2012, 18:50

Une méthode normale ? Euh ?
il faut utiliser quoi comme vocabulaire finalement ?

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

02 févr. 2012, 20:21

http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html de quoi te "rafraichir" les idées sur l'utilisation de pdo ;)

@+
Il en faut peu pour être heureux ......