Page 1 sur 1

Valeur par defaut

Posté : 07 avr. 2006, 18:38
par Chile
Bonjour,
Je veux inserer une valeur par defaut dans ma table (avec phpMyadmin), une pour un nom d'image et une pour son chemin, (ainsi si je n'ai pas d'image lors de l'envoie de mon formulaire, j'aurais une image par defaut).
Mais j'ai un message d'erreur de phpmyadmin :

Code : Tout sélectionner

Erreur requête SQL : ALTER TABLE `bpays` CHANGE `chemin` `chemin` TEXT DEFAULT './images/' MySQL a répondu: #1101 - BLOB column 'chemin' can't have a default value
merci de votre aide

Posté : 07 avr. 2006, 20:48
par Cyrano
Le message d'erreur est clair : un champ de type TEXT ou BLOB ne peut pas avoir de valeur par défaut.

Pour un champ qui ne doit contenir en plus qu'un simple chemin vers une image, la taille de champ TEXT est largement exagérée, tu pourrais mettre un type VARCHAR(255) qui suffirait largement et là, tu pourrais avoir une valeur par défaut. (Des url de 255 caractères ou davantage sont plutôt rares)

Posté : 07 avr. 2006, 22:02
par Invité
salut Cyrano,
j'ai suivi tes conseils et j'ai retouché la structure de la table et la valeur par defaut est acceptée.
par contre dans la pratique, si je laisse les deux champs de mon formulaire (photo et chemain), vide, je ne retrouve pas la valeur par defaut a la place dans la table.
dois je aussi retoucher mon code de formulaire ?
le voici au niveau de l'insert :
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO bpays (id, pays, site, photo, chemin) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['id'], "int"), 
                       GetSQLValueString($_POST['pays'], "text"), 
                       GetSQLValueString($_POST['site'], "text"), 
                       GetSQLValueString($nomFichier, "text"), // utilisation des variables nom 
                       GetSQLValueString($chemin, "text")); // et chemin 

Posté : 07 avr. 2006, 22:16
par Cyrano
Fais donc voir la structure de ta table (fais un export de la structure)

Posté : 07 avr. 2006, 22:25
par Chile
dac, la voici :

Code : Tout sélectionner

Structure de la table `bpays` # CREATE TABLE `bpays` ( `id` int(11) NOT NULL auto_increment, `pays` text, `site` text, `photo` varchar(50) default 'remplac.jpg', `chemin` varchar(50) default './images/', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=118 ; # # Contenu de la table `bpays` # INSERT INTO `bpays` VALUES (48, 'chili', 'montagne', '3.jpg', './images/'); INSERT INTO `bpays` VALUES (47, 'chili', 'cote', '2.jpg', './images/'); INSERT INTO `bpays` VALUES (46, 'chili', 'desert', '6.gif', './images/'); INSERT INTO `bpays` VALUES (44, 'chili', 'montagne', '1.jpg', './images/'); INSERT INTO `bpays` VALUES (45, 'chili', 'cote', '5.jpg', './images/'); INSERT INTO `bpays` VALUES (36, 'espagne', 'cote', '3.jpg', './images/'); INSERT INTO `bpays` VALUES (35, 'espagne', 'desert', '2.gif', './images/'); INSERT INTO `bpays` VALUES (53, 'argentine', 'montagne', '4.jpg', './images/'); INSERT INTO `bpays` VALUES (50, 'chili', 'montagne', '3.jpg', './images/'); INSERT INTO `bpays` VALUES (51, 'chili', 'montagne', '7.jpg', './images/'); INSERT INTO `bpays` VALUES (52, 'chili', 'montagne', '1.jpg', './images/'); INSERT INTO `bpays` VALUES (54, 'argentine', 'cote', '5.jpg', './images/'); INSERT INTO `bpays` VALUES (55, 'chile', 'cote', '5.jpg', './images/'); INSERT INTO `bpays` VALUES (56, 'france', 'cote', '2.jpg', './images/'); INSERT INTO `bpays` VALUES (57, 'espagne', 'cote', '4.jpg', './images/');

Posté : 07 avr. 2006, 22:44
par Cyrano
Ok, la structure est correcte, mais en revoyant la requête, je note un détail : correction:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQL = sprintf("INSERT INTO bpays (id, pays, site, photo, chemin) VALUES (%s, '%s', '%s', '%s', '%s')",
                       GetSQLValueString($_POST['id'], "int"),
                       GetSQLValueString($_POST['pays'], "text"),
                       GetSQLValueString($_POST['site'], "text"),
                       GetSQLValueString($nomFichier, "text"), // utilisation des variables nom
                       GetSQLValueString($chemin, "text")); // et chemin

Posté : 07 avr. 2006, 23:09
par Chile
j'ai effectué la modif sur cette ligne :
$insertSQL = sprintf("INSERT INTO bpays (id, pays, site, photo, chemin) VALUES (%s, '%s', '%s', '%s', '%s')",
mais j'ai cette eurreur lorsque j'envoie le formulaire :

Code : Tout sélectionner

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 'argentine'', ''amazonie'', 'NULL', 'NULL')' at line 1
ai je oublié qlq chose !!??:(

Posté : 08 avr. 2006, 00:05
par Cyrano
Je viens de réaliser un truc, il faut que ta structure ressemble à ceci:

Code : Tout sélectionner

CREATE TABLE `bpays` ( `id` int(11) NOT NULL auto_increment, `pays` text, `site` text, `photo` varchar(50) NOT NULL default 'remplac.jpg', `chemin` varchar(50) NOT NULL default './images/', PRIMARY KEY (`id`) ) TYPE=MyISAM AUTO_INCREMENT=118
On ajoute "NOT NULL"

Ensuite enlève le NULL entre les guillemets dans la requête d'insertion : si tu n'envoies rien du tout, alors la valeur par défaut sera utilisée.