Page 1 sur 1
Superglobale.
Posté : 18 févr. 2015, 19:43
par Max2000
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.
Re: Superglobale.
Posté : 18 févr. 2015, 19:45
par tof73
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.
Re: Superglobale.
Posté : 19 févr. 2015, 21:09
par Max2000
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.
Re: Superglobale.
Posté : 20 févr. 2015, 16:42
par xTG
$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);
Re: Superglobale.
Posté : 20 févr. 2015, 19:46
par Max2000
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.
Re: Superglobale.
Posté : 20 févr. 2015, 19:52
par tof73
affiche le contenu de $_SESSION['rep_bon']
tu verras si cela vaux 0 ou autre chose.
Re: Superglobale.
Posté : 20 févr. 2015, 22:44
par xTG
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.
Re: Superglobale.
Posté : 21 févr. 2015, 16:40
par Max2000
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:

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".
Re: Superglobale.
Posté : 21 févr. 2015, 16:43
par Max2000
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?
Re: Superglobale.
Posté : 21 févr. 2015, 16:52
par tof73
<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.
Re: Superglobale.
Posté : 22 févr. 2015, 09:23
par Max2000
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.
Re: Superglobale.
Posté : 23 févr. 2015, 20:12
par Max2000
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.