8791 sujets

Développement web côté serveur, CMS

[Précision préalable: je travaille très rarement avec PHP..] Smiley langue

Bonjour, j'organise une sorte d'agenda, et je rencontre des difficultés...

En local, tout fonctionne:

Une page pour lister mes événements
Un formulaire d'ajout
Un formulaire de modification
Un formulaire de suppression.

Vu que tout fonctionne en local je me décide d'exporter le tout chez mon hébergeur...
J'exécute fichier PHP suivant:


CREATE TABLE `organisation` (
  `id` int(11) NOT NULL auto_increment,
  `categorie` varchar(5) NOT NULL,
  `date` date NOT NULL,
  `titre` varchar(100) default NULL,
  `description` text,
  `adresse` varchar(200) default NULL,
  `contact` varchar(100) default NULL,
  `tel` varchar(20) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=123 ;


Le résultat, c'est que ma table organisation est crée, mais que mon champ DATE pose problème:

Lorsque j'essaie d'afficher ma liste d'événements, j'ai ceci comme message:
Unknown column 'DATE' in 'order clause'

Lorsque je remplis mon formulaire pour insérer des événements, j'ai ceci comme message: Unknown column 'date' in 'field list'

Auriez-vous une idée du stress? Je sèche....
Modifié par FranZz (09 Sep 2009 - 20:43)
Salut,

Le mot date est un mot réservé en SQL, donc si dans tes requêtes tu n'utilises pas de délimiteurs pour encadrer tes champs, tu t'exposes à de sévères ennuis.

Si tu nous montres une ou deux requêtes que tu exécutes on pourra peut-être penser à t'aider plus amplement.

La différence entre ton local et ton serveur vient (peut-être) de la différence des versions sur lesquelles tu travailles. Mais ça, encore une fois on ne peut que supposer, n'ayant que très peu d'informations.
<?php
mysql_connect("++++++", "+++++", "+++++");
mysql_select_db("++++++++");
$sql= "CREATE TABLE `organisation` (
`id` int(11) NOT NULL auto_increment,
`categorie` varchar(5) NOT NULL,
`date` date NOT NULL,
`titre` varchar(100) default NULL,
`description` text,
`adresse` varchar(200) default NULL,
`contact` varchar(100) default NULL,
`tel` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARSET=latin1 AUTO_INCREMENT=32 ;";

//exécution de la requête SQL:
mysql_query($sql);
mysql_close();
?>

Pour ce qui est de mon formulaire:
  $insertSQL = sprintf("INSERT INTO organisation (id, categorie, titre, date, description, adresse, tel, contact) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['id'], "int"),
					   GetSQLValueString($_POST['categorie'], "text"),
                       GetSQLValueString($_POST['titre'], "text"),
					   GetSQLValueString($_POST['date'], "date"),
                       GetSQLValueString($_POST['description'], "text"),
					   GetSQLValueString($_POST['adresse'], "text"),
					   GetSQLValueString($_POST['tel'], "text"),
                       GetSQLValueString($_POST['contact'], "text"));



J'utilise en local: Client MySQL: 5.0.41
Hébergeur:Client MySQL 4.0.24
Modifié par FranZz (09 Sep 2009 - 09:07)
Genre:

CREATE TABLE `organisation` (
  "id" int(11) NOT NULL auto_increment,
  "categorie" varchar(5) NOT NULL,
  "date" date NOT NULL,
  "titre" varchar(100) default NULL,


etc
Non, la création de la table est très bien comme ça ... Je parle de délimiteurs (cf la création de ta table) dans les requêtes que TOI tu fais, pas celles générées par phpMyAdmin qui sont propres.
Partie qui intéresse...

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO agenda (id, categorie, titre, date, description, adresse, tel, contact) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_POST['id'], "int"),
GetSQLValueString($_POST['categorie'], "text"),
GetSQLValueString($_POST['titre'], "text"),
GetSQLValueString($_POST['date'], "date"),
GetSQLValueString($_POST['description'], "text"),
GetSQLValueString($_POST['adresse'], "text"),
GetSQLValueString($_POST['tel'], "text"),
GetSQLValueString($_POST['contact'], "text"));

mysql_select_db($database_administration, $administration);
$Result1 = mysql_query($insertSQL, $administration) or die(mysql_error());

$insertGoTo = "agenda.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_administration, $administration);
$query_Recordset1 = "SELECT * FROM agenda";
$Recordset1 = mysql_query($query_Recordset1, $administration) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
Modifié par FranZz (09 Sep 2009 - 09:55)
Bonjour,

Non genre ça :

 $insertSQL = sprintf("INSERT INTO organisation (id, categorie, titre, ’date’, description, adresse, tel, contact) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", 
                       GetSQLValueString($_POST['id'], "int"), 
                       GetSQLValueString($_POST['categorie'], "text"), 
                       GetSQLValueString($_POST['titre'], "text"), 
                       GetSQLValueString($_POST['date'], "date"), 
                       GetSQLValueString($_POST['description'], "text"), 
                       GetSQLValueString($_POST['adresse'], "text"), 
                       GetSQLValueString($_POST['tel'], "text"), 
                       GetSQLValueString($_POST['contact'], "text"));
En testant, j'ai tjs le message suivant: Unknown column 'date' in 'field list'

Pourtant j'ai bien ceci
 ’date’,


Ce qui est lourd, c'est que ça fonctionne en local...

Pour mes autres formulaires, pas de prob, mais je n'utilisais pas la fonction date...

Après quelques tests, je pense que ma table est bien crée, mais que mon champ DATE est inexistant.

Je cherche un moyen de savoir quels champs sont présents dans cette table, mais je n'ai pas d'accès à une admin, je vais devoir faire ça à la main via PHP...
Modifié par FranZz (09 Sep 2009 - 10:23)
En fait ça devrait plutôt être :

 $insertSQL = sprintf("INSERT INTO organisation (id, categorie, titre, `date`, description, adresse, tel, contact) VALUES 

Mais perso je n'ai jamais eu de problèmes avec un champ qui s'appelait date...
OK, merci pour le coup de main collectif!

En fait, le stress venait de chez mon hébergeur.

Les permissions nécessaires à la création de tables n'étaient pas activées.

Mon stress est résolu et tout roule. Smiley biggol Smiley biggol
Modifié par FranZz (09 Sep 2009 - 20:42)