insertion en base de données mysql

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 : insertion en base de données mysql

Re: insertion en base de données mysql

par rjuan » 24 nov. 2013, 16:32

Tout fonctionne si je rapatrie le code minichat_post.php dans la procédure "appelante".

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Mini-chat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <style type="text/css"> form { text-align:center; } </style> <body> <form action="minichat.php" method="post"> <p> <label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /><br /> <input type="submit" name="Envoyer" value="envoyer" /> </p> <?php include('db_connect.php'); $bdd= \Connection(); // insertion de la requète if (isset($_POST['Envoyer']) && isset($_POST['nom']) && isset($_POST['message'])){ echo \var_dump($_POST); $req=$bdd->prepare('INSERT INTO minichat (nom,message) VALUES (?,?)'); $req->execute(array($_POST['nom'],$_POST['message'])); } $reponse = $bdd->query('SELECT nom, message FROM minichat ORDER BY ID DESC LIMIT 0, 10'); while ($donnees = $reponse->fetch()) { echo '<p><strong>' . htmlspecialchars($donnees['nom']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); ?> </form> </body> </html>
C'est bien, mais c'est dommage que je n’ai pas pu savoir pourquoi le dernier code posté ne fonctionnait pas :(
Je vois bien que c'est donc un problème de relation entre les deux scripts... mais quoi :?:

Re: insertion en base de données mysql

par rjuan » 21 nov. 2013, 11:50

Hargh, désolé, mais j'ai déjà modifié le script en remplaçant exec par executecomme ci-dessous et cela ne fonctionne pas; l'erreur étant :
Fatal error: Call to a member function prepare() on a non-object in /Applications/XAMPP/xamppfiles/htdocs/eBookSDZero/chat/minichat_post.php on line 12.

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Mini-chat</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> </head> <style type="text/css"> form { text-align:center; } </style> <body> <form action="minichat_post.php" method="post"> <p> <label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br /> <label for="message">Message</label> : <input type="text" name="message" id="message" /><br /><br /> <input type="submit" name="Envoyer" value="envoyer" /> </p> <?php include('db_connect.php'); $bdd= \Connection(); $reponse = $bdd->query('SELECT nom, message FROM minichat ORDER BY ID DESC LIMIT 0, 10'); while ($donnees = $reponse->fetch()) { echo '<p><strong>' . htmlspecialchars($donnees['nom']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>'; } $reponse->closeCursor(); ?> </form> </body> </html>
Cela étant pour la page formulaire, et ci-dessous pour la méthode d'insertione:

Code : Tout sélectionner

<?php // insertion de la requète if (isset($_POST['Envoyer']) && isset($_POST['nom']) && isset($_POST['message'])){ echo \var_dump($_POST); $req=$bdd->prepare('INSERT INTO minichat (nom,message) VALUES (?,?)'); $req->execute(array($_POST['nom'],$_POST['message'])); } // // redirection vers le script appelant header('Location:minichat.php'); ?>
Voilà, je continue à bidouiller mais j'y suis toujours pas, sachant que la ligne echo \var_dump($_POST) affiche bien les données saisies sur le formulaire.

Re: insertion en base de données mysql

par moogli » 20 nov. 2013, 20:53

cela indique que ton formulaire fournit bien les infos que tu as besoin.

ensuite ce n'est pas la méthode exec qu'il te faut utiliser mais la méthode execute


@+

Re: insertion en base de données mysql

par rjuan » 20 nov. 2013, 17:34

... ce que j'attendais => ?

Re: insertion en base de données mysql

par rjuan » 20 nov. 2013, 17:33

var_dump($_POST) donne :

Code : Tout sélectionner

array 'nom' => string 'Jean' (length=4) 'message' => string 'Et moi ...' (length=10) 'Envoyer' => string 'envoyer' (length=7)

Re: insertion en base de données mysql

par xTG » 19 nov. 2013, 19:47

Au temps pour moi dans ce cas, n'ayant pas eu de retour sur mon premier message je pensais que tu l'avais mal interprété.

Que te donnes un var_dump($_POST); sur ta page de traitement ?
Enfin ta requête préparée est mal utilisée.
Tu ne peux nommer des attributs si tu ne les insères pas explicitement (cf :nom, :message, ...).
Donc soit tu utilises l'attribut passe partout qui est le point d'interrogation.
Soit tu nommes tes attributs dans le execute (et non exec au passage qui prend en paramètre une requête SQL) qui sera appelée à partir du retour de prepare.

http://us3.php.net/manual/fr/pdostatement.execute.php

Re: insertion en base de données mysql

par rjuan » 19 nov. 2013, 18:20

Je lis
Parce que $_POST['Envoyer'] n'existe pas.
Tu n'as pas d'attribut name à ton bouton.
.
J'ai attribué le paramètre "name" à mon bouton.
Quant à
Relis ma réponse. ;)
, je pense que tu fais allusion à ce paramètre, hmm?
Dans tous les cas, je n'arrive pas à comprendre, pour le moment.

Re: insertion en base de données mysql

par xTG » 19 nov. 2013, 17:02

Bah peut être parce qu'il existe ?
Relis ma réponse. ;)

Petit indice je ne parle pas le franglais...

Re: insertion en base de données mysql

par rjuan » 19 nov. 2013, 17:00

Désolé, je n'arrive pas à comprendre pourquoi $_POST['nom'] n'existe pas :-(

Re: insertion en base de données mysql

par xTG » 19 nov. 2013, 14:12

Parce que $_POST['Envoyer'] n'existe pas.
Tu n'as pas d'attribut name à ton bouton.

insertion en base de données mysql

par rjuan » 19 nov. 2013, 14:02

bonjour,
Je ne comprends pas pourquoi je ne peux insérer une nouvelle entrée dans ma base avec ces deux pages :
La première appelant la seconde.
Page "minichat.php" :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Mini-chat</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <style type="text/css">
    form
    {
        text-align:center;
    }
    </style>
    <body>
    
    <form action="minichat_post.php" method="post">
        <p>
        <label for="nom">Nom</label> : <input type="text" name="nom" id="nom" /><br />
        <label for="message">Message</label> :  <input type="text" name="message" id="message" /><br /><br />
        <input type="submit" value="Envoyer" />
	</p>
   

<?php
include('db_connect.php');
$bdd=  \Connection();
$reponse = $bdd->query('SELECT nom, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');
while ($donnees = $reponse->fetch())
{
	echo '<p><strong>' . htmlspecialchars($donnees['nom']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
}
$reponse->closeCursor();
?>
 </form>
    </body>
</html>
et la seconde ("minichat_post.php") :
<?php

/**
 * Description:
 * insère le message reçu par $_POST
 * et redirige vers minichat.php
 */
//appelé par Mininchat après connection, on sait que $bdd est initialisé.
// insertion de la requète
if (isset($_POST['Envoyer']) && isset($_POST['nom']) && isset($_POST['message']))
    {
    $req=$bdd->prepare('INSERT INTO minichat (id,pseudo,message) VALUES (:id,:nom, :message)');
    $req=$bdd->exec(array(
                        '',
                        $_POST['nom'],
                        $_POST['message']
                    ));
}
// 
// redirection vers le script appelant
header('Location:minichat.php');
?>