Enregistrer mon formulaire dans la base de données [Résolu/Fermé]

Signaler
-
 tiph -
Bonjour,

Comme le titre l'indique je souhaite enregistrer le formulaire rempli, mais pas totalement, dans ma base de données. Je n'ai pas d'erreur mais cela ne fonctionne pas, je ne vois pas ce qu'il me manque

Voici une partie de ma page html :
<form name="frm" action="./enr_az.php" method="post">
 <p>
 Numéro
 <input type="text" name="Num">
 <input type="button" value="Valider" onclick="Valider()">
 </p>
 </form>




et mon php :
<?php



//Connection avec la BDD.
$bdd = 'bd';

$host = "localhost" ;

$user = "root" ;

$mdp = "" ;

$connect = mysql_connect($host, $user, $mdp) ;

if ($connect > 0 )

echo " connexion réussie" ;

else

echo "Echec de connexion – Veuillez contacter l’adminstrateur" ;

mysql_select_db($bdd) or die("Erreur de connexion à la base de donnée" );



$Num = $_POST['Num'];
$res = 'INSERT INTO az (Num) VALUES ("'.$Num.'")';

   
 $res = mysql_query('$sql');

  mysql_close();


?>


Je vous remercie d'avance pour votre aide,

Cordialement

6 réponses

Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936
Bonjour,

Concernant ton souci .... retires donc les QUOTES autour de la variable $sql

 $res = mysql_query($sql);



Par contre, au passage .... sache que tu utilises l'ancienne extension Mysql considérée comme obsolète.
Je t'invite à lire ceci :
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

puis à modifier ton code en prenant PDO (ou mysqli)
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

Bonjour,

Merci pour ta réponse, j'avais testé sans les quotes mais ça ne fonctionne pas, je vais lire les liens que tu m'as laissé. Je reviendrai sur le forum si j'ai un éventuel pb.
Encore merci
Bonjour,

Bon je pense être perdue ... J'ai testé plusieurs solutions trouvées sur le net, mais j'ai soit des erreurs, soit les données ne s'enregistre pas. Je ne peux pas utilisé mysqli_stmt_bind_param car sous php 5.4 c'est obsolète

Qu'ai-je oublié ?


$req = $bdd -> prepare('INSERT INTO az(ID,nom)VALUES (:nom)');


$req -> 'ID'=>$ID,'nom' => $nom;

echo 'Vous avez bien ajouté vos données ! ';



PHP ne reconnait ni execute, ni exec

OU
$req = $bdd->prepare('INSERT INTO az (ID,nom) VALUES(:nom)');

$req->execute(array(

    'nom' => $nom,

   
    ));


echo 'Les données sont insérées';

?>




Merci d'avance pour l'aide
Cordialement
Messages postés
204
Date d'inscription
samedi 4 janvier 2014
Statut
Membre
Dernière intervention
4 juin 2017

voila la requete PDO que tu devrais utiliser :

$ID = 'met la valeur que doit comporter le ID';
$nom = 'met la valeur que doit comporter le nom';
$req = $bdd->prepare("INSERT INTO az VALUES(:ID, :nom)");
$req -> bindvalue(':ID', $ID, PDO::PARAM_INT);
$req -> bindvalue(':nom', $nom, PDO::PARAM_STR);
$req -> execute(); 
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936
Si l' ID est de type auto-incrémenté ... pas besoin de le mettre dans la requête.
Donc, ton code devrait être :

$req = $bdd->prepare('INSERT INTO az (nom) VALUES(:nom)');
$req->execute(array(':nom' => $nom ));
echo 'Les données sont insérées';

?>

Ok rien à voir, je réapprends PHP, ça à bien changer depuis ... (ou alors je ne connaissais pas cette partie)
Du coup j'ai suivi tes conseils mais j'ai des erreurs sur cette ligne

$req->execute(array(':nom' => $nom ));

Undefined variable:
Faut il que je déclare comme ceci :
$nom=$_POST['nom'];
Ou tout à changer ?

En tout cas merci de ton aide !!!!
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936 > tiph

Faut il que je déclare comme ceci :
$nom=$_POST['nom'];

Heu..oui...

Le mieux étant :
$nom = isset($_POST['nom']) ? $_POST['nom'] : ''; 

Merci beaucoup ! j'ai réussi à enregistrer les lignes,
en faisant comme ceci
$nom=$_POST['nom'];

mais j'ai un avertissement

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Du coup, j'ai suivi tes conseils en faisant

$nom = isset($_POST['nom']) ? $_POST['nom'] : '';

J'ai toujours le même avertissement mais les données ne s'enregistrent pas ... alors qu'il est écrit
Vous avez bien ajouté vos données !
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936 > tiph
Tu peux nous remontrer le code modifié ?


$hote = 'localhost';
$utilisateur = 'root';
$mdp = '';
$nbdd = 'bd';
// Nom de la base de données
$bdd = new PDO("mysql:host=$hote;dbname=$nbdd", $utilisateur, $mdp);

$nom= isset($_POST['nom']) ? $_POST['nom']:'';
$req = $bdd -> prepare('INSERT INTO az(nom) VALUES (:nom)');

$req -> execute(array(':nom' => $nom));


Je pense ne pas avoir fait d'erreur, après ce n'est qu'un exemple, pour ma base de données j'ai 36 variables en comptant l'ID
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936
Déjà... place le code de connexion à ta BDD dans un fichier à part que tu n'auras qu'à inclure dans les pages où tu en as besoin.

Ensuite.. ajoute du Try/Catch pour intercepter les éventuelles erreurs...

Essayes ça :

<?php
//Fichier : cnxBDD.php
//-----------------------------

//affichage des erreurs php
error_reporting(E_ALL);

//variables de connexion à la BDD
$hote = 'localhost';
$utilisateur = 'root';
$mdp = '';
$nbdd = 'bd';

//connexion à la BDD
try{
  // Nom de la base de données
  $bdd = new PDO("mysql:host=$hote;dbname=$nbdd", $utilisateur, $mdp);

} catch( PDOException $Exception ) {
    // PHP Fatal Error. Second Argument Has To Be An Integer, But PDOException::getCode Returns A
    // String.
    echo "Erreur !<br>";
    echo $Exception->getMessage();
    echo $Exception->getCode();
    exit();
}




<?php
//ton fichier php

//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD
require_once "cnxBDD.php";


//récupération des variables :
$nom= isset($_POST['nom']) ? $_POST['nom']:'';


// préparation de la requête :
  $sql = "INSERT INTO az(nom) VALUES (:nom)";
  $a_datas = array(':nom' => $nom);

//exécution de la requete avec try/catch
try{
  $req = $bdd -> prepare($sql);
  $req -> execute($a_datas); 
}catch(Exception $e) {
   //en cas d'erreur dans la requete ::
   echo "<pre><br>Erreur dans la requete <br>".$e->getMessage()."<br>";
   echo "datas :<br>";
   print_r($a_datas);
   echo "</pre>";
}





Cordialement, 
Jordane                                                                 
Je viens de suivre à la lettre mais ça n'enregistre pas les données, et j'ai toujours ce message :


Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Je ne sais pas si ça pose problème mais je suis sous Aptana Studio 3, APACHE 2.4.7
MYSQL 5.6.15
PHP 5.4.24
EasyPHP 14.1
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936 > tiph
Quelle est la structure de ta table ?
Tu as bien un champ "nom" dedans ?

et...ça ne t'affiche rien d'autre sur ta page ? vu le code que je t'ai donné... tu devrais avoir plus de texte qui apparait...
Dans PhpMyAdmin, j'ai le numéro, le nom, le type de la variable ...
J'ai plusieurs champs, en tout 36, nom n'est qu'un exemple pour moi, mais j'ai fait la même chose pour les variables que pour nom, exemple :

//affichage des erreurs php
error_reporting(E_ALL);

//connexion à la BDD
require_once "cnxBDD.php";

//récupération des variables :
$Numfolio = isset($_POST['Numfolio']) ? $_POST['Numfolio']:'';
$AnneeInitiale= isset($_POST['AnneeInitiale'])?$_POST['AnneeInitiale']:'';
$Commentaire = isset($_POST['Commentaire']) ? $_POST['Commentaire']:'';
$AnneeFinale = isset($_POST['AnneeFinale']) ? $_POST['AnneeFinale']:'';
$Jour2Mois2 = isset($_POST['Jour2Mois2']) ? $_POST['Jour2Mois2']:'';

// préparation de la requête :

$sql = "INSERT INTO archifam ( Numfolio, AnneeInitiale,Commentaire, AnneeFinale,Jour2Mois2) VALUES (:Numfolio,:AnneeInitiale, :Commentaire,  :AnneeFinale,:Jour2Mois2)";

$a_datas =array(':Numfolio' => $Numfolio,':AnneeInitiale' => $AnneeInitiale, 
':Commentaire ' => $Commentaire,  ':AnneeFinale ' => $AnneeFinale, ':Jour2Mois2 ' => $Jour2Mois2);

//exécution de la requete avec try/catch
try{
  $req = $bdd -> prepare($sql);
  $req -> execute($a_datas); 
}catch(Exception $e) {
   //en cas d'erreur dans la requete ::
   echo "<pre><br>Erreur dans la requete <br>".$e->getMessage()."<br>";
   echo "datas :<br>";
   print_r($a_datas);
   echo "</pre>";
}


EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Je n'ai rien d'autre d'afficher non plus ...
Messages postés
30001
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
7 novembre 2020
2 936 > tiph
Regardes bien ton ARRAY de DATAS .... tu as des espaces en trop sur
':AnneeFinale ' => $AnneeFinale
et sur
':Commentaire ' => $Commentaire
Bonjour,

Merci infiniment, je n'ai plus de message d'erreur, et mon formulaire s'enregistre dans la base de données ^^ !

Cordialement