Probleme avec PDO lors d'un INSERT INTO

Par Ungarscool1, il y a 8 ans


Bonjour,

Je me suis trouvé avec un problème avec PDO

Ce que j'ai fais

Je cherche à pouvoir publié un "article" comme sur wordpress mais sur quelque chose que j'ai codé. Mais rien ne se passe, j'ai cherché (un peu) sur internet mais aucune erreur ne s'inscrit. Voilà mon code:

<form action="" method="POST"> <?php if (isset($_POST['title']) || isset($_POST['video']) || isset($_POST['auteur']) || isset($_POST['min-desk']) || isset($_POST['desk'])) { $date = date('Y').'-'.date('M').'-'.date('D'); $titre = $_POST['title']; $video = $_POST['video']; $auteur = $_POST['auteur']; $desk = $_POST['desk']; $db->exec("INSERT INTO `news` (`id`, `title`, `video`, `auteur`, `desk`, `disqus-name`, `date`) VALUES (null, ".$titre.", ".$video.", ".$auteur.", ".$desk.", ".$video.", ".$date.");"); } ?> <div class="form-group"> <label for="title" class="col-sm-2 control-label">Titre</label> <div class="col-sm-10"> <input type="text" id="title" class="form-control" name="title" value=""> </div> </div> <div class="form-group"> <label for="video" class="col-sm-2 control-label">URI</label> <div class="col-sm-10"> <input type="text" id="video" class="form-control" name="video" value=""> </div> </div> <div class="form-group"> <label for="auteur" class="col-sm-2 control-label">Auteur</label> <div class="col-sm-10"> <input type="text" id="auteur" class="form-control" name="auteur" value=""> </div> </div> <div class="form-group"> <label for="desk" class="col-sm-2 control-label">Description</label> <div class="col-sm-10"> <textarea type="text" rows="3" class="form-control" id="desk" name="desk"></textarea> </div> </div> <a href="" class="btn btn-default" data-dismiss="modal" style="text-align: left; float:left;">Fermer</a> <button type="submit" class="btn btn-primary" style="text-align: right; float:right;">Crée</button> </form>

17 réponses

Ungarscool1, il y a 8 ans

Je suis désolé mais je n'ai pas compris ce que tu as mis , en gros je dois testé comme ça ?

$req = $db->prepare('INSERT INTO `news` (`id`, `title`, `video`, `auteur`, `desk`, `disqus-name`, `date`) VALUES (null, ?, ?, ?, ? , ? , ? )'); $req->execute(array($titre, $video, $auteur... ));
Ungarscool1, il y a 8 ans

J'ai vu quand tu as mis que il y a 2 fois le $video. Dans mon cas j'utilise l'id de la vidéo pour disqus.
Mais après ce que t'as mis il ne se passe rien...
Rien sur phpmyadmin, et rien sur le site.

Ungarscool1, il y a 8 ans

Oui et en primary

Ungarscool1, il y a 8 ans

Par contre les requêtes de suppression et d'update fonctionnent

Flo418, il y a 8 ans

La structure de la table pourrait aider à y voir plus claire.

Autre chose pour la récupération des variables via $_POST regarde la fonction filter_imput() associé à filter_var() et autres c'est bien mieux pour la sécurité.

Ungarscool1, il y a 8 ans

Tu veux voir le fichier sql ou un screen (les lignes dans le fichier sql seront enlevé pour éviter les problèmes)

Carouge10, il y a 8 ans

Bonjour,
Avez-vous consulté les fichiers logs pour déterminer l'erreur ?
Sinon adapté ce code pour afficher l'erreur:

$req = $bd->prepare('INSERT INTO news (title, video, auteur, desk, disqus_name, date_article) VALUES(?, ?, ?, ?, ?, NOW())'); $req->execute(array($titre, $video, $auteur, $desk, $disqus_name)); if (!$req) { echo "\nPDO::errorInfo():\n"; print_r($bd->errorInfo()); }
Flo418, il y a 8 ans

Bien la structure en sql, histoire qu"on puisse faire un test nous même de ton code du genre:

<pre><code>
CREATE TABLE ma_table (
lala_id int(11) NOT NULL,
lala_title varchar(250) NOT NULL,
lala_content text NOT NULL,
lala_img varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
</code></pre>

Pas besoin des données, juste la structure de la table.

Ungarscool1, il y a 8 ans

Mon fichier SQL

CREATE TABLE `news` ( `id` int(11) NOT NULL, `title` varchar(255) CHARACTER SET latin1 NOT NULL, `video` varchar(255) CHARACTER SET latin1 NOT NULL, `auteur` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT 'Ungarscool1', `desk` varchar(255) CHARACTER SET latin1 NOT NULL, `disqus-name` varchar(255) COLLATE utf8_bin NOT NULL, `date` date NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Et pour répondre à Carouge10 "... mais aucune erreur ne s'inscrit", avec ton code tout disparait de la page mais rien ne se passe, pas une seul écriture.
--- EDIT ---
Quand je fait une verif php, je n'ai aucune erreur.

root@ungarscool1-1:~# php -l /var/www/html/modules/add.in.ungs.php No syntax errors detected in /var/www/html/modules/add.in.ungs.php
Carouge10, il y a 8 ans

Ton id n'est pas en auto-increment donc il faut soit le passer auto-increment, soit c'est à toi de le gérer.
"date" est réservé à SQL donc il vaut mieux le modifier comme "date_article".

Ungarscool1, il y a 8 ans

Pourtant je le vois qu'il est en auto
Phpmyadmin

Carouge10, il y a 8 ans

Et bien très bien et pour le reste ?

Ungarscool1, il y a 8 ans

J'ai ajouté ce que tu as mis mais rien ne s'affiche

if (!$req) { echo "\nPDO::errorInfo():\n"; print_r($bd->errorInfo()); }
Carouge10, il y a 8 ans

Je parlais de ceci : "date" est réservé à SQL donc il vaut mieux le modifier comme "date_article".

Ungarscool1, il y a 8 ans

Il ne se passe toujours rien, rien. Et ça me le fait sur toute mes db. J'ai tenté de crée une nouvelle db avec un autre nom etc mais même ça ne fonctionne pas. Comment te connecte tu à mysql ?
Je me connecte comme ça :

$db = new PDO('mysql:host=localhost;dbname=***', '***', '********');
Carouge10, il y a 8 ans

Oui c'est bien cela
Ajoute ceci en dessous pour afficher les erreurs pdo

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Et ceci en tout début de ton code pour affichers les erreurs

ini_set('display_errors','on'); error_reporting(E_ALL);
Ungarscool1, il y a 8 ans

C'est bon en fait, après avoir vu l'erreur il y avait un problème avec disqus-name. Merci de m'avoir aidé

PHP:

$req = $db->prepare('INSERT INTO news (title, video, auteur, desk, disqus_name, date_article) VALUES(?, ?, ?, ?, ?, NOW())'); $req->execute(array($titre, $video, $auteur, $desk, $video));

SQL:

-- -- Structure de la table `news` -- CREATE TABLE `news` ( `id` int(11) NOT NULL, `title` varchar(255) CHARACTER SET latin1 NOT NULL, `video` varchar(255) CHARACTER SET latin1 NOT NULL, `auteur` varchar(255) CHARACTER SET latin1 NOT NULL DEFAULT 'Ungarscool1', `desk` varchar(255) CHARACTER SET latin1 NOT NULL, `disqus_name` varchar(255) COLLATE utf8_bin NOT NULL, `date_article` date NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; -- -- Index pour la table `news` -- ALTER TABLE `news` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT pour les tables déchargées -- -- -- AUTO_INCREMENT pour la table `news` -- ALTER TABLE `news` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=32;COMMIT;