[RESOLU] Soucis insertion données formulaire dans base de données

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 : [RESOLU] Soucis insertion données formulaire dans base de données

Re: Soucis insertion données formulaire dans base de données

par Invité » 08 janv. 2014, 14:43

Merci, vous êtes tous très sympas!! :D

Re: Soucis insertion données formulaire dans base de données

par sirakawa » 08 janv. 2014, 12:55

Par contre, je souhaiterais savoir ce que Executive a voulu dire par faire un echo $req
Quand il y a un problème avec sql, une piste est de programmer ainsi:
$requete = "slect * from $ma_table were mon_id = '212'";
echo ($requete); // je préfère print "<br>$requete<br>";
ce qui permet de la copier pour la coller dans phpadmin ou directement en ligne de commande comme je fais avec mysql en ligne.

Re: Soucis insertion données formulaire dans base de données

par Invité » 08 janv. 2014, 11:15

Je me suis inscrit tout dernièrement sur le forum.
Je voudrais faire savoir qui m'a aidé à trouver la solution de mon problème.
Je cherche l'icône indiquée dans les notes explicatives du forum,
mais je ne la trouve pas.
Quelqu'un pourrait-il me donner plus d'indications là-dessus?

Re: Soucis insertion données formulaire dans base de données

par cid5420 » 07 janv. 2014, 17:09

Bien jouer à toi
bonne continuation

Re: Soucis insertion données formulaire dans base de données

par cid5420 » 07 janv. 2014, 17:08

Bien jouer à toi
bonne continuation

Re: Soucis insertion données formulaire dans base de données

par Invité » 07 janv. 2014, 13:55

:D Problème résolu: erreur venant d'une table My SQL.
Il faut en effet que la première ligne d'une table soit en AUTO_INCREMENT, ce qui se vérifie
en cliquant sur structure dans Phpmyadmin
C'est donc surtout cid5420 qui m'a mis sur la voie.
Je n'avais par contre pas compris qu'il suffisait de sélectionner la ligne de la requête, de la tester
dans phpmyadmin pour identifier tout d'abord s'il s'agit d'un problème avec sql ou php.

Merci aussi sirakawa pour les explications sur ? :wink:

Par contre, je souhaiterais savoir ce que Executive a voulu dire par faire un echo $req
pour voir si la requête est bien celle que j'ai prévu.
Le navigateur lit le SQL comme du html? (ne riez pas, je dois dire des trucs idiots mais
je ne comprends vraiment pas)

Re: Soucis insertion données formulaire dans base de données

par sirakawa » 06 janv. 2014, 14:16

Laisse tomber Dreamweaver; c'est de la préhistoire qui valait mieux que Frontpage, et utilise un éditeur comme Eclipse (variante PHp) ou tout autre éditeur colorahnt la syntaxe (Bluefish)
Sinon pour le ?

Code : Tout sélectionner

$absolue = ($valeur >= 0) ? $valeur: -$valeur;
la variable $absolue
prend la valeur =
si la variable $valeur est >= 0
? prend la valeur $valeur
: sinon prend la valeur - $valeur;

Re: Soucis insertion données formulaire dans base de données

par niconicochan » 06 janv. 2014, 13:15

Bonjour,

Je vous remercie tous les trois, reflexive, cid5420 et sirakawa
pour votre aide.
J'ai modifié mon code en m'appuyant à la fois
sur le travail de cid5420 et sirakawa.
Voir ci-dessous.

Maintenant, sur le site, la page est carrément toute blanche. :(
Je ne comprends pas ce qu'il se passe.
Le nom de ma page est SaisieetRangCorr.php
Pour info, Dreamweaver indique que deux lignes ont une erreur:
-celle qui commence par mysqli_select...
-mysqli_query($req);
Je voudrais aussi connaître la signification du point d'interrogation
utlisé par sirakawa (je l'ai recopié mais je ne comprends pas ce qu'il veut dire,
j'ai fait aussi une petite recherche mais je n'ai rien trouvé là-dessus).
Est-ce que ce n'est pas un équivalent de et qui s'écrit and ou encore && ?


<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
dtd">
<head>
<title>Enregistrez votre animal</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>


<body>

<form action="SaisieetRangCorr.php" method="POST">
<h2>Enregistrement de votre animal</h2>
Nom de l'animal: <input type="text" name="animalNom" size="15" maxlenght="15" /><br />
Type de l'animal: <input type="text" name="animalType" size="15" maxlenght="15" /><br />
Description de l'animal:
<input type="text" name="animalDesc" size="255" maxlenght="255" /><br />
Prix de l'animal: <input type="text" name="animalPrix" size="9" maxlenght="9" /><br />
<input type="submit" name="envoyer" value="envoyer" />
</form>

<?php
try
{
$hôte="hôteConfidentiel";
$utilisateur="utilisateurConfidentiel";
$motPasse="motPasseConfidentiel";

$base = mysqli_connect('$hôte, $utilisateur, $motPasse);
mysqli_select_db('nombaseConfidentiel', $base);

$animalNom = isset($_POST[animalNom]) ? $_POST[animalNom]: FALSE;
if ($animalNom)
{
mysqli_real_escape_string($_POST[animalNom]);
}

$animalType = isset($_POST[animalType]) ? $_POST[animalType]: FALSE;
if ($animalType)
{
mysqli_real_escape_string($_POST[animalType]);
}

$animalDesc = isset($_POST[animalDesc]) ? $_POST[animalDesc]: FALSE;
if ($animalDesc)
{
mysqli_real_escape_string($_POST[animalDesc]);
}

$animalPrix = isset($_POST[animalPrix]) ? $_POST[animalPrix]: FALSE;
if ($animalPrix)
{
mysqli_real_escape_string($_POST[animalPrix]);
}

$req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES('$animalNom','$animalType', '$animalDesc', '$animalPrix')";
print <br>$req;

mysqli_query($req);
mysqli_close();
?>
</body>
</html>

Re: Soucis insertion données formulaire dans base de données

par sirakawa » 03 janv. 2014, 18:04

Je n'aime pas voir des $_POST dans les requêtes; aussi je suggère d commencer par
$animalNom = isset($_POST[animalNom]) ? $_POST[animalNom]: FALSE;
if ($animalNom)
{
//vérifier échapper
}
et de même pour les autres valeurs
$req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES('$animalNom','$animalType', '$animalDesc',
'$animalPrix')";
/*à fairesuivre de
print <br>$req";
en cas d'erreur*/

Bravo pour l'emploi de mysqli

Re: Soucis insertion données formulaire dans base de données

par cid5420 » 03 janv. 2014, 17:31

Salut voici une solution qui fonctionne bien pour moi fait gaffe aux guillemet, de plus les erreurs que tu renvoi c'est certainement due à une mauvaise syntaxe dans ta requête sql

Code : Tout sélectionner

//tu te connecte a ta base de donnée exemple $base = mysql_connect('localhost', 'root', ''); mysql_select_db('ta_base', $base); $req = 'insert into ta_table(id, identifiant) VALUES("", "'.mysql_real_escape_string($_POST['identifiant']).'")'; mysql_query($req); mysql_close();

Re: Soucis insertion données formulaire dans base de données

par niconicochan » 03 janv. 2014, 13:00

Juste deux détails pour mon essai avec PDO,
mon formulaire affiche:

Enregistrement de votre animal

Nom de l'animal:
Type de l'animal:
Description de l'animal:
Prix de l'animal:

Erreur: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Il semble que le navigateur cherche un SGBD MySQL local au lieu de celui qui est hébergé.

et si je clique sur "valider", j'obtiens:

Not Found

The requested URL /SaisieetRangbis.php was not found on this server

Re: Soucis insertion données formulaire dans base de données

par niconicochan » 03 janv. 2014, 12:47

Merci pour ta réponse.
J'ai également essayé avec
$req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES($_POST['animalNom'],$_POST['animalType'], $_POST['animalDesc'],
$_POST['animalPrix'])";
mais l'écran est tout blanc, pareil si j'essaye d'envoyer
echo= " $req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES($_POST['animalNom'],$_POST['animalType'], $_POST['animalDesc'],
$_POST['animalPrix'])";";
dans le but d'envoyer du code php sous forme html au serveur?

A vrai dire, j'ai également essayé de travailler avec PDO pour cette page.
Peut-être arriveras-tu à déceler plus d'erreurs sur cette autre page avec PDO
(si j'y arrive avec PDO ça me va très bien, aujourd'hui je n'y arrive ni avec l'un ,
ni avec l'autre). #-o
Avec PDO:
-----------------------------------------------------------------------------------------------------------------
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
dtd">
<head>
<title>Enregistrez votre animal</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>


<body>

<form action="SaisieetRangbis.php" method="POST">
<h2>Enregistrement de votre animal</h2>
Nom de l'animal: <input type="text" name="animalNom" size="15" maxlenght="15" /><br />
Type de l'animal: <input type="text" name="animalType" size="15" maxlenght="15" /><br />
Description de l'animal:
<input type="text" name="animalDesc" size="255" maxlenght="255" /><br />
Prix de l'animal: <input type="text" name="animalPrix" size="9" maxlenght="9" /><br />
<input type="submit" name="envoyer" value="envoyer" />
</form>

<?php
try
{
$base = new PDO ('hôteconfidentiel;dbname=nombaseConfidentiel','utilisateurConfidentiel','motPasseConfidentiel');
$base->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES('$_POST[animalNom]','$_POST[animalType]', '$_POST[animalDesc]',
'$_POST[animalPrix]')";
$resultat=$base->prepare($req);
$animalNom=htmlentities(addslashes('$_POST[animalNom]'));
$animalType=htmlentities(addslashes('$_POST[animalType]'));
$animalDesc=htmlentities(addslashes('$_POST[animalDesc]'));
$animalPrix=htmlentities(addslashes('$_POST[animalPrix]'));
$resultat->execute();
echo "<h4>Les données que vous avez saisies ont bien été enregistrées.</h4>";
}
catch(Exception $e)
{
die('Erreur: '.$e->getMessage());
}
?>
</body>
</html>
-----------------------------------------------------------------------------------------------------------------
Je sais en tout cas que tous mes codes sont bons. J'ai des soucis avec php.
Niconicochan.

Re: Soucis insertion données formulaire dans base de données

par Reflexive » 03 janv. 2014, 11:56

Ne faudrait-il pas que dans $req=VALUES('$_POST[animalNom]','$_POST[animalType]', '$_POST[animalDesc]', '$_POST[animalPrix]')"; les clefs de $_POST ne soient entre guillemets ?

En tout cas, ce que je ferais dans ta situation c'est de faire un echo $req pour voir si la requête est bien celle que tu as prévu. Parfois on a des surprises de ce coté-là. Sinon, tu dois avoir la possibilité d'afficher des messages d'erreur qui, parfois, te renseignent sur ce qui s'est passé. Moi j'utilise PDO depuis un moment, et je ne me souviens pas au pied levé de la fonction d'erreur mysql_(), mais dans la doc tu dois pouvoir trouver ça.

Soucis insertion données formulaire dans base de données

par niconicochan » 03 janv. 2014, 11:39

Bonjour,
Tout d'abord, je souhaite une excellente année 2014 à tous les membres sur ce forum.
J'ai créé un formulaire, aussi simple que possible (une même page pour écrire le formulaire
et le programme du formulaire et aussi courte que possible), pour essayer d'insérer automatiquement
des données dans une base de données hébergée (hébergement mutualisé).
Cette page se trouve tout en bas de ce message, entre les pointillés.

Sur mon site, je vais sur la page de mon formulaire qui se présente ainsi:

Enregistrement de votre animal
Nom de l'animal:
Type de l'animal:
Description de l'animal:
Prix de l'animal:

Exécution de la requête impossible

La phrase "Exécution de la requête impossible", écrite par moi-même, provient
de la page que j'ai créé (voir ci-dessous).
Je souhaiterais savoir pourquoi cette phrase apparaît ici.

Ensuite, le formulaire testé juste après le clic sur "valider", le navigateur me répond:
Not Found
The requested URL /SaisieetRang.php was not found on this server.
Je souhaiterais comprendre pourquoi étant donné que SaisieetRang.php est le nom que j'ai donné à
ma page, je ne vois donc pas pourquoi le navigateur s'attendrait à la trouver sur le serveur.

En plus de ces deux questions auxquelles je souhaite avoir une réponse pour pouvoir comprendre ce qu'il se passe,
j'aurais besoin d'explications pour arriver à pouvoir permettre l'insertion automatique de données dans la base de données
via le formulaire: but ultime de ce travail.

Voici le code de ma page:
-------------------------------------------------------------------------------------------------------------------
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.
dtd">
<head>
<title>Enregistrez votre animal</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1" />
</head>


<body>

<form action="SaisieetRang.php" method="POST">
<h2>Enregistrement de votre animal</h2>
Nom de l'animal: <input type="text" name="animalNom" size="15" maxlenght="15" /><br />
Type de l'animal: <input type="text" name="animalType" size="15" maxlenght="15" /><br />
Description de l'animal:
<input type="text" name="animalDesc" size="255" maxlenght="255" /><br />
Prix de l'animal: <input type="text" name="animalPrix" size="9" maxlenght="9" /><br />
<input type="submit" name="envoyer" value="envoyer" />
</form>

<?php
$hôte="hôteConfidentiel";
$utilisateur="utilisateurConfidentiel";
$motPasse="motPasseConfidentiel";
$nombase="nombaseConfidentiel";

$connexion=mysqli_connect($hôte,$utilisateur,$motPasse)
or die ("Connexion au serveur impossible.");
$nombase=mysqli_select_db($connexion,$nombase)
or die ("Sélection de la base impossible");

$req="INSERT INTO Animal (animalNom, animalType, animalDesc, animalPrix)
VALUES('$_POST[animalNom]','$_POST[animalType]', '$_POST[animalDesc]',
'$_POST[animalPrix]')";
$query=mysqli_query($connexion,$req)
or die ("Exécution de la requête impossible.");
echo "<h4>Les données que vous avez saisies ont bien été enregistrées.</h4>";
mysqli_close();
?>

</body>
</html>
-------------------------------------------------------------------------------------------------------------------
A savoir, les 4 données sensibles que je n'ai pas affiché ici fonctionnent bien,
car j'arrive à lire et afficher sur mon site des données sur trouvant dans ma base de données.
Autre information, j'ai aussi essayé de ne rien mettre dans action (action="").
Le résultat est encore moins concluant: en cliquant sur "valider", rien ne se passe.


Je vous remercie pour toute votre attention. :D

Niconicochan.