[RESOLU] Superglobale.

Eléphanteau du PHP | 39 Messages

18 févr. 2015, 19:43

Bonjour.
Et il possible d'insérer en base de donnée une S_SESSION['xxxxx'] ?
Si oui comment faire en PDO si possible?
Merci d'avance.

Mammouth du PHP | 688 Messages

18 févr. 2015, 19:45

c'est bien sur possible. c'est la même chose que de passer $variable ou S_SESSION['xxxxx'] comme valeur de paramètre, donc voir les exemples de pdo.

Eléphanteau du PHP | 39 Messages

19 févr. 2015, 21:09

Ce code fonctionne:
$stmt = $connection->prepare('INSERT INTO reponse (username) VALUES(:username)');
									$stmt->bindParam(':username', $username, PDO::PARAM_STR);
		$stmt->execute();
Mais pas celui là:
$stmt = $connection->prepare('INSERT INTO reponse (username,rep_bon) VALUES(:username, :$_SESSION['rep_bon'])');
									$stmt->bindParam(':username', $username, PDO::PARAM_STR);
									$stmt->bindParam(':rep-bon', .$_SESSION['rep_bon']., PDO::PARAM_int);
		$stmt->execute();
Ainsi l'erreur proviendrait de l'enregistrement de $_SESSION['rep_bon'] qui n'est pas inséré en base de données.
J'ai recherché une virgule mal placée, etc... durant des heures.
Mais sans succès car je suis encore débutant.
Alors pourriez vous me donner un petit coup de pouce en m'indiquant le code exact pour que celui ci fonctionne.En sachant que $_SESSION['rep_bon'] représente un nombre et non pas une chaîne de caractères si cela peut vous être utile.
Merci.

ViPHP
xTG
ViPHP | 7331 Messages

20 févr. 2015, 16:42

$stmt = $connection->prepare('INSERT INTO reponse (username,rep_bon) VALUES(:username, :rep_bon)');
serait mieux.
Pourquoi vouloir remplacer le tag par le nom de la variable ? Ce n'est absolument pas son rôle.

On peut tout à fait faire ceci :
$stmt = $connection->prepare('INSERT INTO table VALUES(:mon_tag)');
$stmt->bindParam(':mon_tag', $ma_variable, PDO::PARAM_STR);

Eléphanteau du PHP | 39 Messages

20 févr. 2015, 19:46

Merci.La modification semble efficace.
Car je ne possède plus de message d'erreur avec ce code:

Code : Tout sélectionner

$stmt = $connection->prepare('INSERT INTO reponse (username,rep_bon) VALUES(:username, :rep_bon)'); $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->bindParam(':rep-bon', $_SESSION['rep_bon'], PDO::PARAM_int); $stmt->execute();
Cependant le pseudo du champ username est bien présent dans la base.
Mais les points gagnés par ce pseudo restent à O dans le champ rep_bon.
A première vu je ne vois pas de où cela pourrait bien provenir.Car en principe le code serait bon n'est ce pas?

Maintenant je veux bien faire comme tu me dis.
Mais il faudrait que je comprenne ce qu'est le tag.
C'est quoi le tag d'abord?
A savoir aussi que je ne peux pas retourner le nom de la variable.
C'est pourquoi j'ai récupéré sa valeur par une cession.
Merci pour le coup de pouce.

Mammouth du PHP | 688 Messages

20 févr. 2015, 19:52

affiche le contenu de $_SESSION['rep_bon']
tu verras si cela vaux 0 ou autre chose.

ViPHP
xTG
ViPHP | 7331 Messages

20 févr. 2015, 22:44

Le tag dans ton cas c'est :rep_bon.
C'est ce que va utiliser PDO pour savoir où placer la valeur dans la requête.

Eléphanteau du PHP | 39 Messages

21 févr. 2015, 16:40

Je pense qu'en vous présentant l'ensemble de ces 2 fichiers et non pas des bouts de codes nous avancerons mieux.
Voici le code complet de la page:

Code : Tout sélectionner

<?php session_start(); if (isset($_POST['submit'])) { $username = htmlspecialchars(trim($_POST['username'])); include 'connexion.php'; $_SESSION['rep_bon']=5; echo "<br />"; echo $_SESSION['rep_bon']; $stmt = $connection->prepare('INSERT INTO reponse (username,rep_bon) VALUES(:username, :rep_bon)'); $stmt->bindParam(':username', $username, PDO::PARAM_STR); $stmt->bindParam(':rep-bon', $_SESSION['rep_bon'], PDO::PARAM_INT); $stmt->execute(); } echo "<h1> Quel est votre pseudo ?</h1><br />"; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" content="text/css" href="default.css"> </head> <body> <form method="post" action="fin.php" > <p> <input type="text" name="username" id="username" required /> <input type="submit" name="submit" value="Valider" /> </p> </form> </body> </html>
Voici le fichier "fin.php" :

Code : Tout sélectionner

<?php session_start(); echo $_SESSION['rep_bon']; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <link rel="stylesheet" content="text/css" href="default.css"> </head> <body> <p>Terminé</p> </form> </body> </html>
Et voici le résultat:
Image
Undefined index: rep_bon in C:\\wamp\.......\fin.php on line 3
Pas de nom ni de valeur numérique entrée en base de donnée.
Dans les champs "username" et "rep_bon" de la table "reponse".

Eléphanteau du PHP | 39 Messages

21 févr. 2015, 16:43

L'image est ici:
http://www.servimg.com/view/18532417/282
Car en plus la fonction code et Img pour présenter des messages ne semble plus fonctionner.
Ou c'est moi qui n'y est plus?

Mammouth du PHP | 688 Messages

21 févr. 2015, 16:52

<form method="post" action="fin.php" >
et comme ce n'est pas ton fichier fin.php qui teste si c'est une methode post et fait la requete sql, rien ne se passe.

Eléphanteau du PHP | 39 Messages

22 févr. 2015, 09:23

Il me semblait bien que j'avais fait une grosse co... bêtise.La fatigue sans doute en est à l'origine.
Je revois ma copie et en même temps je vais chercher la raison pour laquelle lorsque j'utilise désormais le bouton code pour présenter mes lignes de codes c'est du texte pur qui apparaît.
Je reviendrai dans plusieurs jours probablement.
D'ici là bonne continuation à tous.
ET merci encore.

Eléphanteau du PHP | 39 Messages

23 févr. 2015, 20:12

Ca y est ça fonctionne.
Ces codes là sont ok.
$stmt = $connection->prepare('INSERT INTO reponse (username,rep_bon) VALUES(:username, :rep_bon)');
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
                                                                        $stmt->bindParam(':rep-bon', $_SESSION['rep_bon'], PDO::PARAM_int);
                $stmt->execute();
Merci pour votre coup de main.
Résolu pour moi.