IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Enregistrement de données


Sujet :

PHP & Base de données

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2017
    Messages : 1
    Par défaut Enregistrement de données
    Bonjour,

    Voila je rencontre un petit problème avec mon code.

    Ce que je fais

    Bonjour, je cherche a envoyer des données via php sur ma base de données... j'ai essayé les deux choses soivantes

    **-> 1**
    Fichier "sendart.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
    if(isset($_POST['content']) && isset($_POST['titre']) && isset($_POST['resume'])){
    	include '../../../core/funcs.php';
    	ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    	checkLoggedIn();
        $u = getConnected();
        $user = $u['id'];
        $ok = SendArticle($_POST['titre'], $_POST['resume'], $_POST['content'], 0,$user);
        var_dump($ok);
        sleep(0.5);
        $ok = GetSpe($_POST['titre'], $_POST['resume'], $_POST['content'], 0,$user);
        var_dump($ok);
        //header("Location: https://**********/v/vart.php?id=".$ok);
        exit();
    }
     
     ?>

    Fichier "func.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function SendArticle($titre, $resume, $content, $catid=0,$uid) {
    	$bdd = new PDO('mysql:host=localhost;dbname=AL;charset=utf8', 'root', '*********');
    	$req = "INSERT INTO `articles`(id, photo, categorie_id, titre, `date`, auteur_id, resume, content, trending, une, `datetime`) VALUES (NULL , 'try.jpg' , '".$catid."' , '".$titre."' , '".date("d-m-Y",time())."' , '".$uid."' , '".$resume."' , '".$content."' , 0 , 0 , NOW() , 1)";
    	$q2 = $bdd->prepare($req);
    	$q2->execute();
     
    	if (!$q2->fetch()) {
    		echo "<br>";
    	   	echo "\nPDO::errorInfo():\n";
    	   	print_r($bdd->errorInfo());
    	   	echo "<br>";
    	}
    	sleep(1);
    	return $q2->fetch();
    }


    **-> 2**
    Fichier "sendart.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
    if(isset($_POST['content']) && isset($_POST['titre']) && isset($_POST['resume'])){
    	include '../../../core/funcs.php';
    	ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    	checkLoggedIn();
        $u = getConnected();
        $user = $u['id'];
        $ok = SendArticle($_POST['titre'], $_POST['resume'], $_POST['content'], 0,$user);
        var_dump($ok);
        sleep(0.5);
        $ok = GetSpe($_POST['titre'], $_POST['resume'], $_POST['content'], 0,$user);
        var_dump($ok);
        //header("Location: https://**********/v/vart.php?id=".$ok);
        exit();
    }
     
     ?>

    Fichier "func.php"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function SendArticle($titre, $resume, $content, $catid=0,$uid) {
    	$bdd = new PDO('mysql:host=localhost;dbname=AL;charset=utf8', 'root', '*******');
    	$q2 = $bdd->prepare("INSERT INTO `articles`(id, photo, categorie_id, titre, `date`, auteur_id, resume, content, trending, une, `datetime`) VALUES (NULL , 'try.jpg' , :cat , :titre , :dat , :aut , :res , :cont , 0 , 0 , NOW() , 1)");
    	$q2->BindValue('cat', $catid);
    	$q2->BindValue('titre', $titre);
    	$q2->BindValue('dat', date("d-m-Y",time()));
    	$q2->BindValue('aut', $uid);
    	$q2->BindValue('res', $resume);
    	$q2->BindValue('cont', $content);
    	$q2->execute();
     
    	if (!$q2->fetch()) {
    		echo "<br>";
    	   	echo "\nPDO::errorInfo():\n";
    	   	print_r($bdd->errorInfo());
    	   	echo "<br>";
    	}
    	return $q2->fetch();
     
    }
    Ce que je veux

    Je cherche donc a ce que ces données soient entrées dans ma base de données ce qui va me permettre apres de récuperer l'identifiant de l'article et d'envoyer l'utilisateur vers une page `'mapage.php?id=<?= $id; ?>'`

    Ce que j'obtiens

    Les données ne sont pas entrées dans la base de données, j'ai alors mis des "var dump",etc.... dans tous les sens et j'obtiens une page "sendart.php" qui dit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PDO::errorInfo(): Array ( [0] => 00000 [1] => [2] => ) 
    bool(false) bool(false)

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Est-ce qu’il ne faudrait pas mette : devant les noms des champs dans bindValue ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $q2->BindValue(':cat', $catid);

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 099
    Par défaut
    Bonsoir,

    premier problème, il semblerait que tes erreurs SQL ne remontent pas correctement. Ajoute cette instruction après la création de ton PDO :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Avec ça les erreurs remonteront comme des exceptions PHP et tu n’auras même plus besoin d’appeler errorInfo.

    Deuxième problème : il ne suffit pas d’utiliser prepare pour faire une requête préparée. Si tu mets des variables PHP dans la requête, tu t’exposes aux mêmes risques qu’avec une requête non préparée.

    Il faut utiliser des marqueurs. Ici, de préférence des marqueurs nommés, car il y a beaucoup de paramètres.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO `articles` (
        id,         photo,      categorie_id,   titre,
        `date`,     auteur_id,  resume,         content,
        trending,   une,        `datetime`
    ) VALUES (
        NULL,       :photo,     :categorie_id,  :titre,
        :date,      :auteur_id, :resume,        :content,
        0,          0,          NOW()
    );

    Les noms qui commencent par : sont les marqueurs.

    Au moment de l’appel à execute, tu passes les valeurs dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $q2->execute([
        ':photo'        => 'try.jpg',
        ':categorie_id' => $catid,
        ':titre'        => $titre,
        ':date'         => date('Y-d-m', time()),
        ':auteur_id'    => $uid,
        ':resume'       => $resume,
        ':content'      => $content,
        // '???'           => 1
    ]);
    Et là on se rend compte qu’il y avait une valeur en trop dans la requête, c’était le 3e problème

    Entre temps je vois que tu as édité ton message pour utiliser bindValue, c’est bien Passer un tableau à execute ou utiliser bindValue conduit au même résultat, c’est une affaire de préférence. Ça fonctionnera si tu tiens compte de la réponse de badaze.

    Bonus : j’ai une suggestion d’amélioration pour ton champ `date`. S’il est de type SQL DATE, tu n’as pas besoin d’appeler la fonction date() de PHP. Passe directement NOW() et SQL fera la conversion pour toi
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Enregistrement de données
    Par b_steph_2 dans le forum Access
    Réponses: 11
    Dernier message: 25/01/2006, 18h21
  2. [HTML] Tableau pour l'enregistrement des données
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/11/2005, 15h28
  3. [Access] Enregistrer des données de type Texte RTF
    Par portu dans le forum Bases de données
    Réponses: 22
    Dernier message: 27/10/2005, 22h54
  4. Réponses: 7
    Dernier message: 20/03/2005, 14h53
  5. [PIC] Enregistrement de données permanentes
    Par Grulou dans le forum Autres architectures
    Réponses: 6
    Dernier message: 15/03/2004, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo