Code de modification mysql infonctionnel

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 : Code de modification mysql infonctionnel

Re: Code de modification mysql infonctionnel

par moogli » 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 ;)

@+

Re: Code de modification mysql infonctionnel

par maxime360 » 02 févr. 2012, 18:50

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

Re: Code de modification mysql infonctionnel

par moogli » 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 !


@+

Re: Code de modification mysql infonctionnel

par maxime360 » 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 !

Re: Code de modification mysql infonctionnel

par xTG » 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().

Re: Code de modification mysql infonctionnel

par maxime360 » 07 janv. 2012, 14:25

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

Re: Code de modification mysql infonctionnel

par Berzemus » 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().

Re: Code de modification mysql infonctionnel

par xTG » 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.";
}

Code de modification mysql infonctionnel

par maxime360 » 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