Bonjour,
Je me suis trouvé avec un problème avec PDO
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>
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);
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;
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... ));
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.
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é.
Tu veux voir le fichier sql ou un screen (les lignes dans le fichier sql seront enlevé pour éviter les problèmes)
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());
}
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.
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
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".
J'ai ajouté ce que tu as mis mais rien ne s'affiche
if (!$req) {
echo "\nPDO::errorInfo():\n";
print_r($bd->errorInfo());
}
Je parlais de ceci : "date" est réservé à SQL donc il vaut mieux le modifier comme "date_article".
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=***', '***', '********');