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
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999
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
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
0
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
0
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(); 
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999
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';

?>

0
Bonjour,

Merci beaucoup pour les conseils, mais j'ai une erreur au niveau de 'execute' :

Fatal error: Call to a member function execute() on a non-object

je ne la comprends pas, pourtant j'ai fait de la même manière que :

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

Puisque l'ID est de type auto incrémenté

Merci d'avance
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999 > tiph
Quel est le code de connexion à ta BDD ?
Tu es bien en PDO ??
0

$bdd = mysqli_connect('localhost', 'root', '', 'bd');
/* Vérification de la connexion */
if (!$bdd) {
printf("Connexion échouée : %s\n", mysqli_connect_error());
exit();
}



Normalement oui, je suis en PDO
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999 > tiph
Heu... non..... là ... tu es en mysqli !!!!!

PDO c'est comme ça :
$hote = 'localhost';
$utilisateur = 'username';
$mdp = 'motdepasse';
$nombdd = 'ccm'; // Nom de la base de données
$bdd = new PDO("mysql:host=$hote;dbname=$nombdd", $utilisateur, $mdp);
0
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 !!!!
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999
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                                                                 
0
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
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999 > 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...
0
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.
0
Je n'ai rien d'autre d'afficher non plus ...
0
Messages postés
34681
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 janvier 2022
3 999 > tiph
Regardes bien ton ARRAY de DATAS .... tu as des espaces en trop sur
':AnneeFinale ' => $AnneeFinale
et sur
':Commentaire ' => $Commentaire
0
Bonjour,

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

Cordialement
0