[RESOLU] je n'arrive pas à recevoir les informations dans ma base de donnée !

Eléphanteau du PHP | 12 Messages

21 juil. 2016, 17:37

Bonjour je ne comprends absolument pas pourquoi l'INSERT INTO que j'ai utlisé ne fonctionne pas, je ne sais pas si c'est un problème de synthaxe ou autres! Illulinez moi svp !!

Code : Tout sélectionner

<h3>Titre : </h2><input type="text" name="title_news1"/></br> <h3>Article 1 : </h3><textarea cols=33 rows=10 value="article1" name="article1"></textarea></br> <input type="submit" name="articles" value="Envoyer les articles" align="center"> </form> </table> <?php if(isset($_POST['articles'])) { $title_news1=$_POST['title_news1']; $article1=$_POST['article1']; $req_news=$bdd->prepare("INSERT INTO new (titre_news,mess_news) VALUES ('?','?')"); $req_news->execute(array($title_news1, $article1));

Mammouth du PHP | 2703 Messages

21 juil. 2016, 17:49

$req_news=$bdd->prepare("INSERT INTO new (titre_news,mess_news) VALUES (?,?)");

Eléphanteau du PHP | 12 Messages

21 juil. 2016, 18:04

j'ai enlevé comme tu l'as montré les accolades au niveau des points d’interrogation mais mon problème persiste toujours..
Comment voir les erreurs pour le code SQL ? Car je pense que le problème vient de là

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 juil. 2016, 18:13

Bonjour,

Voici npour la gestion des erreurs avec PDO :
https://secure.php.net/manual/fr/pdo.error-handling.php
ERRMODE_WARNING
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 juil. 2016, 18:23

Bonjour,

Je ne sais pas si ton problème vient de là, mais "NEW" est un mot clé réservé en SQL, il est préférable de ne pas l'utiliser comme nom de table ou de colonne (comme la plupart des mots propres à ce langage "TABLE", "DATE"...).

Avec MySQL (et mysql uniquement) tu peux utiliser les quotes inverses `new` (alt gr+7) pour dire au moteur qu'il ne s'agit pas de son mot clé réservé, mais bien du nom de ta table, mais d'une manière générale, il vaut mieux changer le nom de ta table pour news, ou actu, ou jesaispasquoimaispasunmotclésql :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 12 Messages

21 juil. 2016, 18:31

ah ah merci de ta remarque, en réalité c'est une erreur de frappe, dans ma base j'ai effectivement choisi de mettre news, je l'ai d'ailleurs corrigé sans pour autant que mon problème soit résolu d'ailleurs... Si vous avez des suggestions de corrections je suis preneur.
Merci

Eléphanteau du PHP | 12 Messages

21 juil. 2016, 19:21

après changement voilà là où je reste bloqué.. De l'aide please !

Code : Tout sélectionner

<h3>Titre : </h2><input type="text" name="title_news1"/></br> <h3>Article 1 : </h3><textarea cols=33 rows=10 value="article1" name="article1"></textarea></br> <input type="submit" name="articles" value="Envoyer les articles" align="center"> </form> </table> <?php if(isset($_POST['articles'])) { $title_news1=$_POST['title_news1']; $article1=$_POST['article1']; $req_news=$bdd->prepare('INSERT INTO news (titre_news,mess_news) VALUES (:title_news1,:article1)'); $req_news->execute(array( 'title_news1'=> $titre_news, 'article1'=> $mess_news ));

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 juil. 2016, 19:23

Tu as fait les modifs pour voir les erreurs comme indiqué dans mon post ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 12 Messages

21 juil. 2016, 20:39

non, pourrais tu m'indiquer comment rajouter cette commande, par contre j'ai ça:

Code : Tout sélectionner

try{ $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); }

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 juil. 2016, 15:31

salut

ta conf va lever une exception, donc un try catch serait du meilleur effet autour de la requête :)

est tu certains que la requête est exécutée ?
if(isset($_POST['articles'])) <= tu passe cette condition ?
{
$title_news1=$_POST['title_news1'];
$article1=$_POST['article1'];
$req_news=$bdd->prepare('INSERT INTO news (titre_news,mess_news) VALUES (:title_news1,:article1)');
$req_news->execute(array(
'title_news1'=> $titre_news,
'article1'=> $mess_news
));

tu n'as pas besoin de variable temporaire ;)

Sinon ta requête SQL est syntaxiquement correcte.
Il va peux être, être nécessaire de déboguer un peu : IDE + xdebug, ou a l'ancienne pas pratique à grand coup de var_dump

COté lisibilité je préfère le bindParam, je ferais donc ton code ainsi.
<?php
if(isset($_POST['articles'])) {
  $req_news=$bdd->prepare('INSERT INTO news (titre_news, mess_news) VALUES (:title_news1, :article1)');
  $req_news->bindParam(':title_news1', $_POST['title_news1']);
  $req_news->bindParam(':article1', $_POST['article1']);
  $req_news->execute();
}

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 12 Messages

23 juil. 2016, 01:04

Bonsoir, merci de ta réponde Moogli, je vais essayer avec le bindparam mais c'est quand même frustrant de ne pas savoir pourquoi ça ne marche pas sinon avec la méthode que j'ai tenté d'utiliser, en tout cas ce n'est pas faute d'avoir chercher :(

Eléphanteau du PHP | 12 Messages

23 juil. 2016, 01:13

voici le code en intégralité peut être que vus comprendrez mieux :

Code : Tout sélectionner

<header> <link href="../style/test.css" type="text/css" rel="stylesheet"/> <?php try{ $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } session_start(); ?> </header> <?php include("../menu.php"); if(isset($_SESSION['username'])){ if(isset($_GET['action'])){ if($_GET['action']=='ajouter'){ header('Location:../deposer_annonce.php'); }else if ($_GET['action']=='modifier/supprimer'){ } }else{ } }else{ header('Location:../Acceuil.php'); } ?> </header> <h1>Administration</h1></br></br> <h3>Bienvenue,<?php echo $_SESSION['username'];?> dans la zone d'administration du site.</h3> <a href="?action=ajouter">Ajouter un produit</a></br> <a href="?action=modifier/supprimer">Modifier/Supprimer un produit</a> <h1>Ecrire un article</h1></br></br> <table> <form action="../Accueil.php" method="POST"> <h3>Titre : </h2><input type="text" name="title_news1"/></br> <h3>Article 1 : </h3><textarea cols=33 rows=10 value="article1" name="article1"></textarea></br> <input type="submit" name="articles" value="Envoyer les articles" align="center"> </form> </table> <?php if(isset($_POST['articles'])) { $title_news1=$_POST['title_news1']; $article1=$_POST['article1']; $req_news=$bdd->prepare("INSERT INTO news (titre_news,mess_news) VALUES (:title_news1,:article1)"); $req_news->execute(array( 'title_news'=> $title_news1, 'mess_news'=> $article1 )); header("Location:../Accueil.php?username=".$_SESSION['$article1'&&'$title_news1']); }

Eléphanteau du PHP | 12 Messages

23 juil. 2016, 02:10

Comment alors activer les exceptions PDO ? Pour que je puisse au moions voir et essayer de comprendre mon erreur ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

25 juil. 2016, 14:06

c'est déjà fait
$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

vu ton code toutes les fonctions header doivent afficher une erreur "header allready send" vu que tu affiches du code html avant (ligne 1à 3 par exemple).

si tu redirige c'est que tu n'as pas besoin de la page donc affiche rien avant (et de toute façon cela ne fonctionne pas ;) ).


ensuite as tu essayés de mettre juste la connexion et la requête d'insertion dans le fichier et de l'utiliser et de voir ce qu'il y a aensuite dans la base.

est ce que tu affiche bien les erreur (display_error = on) avec un niveau d'erreur à E_ALL (error_reporting = E_ALL).

@+
Il en faut peu pour être heureux ......