[RESOLU] erreur syntaxe SQL help me !!

Eléphanteau du PHP | 23 Messages

03 janv. 2013, 16:03

voila ce que me marque mon localhost quand je lance mes insert jai tout essayer dans le domaine de mes connaissance je réclame donc votre aide pour que je puisse faire aoutir mon projet merci d'avance et voila l'erreur ecrite en question :

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''statut_tbl' ('', raison, comments, choix, time) VALUES ( '', 'rend' at line 1"

je met ici mes script de page principale et la page d'insertion qui est senser les executer

pages principale
<?php

// DEBUG = 1 => on affiche les informations de debug
// DEBUG = 0 => on n'affiche pas les informations de debug
define('DEBUG',1);

echo "debug: ";
echo DEBUG;

//
// usage: sert à vérifier l'état d'une resource ( query sql, lien vers la db ... )
// 10/12/2012 
// 
function debug_request($resource,$type){

	if(DEBUG == 1){
		if($resource){
			echo $type.": ok";
		}
	}
}

// usage: connection à la base de données mysql
function openConnect(){
	$host	= 'localhost'; 
	$login 	= 'root'; 
	$pass 	= ''; 
	$dbname = "test";

	$link = mysql_connect($host, $login, $pass);
	
	if (!$link) {
		die('Could not connect: ' . mysql_error());
	}
	debug_request($link,"sql link");
	
	return $link;
}

function closeConnect($link){
	mysql_close($link);
}
$link = openConnect();
mysql_select_db('test',$link) or die('erreur selection db');

	
?>








<FORM Method="POST"
Action= "insertion2.php">
<P><INPUT Type="hidden" Name="insertion" Value="">

<P>raisons ?


annulation de rendez-vous <input type="radio" name="raison" checked value="annulation_de_rendez-vous" >
		rendez-vous <input type="radio" name="raison" value="rendez-vous" >
		autre service <input type="radio" name="raison" value="autre_service" >
		precision de rendez-vous <input type="radio" name="raison" checked value="precision_de_rendez-vous" >
		demarchage commerciale <input type="radio" name="raison" checked value="demarchage_commerciale" >
		renseignement medicaux <input type="radio" name="raison" checked value="reseignement_medicaux " >
		medecin voulant parler au radiologue <input type="radio" name="raison" checked value="medecin_voulant_parler_au_radiologue" >
		

		
<P>de quel medecin s'agit t'il ?
<P><SELECT Name="choix" size="3" multiple>

<option value="new_2.php">cabinet1</option>
    <option value="cabinet_2.php">cabinet2</option>
    <option value="cabinet_3.php">cabinet3</option>
	<option value="cabinet_4.php">cabinet4</option>
	<option value="cabinet_5.php">cabinet5</option>
	<option value="cabinet_6.php">cabinet6</option>
	<option value="cabinet_7.php">cabinet7</option>
	<option value="affichage_complet_medecin.php">cabinet ALL</option>
	

	
</SELECT>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>jQuery UI Datepicker - Default functionality</title>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="/resources/demos/style.css" />
    <script>
    $(function() {
        $( "#datepicker" ).datepicker();
    });
    </script>
</head>
<body>
 
<p>Date: <input type="text" id="datepicker" name= "time" /></p>
 
 
</body>
</html>

<P>commentaire? (facultatif)<BR>
<TEXTAREA Name="comments" rows="4" cols="20"></TEXTAREA>
<P><INPUT Type="submit" Value="inscrire">
<input type="button" value="page précédente" onclick="javascript:history.back()">
</FORM> 

PAGE D'INSERTION
<?php

// DEBUG = 1 => on affiche les informations de debug
// DEBUG = 0 => on n'affiche pas les informations de debug
define('DEBUG',1);

echo "debug: ";
echo DEBUG;

//
// usage: sert à vérifier l'état d'une resource ( query sql, lien vers la db ... )
// 10/12/2012 
// 
function debug_request($resource,$type){

	if(DEBUG == 1){
		if($resource){
			echo $type.": ok";
		}
	}
}

// usage: connection à la base de données mysql
function openConnect(){
	$host	= 'localhost'; 
	$login 	= 'root'; 
	$pass 	= ''; 
	$dbname = "test";

	$link = mysql_connect($host, $login, $pass);
	
	if (!$link) {
		die('Could not connect: ' . mysql_error());
	}
	debug_request($link,"sql link");
	
	return $link;
}

function closeConnect($link){
	mysql_close($link);
}
$link = openConnect();
mysql_select_db('test',$link) or die('erreur selection db');

	
?>



<?php
 
 
 //récupération des valeurs des champs:
  $id = '';
  $id_raison = $_POST["raison"]  ;
  $explication = $_POST["comments"] ;
  $id_client = $_POST["choix"] ;
  $datetime = $_POST["time"];
 
 
 
  
 if (isset($_POST["id_client"]))

 
{
          // Instructions si $_POST['id_client'] existe
}


  //création de la requête SQL:
  $sql = "INSERT INTO 'statut_tbl' ('', raison, comments, choix, time)
            VALUES ( '$id', '$id_raison', '$explication', '$id_client', '$datetime', getdate() );";
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $link) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>

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

03 janv. 2013, 23:22

salut,

c'est simple tu utilise des ' autours du noms de la table hors les ' ne servent qu'a délimiter une chaîne de caractère et rien d'autre !


le caractère que tu peux voir dans cette situation c'est une "back quote" ( touche 'alt gr' + le 4)


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

Eléphanteau du PHP | 23 Messages

04 janv. 2013, 10:58

Cela veut dire que je dois mettre ses "back quote" entre ma requete insert ?

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 11:28

Exemple :
SELECT `unChamps` FROM `uneTable` WHERE `unAutreChamps` = 'une chaîne de caractères';

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

04 janv. 2013, 11:54

Cela veut dire que je dois mettre ses "back quote" entre ma requete insert ?

non c'est une utilisation, pour moi, a proscrire car cela indique que tu ne sais pas nommer un champ (par exemple utiliser datenaissance, ou dtdebutcontrat que simplement date qui est un mot clef réservé, même chose pour les noms de tables).
Il est toujours intéressant d’avoir des noms de champs explicite et donc bien nommé (on peux aussi éviter les abréviations foireuses comprises que par les seuls initiés ... ;) ).

et comme déja dit ton nom de table (statut_tbl) n'est pas un clef SQL donc aucun intérêt ;)

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

Eléphanteau du PHP | 23 Messages

04 janv. 2013, 12:02

pour xTG

je ne comprend pas vraiment vu que je suis pas en train de vouloir inserer une seule infomation il y en a plusieurs quand je clic sur tel cabinet pour tel raison pour tel dates mais maintenant il me dit

Unknown column 'raison' in 'field list'

je désespère surtout quand ses vraiment sur la fin =(

pour Mooglie

bah plus sa va plus je me perd personnelement lol , je sais plus quoi faire ....
<?php

// DEBUG = 1 => on affiche les informations de debug
// DEBUG = 0 => on n'affiche pas les informations de debug
define('DEBUG',1);

echo "debug: ";
echo DEBUG;

//
// usage: sert à vérifier l'état d'une resource ( query sql, lien vers la db ... )
// 10/12/2012 
// 
function debug_request($resource,$type){

	if(DEBUG == 1){
		if($resource){
			echo $type.": ok";
		}
	}
}

// usage: connection à la base de données mysql
function openConnect(){
	$host	= 'localhost'; 
	$login 	= 'root'; 
	$pass 	= ''; 
	$dbname = "test";

	$link = mysql_connect($host, $login, $pass);
	
	if (!$link) {
		die('Could not connect: ' . mysql_error());
	}
	debug_request($link,"sql link");
	
	return $link;
}

function closeConnect($link){
	mysql_close($link);
}
$link = openConnect();
mysql_select_db('test',$link) or die('erreur selection db');

	
?>








<FORM Method="POST"
Action= "insertion2.php">
<P><INPUT Type="hidden" Name="insertion" Value="">

<P>raisons ?


annulation de rendez-vous <input type="radio" name="raison" checked value='annulation_de_rendez-vous' >
		rendez-vous <input type="radio" name="raison" value="rendez-vous" >
		autre service <input type="radio" name="raison" value='autre_service' >
		precision de rendez-vous <input type="radio" name="raison" checked value='precision_de_rendez-vous' >
		demarchage commerciale <input type="radio" name="raison" checked value='demarchage_commerciale' >
		renseignement medicaux <input type="radio" name="raison" checked value='reseignement_medicaux ' >
		medecin voulant parler au radiologue <input type="radio" name="raison" checked value='medecin_voulant_parler_au_radiologue' >
		

		
<P>de quel medecin s'agit t'il ?
<P><SELECT Name="choix" size="3" multiple>

<option value="new_2.php">cabinet1</option>
    <option value="cabinet_2.php">cabinet2</option>
    <option value="cabinet_3.php">cabinet3</option>
	<option value="cabinet_4.php">cabinet4</option>
	<option value="cabinet_5.php">cabinet5</option>
	<option value="cabinet_6.php">cabinet6</option>
	<option value="cabinet_7.php">cabinet7</option>
	<option value="affichage_complet_medecin.php">cabinet ALL</option>
	

	
</SELECT>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>jQuery UI Datepicker - Default functionality</title>
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="/resources/demos/style.css" />
    <script>
    $(function() {
        $( "#datepicker" ).datepicker();
    });
    </script>
</head>
<body>
 
<p>Date: <input type="text" id="datepicker" name= "time" /></p>
 
 
</body>
</html>

<P>commentaire? (facultatif)<BR>
<TEXTAREA Name="comments" rows="4" cols="20"></TEXTAREA>
<P><INPUT Type="submit" Value="inscrire">
<input type="button" value="page précédente" onclick="javascript:history.back()">
</FORM> 

<?php

// DEBUG = 1 => on affiche les informations de debug
// DEBUG = 0 => on n'affiche pas les informations de debug
define('DEBUG',1);

echo "debug: ";
echo DEBUG;

//
// usage: sert à vérifier l'état d'une resource ( query sql, lien vers la db ... )
// 10/12/2012 
// 
function debug_request($resource,$type){

	if(DEBUG == 1){
		if($resource){
			echo $type.": ok";
		}
	}
}

// usage: connection à la base de données mysql
function openConnect(){
	$host	= 'localhost'; 
	$login 	= 'root'; 
	$pass 	= ''; 
	$dbname = "test";

	$link = mysql_connect($host, $login, $pass);
	
	if (!$link) {
		die('Could not connect: ' . mysql_error());
	}
	debug_request($link,"sql link");
	
	return $link;
}

function closeConnect($link){
	mysql_close($link);
}
$link = openConnect();
mysql_select_db('test',$link) or die('erreur selection db');

	
?>



<?php
 
 
 //récupération des valeurs des champs:
  $id_raison = $_POST["raison"]  ;
  $explication = $_POST["comments"] ;
  $id_client = $_POST["choix"] ;
  $datetime = $_POST["time"];
 
 
 
  
 if (isset($_POST["id_client"]))

 
{
          // Instructions si $_POST['id_client'] existe
}


  //création de la requête SQL:
  $sql = "INSERT INTO statut_tbl(raison,comments,choix,time)
            VALUES('$id_raison','$explication','$id_client','$datetime');";
 
  //exécution de la requête SQL:
  $requete = mysql_query($sql, $link) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a été correctement effectuée") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 12:31

Tu n'as à priori pas de champs de ce nom dans ta table.
Vérifies l'orthographe ou bien l'emplacement de ce champs dans ta base de données (quelle table).

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

04 janv. 2013, 12:49

si tu nous montre le ddl (create table si tu préfère) de la table statut_tbl on y verra plus clair ;)


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

Eléphanteau du PHP | 23 Messages

04 janv. 2013, 13:21

bah les tables (3) je les cree directement a partir de phpmy admins =s

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 13:52

bah les tables (3) je les cree directement a partir de phpmy admins =s
Tu peux avoir le CREATE TABLE avec la fonction exporter.

Eléphanteau du PHP | 23 Messages

04 janv. 2013, 15:08

-- phpMyAdmin SQL Dump
-- version 3.5.1
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le: Ven 04 Janvier 2013 à 13:10
-- Version du serveur: 5.5.24-log
-- Version de PHP: 5.4.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT=0;
START TRANSACTION;
SET time_zone = "+00:00";

--
-- Base de données: `test`
--

-- --------------------------------------------------------

--
-- Structure de la table `statut_tbl`
--
-- Création: Jeu 29 Novembre 2012 à 13:13
--

CREATE TABLE IF NOT EXISTS `statut_tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_raison` int(11) NOT NULL,
  `explication` varchar(200) COLLATE latin7_general_cs NOT NULL,
  `id_client` int(11) NOT NULL,
  `datetime` datetime NOT NULL,
  `completed` smallint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin7 COLLATE=latin7_general_cs AUTO_INCREMENT=14 ;

--
-- Contenu de la table `statut_tbl`
--

INSERT INTO `statut_tbl` (`id`, `id_raison`, `explication`, `id_client`, `datetime`, `completed`) VALUES
(3, 6, '', 1, '2012-12-20 00:00:00', 1),
(4, 6, 'RIEN', 1, '2012-12-05 00:00:00', 1),
(5, 6, 'empechement..', 1, '2012-12-18 00:00:00', 1),
(6, 5, 'veut savoir a quel heure es son rdv', 2, '2012-12-25 00:00:00', 1),
(7, 1, 'immobilisé pour cause de neige', 5, '2012-12-20 00:00:00', 1),
(8, 5, 'EXEMPLE 3', 3, '2012-12-28 00:00:00', 1),
(9, 3, 'EXEMPLE 4', 4, '2012-12-29 00:00:00', 1),
(10, 2, 'EXEMPLE ', 6, '2012-12-30 00:00:00', 1),
(11, 7, 'EXEMPLE', 7, '2012-12-08 00:00:00', 1);
COMMIT;
voila ce que sa donne =s

ViPHP
xTG
ViPHP | 7331 Messages

04 janv. 2013, 15:24

`id_raison` int(11) NOT NULL,
Le champ a donc été mal orthographié, c'est id_raison et non raison qu'il faut mettre dans ta requête. ;)

Eléphanteau du PHP | 23 Messages

04 janv. 2013, 15:32

Notice: Undefined index: datetime in C:\wamp\www\tests\insertion2.php on line 59
Call Stack
# Time Memory Function Location
1 0.0014 148064 {main}( ) ..\insertion2.php:0


je me retrouve avec le problème de la date maintenant =s
plus j'avance plus le nombre d'erreur suive aussi

l'erreur ce situe ici

<?php
 
 
 //récupération des valeurs des champs:
  $id_raison = $_POST["id_raison"]  ;
  $explication = $_POST["explication"] ;
  $id_client = $_POST["id_client"];
  $datepicker = $_POST["datetime"] ;
  $requete = $_POST["insertion"] ;
 
 
  



  //création de la requête SQL:
  $requete = "INSERT INTO statut_tbl(id_raison,explication,id_client,datetime)
            VALUES('$id_raison','$explication','$id_client','$datepicker');";
 
  //exécution de la requête SQL:
  $requete = mysql_query($requete, $link) or die( mysql_error() ) ;
 
  //affichage des résultats, pour savoir si l'insertion a marchée:
  if($requete)
  {
    echo("L'insertion a ete correctement effectuee") ;
  }
  else
  {
    echo("L'insertion à échouée") ;
  }
?>
pour xTG

merci je ne l'avais meme pas vu erreur de concentration lol

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

05 janv. 2013, 12:23

Le champs datetile n'existe pas dans le formulaire .......


Je te conseil de revoir des toto sur la validation de formulaire en php, par exemple sur http://phpdebutant.org.

Il faut toujours vérifier l'existance d'une index sur des tableaux fournis par l'utilisateur (get, post, cookie....) car tu ne sera jamais certain que le formulaire sera complet !
Pour cela utilisé les fonctions isset ou empty suivant ton besoin.


Dernie chose, il ne faut jamais utiliser directement les valeurs fournies par l'utilisateur dans une requête sql car cela cré une faille (sql donc :)).

Afin de protéger tes requêtes tu peux utiliser mysql_real_escape_string sur les données.
De plus l'extension mysql est dépréciée il est préférable de lui préférer l'extension mysqli ou même l'extension PDO.

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

Eléphanteau du PHP | 23 Messages

14 janv. 2013, 11:24

merci beaucoup pour toute l'aide que vous m'apportez cependant

je n'est plus aucun code erreur de syntaxe ou autre il m'indique que l'insertion ses correctement effectuer mais quand je regarde sur phpmyadmin je n'est que lee commentaire qui s'affiche , je n'est ni mon code client ni mon code raison jai juste des 0 qui s'affiche pareille pour les dates je n'est que des 00-00-0000 =(