Bonjour,
Je suis un petit nouveau sur le forum, je voulais en premier lieu remercier l'auteur pour ces super tutos.
Mon petit souci est que je n'arrive pas à faire un INSERT INTO avec PDO, je n'ai n'y erreur ni entrée dans la bdd, je vois pas ou se trouve l'erreur.
Index.php
<?php
session_start();
// Instance PDO
try
{
$PDO = new PDO('mysql:host=localhost;dbname=sco','root','');
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}
catch(PDOExeption $e)
{
echo 'Connexion impossible';
}
// Class Auth
require "includes/class.auth.php";
if(!isset($_GET['p'])){$_GET['p']="home";}
if(!file_exists("content/".$_GET['p'].".php")){$_GET['p']="404";}
ob_start();
include "content/".$_GET['p'].".php";
$_content_for_layout=ob_get_contents();
ob_end_clean();
?>
<?php include('includes/header.php'); ?>
<?php include('includes/nav.php'); ?>
<section>
<?php echo $_content_for_layout; ?>
<!--<h1>SESSION</h1>
<pre><?php /*print_r($_SESSION);*/ ?></pre>-->
</section>
<?php include('includes/footer.php'); ?>
livreor.php
<?php if($Auth->user('role') >= 'admin'): ?>
<article class="login">
<form class="form" id="login" method="POST" action="index.php?p=livreor">
<div id="error"><?php echo $error; ?></div>
<fieldset id="inputs">
<p class="">
<input type="text" placeholder="<?php echo $Auth->user('login'); ?>" autofocus required name="pseudo" id="pseudo" disabled="disabled" />
</p>
<p class="">
<label>Message</label> : <br />
<textarea name="message" id="message"></textarea><br />
</p>
<p class="submit">
<input type="submit" value="Envoyer" />
</p>
</fieldset>
</form>
</article>
<?php endif; ?>
<article>
<?php if(!$Auth->user('role') == 'member'): ?>
<p>Pour poster un message, vous devez être connecter <a href="index.php?p=login">Se connecter</a></p>
<?php endif; ?>
<?php
$select = $PDO->prepare('SELECT pseudo, message, role_id, DATE_FORMAT(date, "%d-%m-%Y") AS datefr FROM livreor ORDER BY date');
$select->execute();
while($users = $select->fetch(PDO::FETCH_OBJ)){
if($users->role_id == 1){
?>
<div class="oval-admin">
<p class="pseudo"><?php echo $users->pseudo; ?>
<span class="date"><?php echo $users->datefr; ?></span></p>
<p><?php echo $users->message; ?></p>
</div>
<?php }else{?>
<div class="oval-member">
<p class="pseudo"><?php echo $users->pseudo; ?>
<span class="date"><?php echo $users->datefr; ?></span></p>
<p><?php echo $users->message; ?></p>
</div>
<?php
}
};
?>
</article>
trait_livreor.php
<?php
$error="";
if(isset($_POST['submit']))
{
$pseudo=htmlspecialchars(trim($_POST['pseudo']));
$message=htmlentities(trim($_POST['message']));
if($pseudo&&$message)
{
$insert = $PDO->prepare('INSERT INTO livreor (pseudo, message, role_id)
VALUES(:pseudo, :message, :role_id');
$insert->execute(array(
':pseudo' => $pseudo,
':message' => $message,
':role_id' => $Auth->user('id')
));
/*header('Location:index.php?p=livreor');*/
}else $error = "Veuillez saisir tous les champs";
}
?>
Merci pour votre aide.
Merci Crisou, j'ai réécrit 4 fois ma requête et 4 fois la même erreur. manque de concentration.
Merci beaucoup, ça fonctionne.
Yop, sans avoir utilisé ton code, je vois que tu fais une vérification sur $_POST['submit']
(trait_livreor.php) ok mais je ne vois aucune balises dans ton <form>
qui contient l'attribut name="submit"
. Le soucis est là ,)
Salut PhiSyX,
Merci, effectivement oubli de ma part, cependant mon code ne fonctionne toujours et je ne vois aucunes erreurs.
Merci d'avance.
l'id est pas en autoincremente et clé primaire dans ta base de données ?
si c'est le cas tu peux pas inserer une valeur je pense. sinon je pense que c'est pas un insert into qu'il faut faire mais un update.
Autant pour moi je suis hors sujet :) tu précises pas l'id.
Est-ce que tu inclus ton fichier trait_livreor.php ou pas?
Sinon peut-être que tu dois modifier ton action (du formulaire) et y mettre le chemin accessible vers trait_livreor.php
Dans action du form je mets index.php?p=trait_livreor,j'ai essayer de touts mettre sur la même page et que le traitement ce fasse dans le même fichier mais j'ai exactement le même problème.
Merci d'avance.
Merci Seenok,
l'id est en autoincrément mais par sécurité j'ai vérifier :-)
Merci quand même
if($pseudo&&$message)
Es tu sur de pouvoir l'écrire comme ça ? Et non pas :
if(!empty($pseudo) && !empty($message))
De plus j'ai cru voir quelques problèmes dans ce bout de code :
<?php if($Auth->user('role') >= 'admin'): ?>
<form class="form" id="login" method="POST" action="index.php?p=livreor">
<input type="text" placeholder="<?php echo $Auth->user('login'); ?>" autofocus required name="pseudo" id="pseudo" disabled="disabled" />
<textarea name="message" id="message"></textarea><br />
</form>
<?php endif; ?>
Salut Benjamin Derepas,
Merci pour ta réponse.
Oui je peux écrire comme ça :
ce bout d ecode fonctionne.
if($pseudo&&$message)
ce bout de code fonctionne.
pour la partie Auth, j'ai effectivement ce code, si je me logue en admin j'ai le formulaire de saisi qui s'affiche sinon il me demande de me connecter.
ce bout de code fonctionne.
<?php if($Auth->user('role') >= 'admin'): ?>
<form class="form" id="login" method="POST" action="index.php?p=livreor">
<input type="text" placeholder="<?php echo $Auth->user('login'); ?>" autofocus required name="pseudo" id="pseudo" disabled="disabled" />
<textarea name="message" id="message"></textarea><br />
</form>
<?php endif; ?>
oui effectivement j'ai remis en ordre mon bout de code (petite erreur)
<p class="">
<input type="text" name="pseudo" id="pseudo" value="<?php echo $Auth->user('login'); ?>" />
</p>
je ne trouve pas ce qui cloche.
Merci d'avance.
J'ai tous mis sur une seul page traitement compris pour voir ce qui cloche :
<?php if($Auth->user('role') >= 'admin'): ?>
<?php
$error="";
if(isset($_POST['submit']))
{
$pseudo=htmlspecialchars(trim($_POST['pseudo']));
$message=htmlentities(trim($_POST['message']));
if($pseudo&&$message)
{
$insert = $PDO->prepare('INSERT INTO livreor (pseudo, message, role_id)
VALUES(:pseudo, :message, :role_id');
$insert->execute(array(
':pseudo' => $pseudo,
':message' => $message,
':role_id' => $Auth->user('id')
));
/*header('Location:index.php?p=livreor');*/
}else $error = "Veuillez saisir tous les champs";
}
?>
<article class="login">
<form class="form" id="login" method="POST" action="index.php?p=livreor">
<div id="error"><?php echo $error; ?></div>
<fieldset id="inputs">
<p class="">
<input type="text" name="pseudo" id="pseudo" value="<?php echo $Auth->user('login'); ?>" />
</p>
<p class="">
<label>Message</label> : <br />
<textarea name="message" id="message"></textarea><br />
</p>
<p class="submit">
<input id="submit" type="submit" value="Envoyer" name="submit" />
<div id="error"><?php echo $error; ?></div>
</p>
</fieldset>
</form>
</article>
<?php endif; ?>
<article>
<?php if(!$Auth->user('role') == 'member'): ?>
<p>Pour poster un message, vous devez être connecter <a href="index.php?p=login">Se connecter</a></p>
<?php endif; ?>
<?php
$select = $PDO->prepare('SELECT pseudo, message, role_id FROM livreor');
$select->execute();
while($users = $select->fetch(PDO::FETCH_OBJ)){
if($users->role_id == 1){
?>
<div class="oval-admin">
<p class="pseudo"><?php echo $users->pseudo; ?>
<span class="date"><?php echo $users->datefr; ?></span></p>
<p><?php echo $users->message; ?></p>
</div>
<?php }else{?>
<div class="oval-member">
<p class="pseudo"><?php echo $users->pseudo; ?>
<span class="date"><?php echo $users->datefr; ?></span></p>
<p><?php echo $users->message; ?></p>
</div>
<?php
}
};
?>
</article>
et ma table sql "livreor"
-- phpMyAdmin SQL Dump
-- version 4.4.7
-- http://www.phpmyadmin.net
--
-- Client : localhost
-- Généré le : Ven 04 Mars 2016 à 21:23
-- Version du serveur : 5.5.44-MariaDB
-- Version de PHP : 5.5.31
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Base de données : `sco`
--
-- --------------------------------------------------------
--
-- Structure de la table `livreor`
--
CREATE TABLE IF NOT EXISTS `livreor` (
`id` int(11) NOT NULL,
`pseudo` varchar(255) NOT NULL,
`message` text NOT NULL,
`role_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
--
-- Contenu de la table `livreor`
--
INSERT INTO `livreor` (`id`, `pseudo`, `message`, `role_id`) VALUES
(11, 'admin', 'tes tes ttest est set set', 1);
--
-- Index pour les tables exportées
--
--
-- Index pour la table `livreor`
--
ALTER TABLE `livreor`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT pour les tables exportées
--
--
-- AUTO_INCREMENT pour la table `livreor`
--
ALTER TABLE `livreor`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=12;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Merci d'avance
Bonjour,
je suis toujours bloqué sur ce INSERT INTO et je ne sais pas du tout quoi faire.
j'ai mis un print_r de :
J'ai comme l'impression qu'il ne prend pas en compte :
$insert->execute(array(
':pseudo' => $pseudo,
':message' => $message,
':role_id' => $Auth->user('id')
));
Merci pour votre aide.
Si tu remplaces ceci
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
par cela
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTIONWARNING);
(enleve le derniere WARNING, je n'arrive pas a l'editer avec mon telephone....)
Et que tu rajoutes ceci avant ton code
error_reporting(E_ALL);
ini_set("display_errors", "on");
As-tu des erreurs d'affichés ?
Salut Crisou,
Merci pour ton aide, j'ai remplacé comme ci-dessu et j'ai le message suivant :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 2' in /volume1/web/sco/content/livreor.php:24 Stack trace: #0 /volume1/web/sco/content/livreor.php(24): PDOStatement->execute(Array) #1 /volume1/web/sco/index.php(22): include('/volume1/web/sc...') #2 {main} thrown in /volume1/web/sco/content/livreor.php on line 24
la ligne 24 correspond à la fermeture du code ci-dessous :
$insert->execute(array(
':pseudo' => $pseudo,
':message' => $message,
':role_id' => $Auth->user('id')
)); /* La ligne 24 */
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 2
montre nous ta requete SQL car defois l'erreur vient d'une des lignes précédente q la ligne indiquée
fichier index :
<?php
session_start();
// Instance PDO
try
{
$PDO = new PDO('mysql:host=localhost;dbname=sco','root','');
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}
catch(PDOExeption $e)
{
echo 'Connexion impossible';
}
// Class Auth
require "includes/class.auth.php";
if(!isset($_GET['p'])){$_GET['p']="home";}
if(!file_exists("content/".$_GET['p'].".php")){$_GET['p']="404";}
ob_start();
include "content/".$_GET['p'].".php";
$_content_for_layout=ob_get_contents();
ob_end_clean();
?>
<?php include('includes/header.php'); ?>
<?php include('includes/nav.php'); ?>
<section>
<?php echo $_content_for_layout; ?>
<!--<h1>SESSION</h1>
<pre><?php /*print_r($_SESSION);*/ ?></pre>-->
</section>
<?php include('includes/footer.php'); ?>
fichier livreor :
<?php
error_reporting(E_ALL);
ini_set("display_errors", "on");
$error="";
if(isset($_POST['submit']))
{
$pseudo=htmlspecialchars(trim($_POST['pseudo']));
$message=htmlentities(trim($_POST['message']));
if($pseudo&&$message)
{
$insert = $PDO->prepare('INSERT INTO livreor (pseudo, message, role_id)
VALUES(:pseudo, :message, :role_id');
$insert->execute(array(
':pseudo' => $pseudo,
':message' => $message,
':role_id' => $Auth->user('id')
));
echo "Insertion réussi";
/*header('Location:index.php?p=livreor');*/
}else $error = "Veuillez saisir tous les champs";
}
?>
Merci pour ton aide.