Page 1 sur 2

petit soucis d'insert à l'inscrition?

Posté : 30 sept. 2007, 22:25
par Invité
Bonjour,
j'ai un petit soucis pour insérer une variable SUPPLEMENTAIRE en base selon le sexe de la personne qui s'inscrit.. (et que je ne connais pas par défaut !)

morceau de code qui fonctionne
<?php
include 'connexion.php';
if(isset($_POST['pseudo']))$login=$_POST['pseudo'];
else $login="";
if(isset($_POST['passe']))$passe=$_POST['passe'];
else $passe="";
if(isset($_POST['email']))$email=$_POST['email'];
else $email="";
if(isset($_POST['sexe']))$sexe=$_POST['sexe'];
else $sexe="";
bla bla bla...
$sql = "INSERT INTO membres(id, pseudo, passe, email, sexe , date_inscri) VALUES ('','$login','$passe','$email', '$sexe',  NOW())";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
  
include 'bravo.php';
mysql_close();
?>

et je voudrais insérer en base un truc de ce genre

$sexe= $data['sexe'];
switch ($sexe){
case "h":
$maj =  mysql_query("INSERT INTO membres(aspect) VALUES ('./aspect/aspect1.gif')") or die(mysql_error());
break;
case "f":
$maj2 =  mysql_query("INSERT INTO membres(aspect) VALUES ('./aspect/aspect2.gif')") or die(mysql_error());
break;
}
include ("bravo.htm");
mysql_close();
?>
Ca fait quelques heures que je tourne autour...
je suis passé par un autre fichier via un include, au pire cela fonctionne mais me rajoute une ligne à vide en base avec seulement ma variable "aspect1 ou aspect2) mais sans les autres parametres de la personne inscrite :oops:

Posté : 30 sept. 2007, 23:12
par ouckileou
Chaque INSERT insère une ligne, tu dois insérer tout ce que tu veux en même temps, ou faire un UPDATE après. Autant insérer tout en même temps.

Deux remarques :
- tu utilises un switch ou tu réécris à chaque fois toute la requête. Tu ferais mieux d'avoir un if (il n'y a que 2 sexes hein :)) où tu concatènes la bonne valeur à insérer à un seul corps de requête. exemple:
$sql = "INSERT INTO profil (col1, col2, col3) VALUES ('".$truc1."'".$truc2."'";
if ($sexe == 'h') {
   $sql.= "pictoH.jpg";
} else {
   $sql.= "pictoF.jpg";
}
$sql .= "')";
- pourquoi ne pas stocker tout simplement le sexe ? Et gérer les différences au niveau de l'affichage ? Si tu stockais une nationalité, tu ne stockerais pas le nom de l'image de chaque pays :)

Posté : 01 oct. 2007, 08:11
par netsupra
Salut,
pense a protéger ta requête contre les injections SQL...
netsupra

Posté : 01 oct. 2007, 21:20
par Invité
Erreur SQL INSERT INTO membres(id, pseudo, passe, email, sexe, age, avatar, date_inscri) VALUES ('','supertesteuse','sup75','[email protected]', 'femme','99','205.gif', NOW())./aspect/aspect1.gif')
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 './aspect/aspect1.gif')' at line 1

Apparemment, il prend par défaut "aspect1.gif" à chaque fois meme si au départ sexe=f...

Si je veux procéder ainsi, c'est seulement que si je stocke uniquement le sexe du joueur, cela ne conviendra pas sachant que son apparence (aspect1 ou aspect2.gif) peut varier au fil du temps, selon ce que la personne portera, etc (il s'agit bien sur d'1 jeu de role, action)...

Posté : 02 oct. 2007, 10:52
par jojolapine
ouckileou, t'as oublié un "=" dans ton if...

Posté : 02 oct. 2007, 13:19
par iclo
Invité : il te manque une "simple quote", juste avant le chemin de ton fichier et et tu as un point à la place d'une virgule; (De même, je me demande si tu n'as pas inversé la date d'incription et l'avatar entre la liste de champs et les valeurs que tu passes dans la requêtte)

Code : Tout sélectionner

INSERT INTO membres(id, pseudo, passe, email, sexe, age, date_inscri,avatar) VALUES ('','supertesteuse','sup75','[email protected]', 'femme','99','205.gif', NOW()),'aspect/aspect1.gif')

Posté : 02 oct. 2007, 14:21
par ouckileou
ouckileou, t'as oublié un "=" dans ton if...
c'est vrai, je corrige :)

Posté : 02 oct. 2007, 21:36
par Invité
Plus de message d'erreur, insertion en base ok sauf qu'il manque le fichier "aspectx.gif" en base :(


$sql = "INSERT INTO membres(id, pseudo, passe, email, sexe, age, avatar, date_inscri) VALUES ('','$login','$passe','$email', '$sexe','$age','$typeava', NOW())";
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
if ($sexe== 'h') {
   $sql.= "./aspect/aspect1.gif";
} else {
$sql.= "./aspect/aspect2.gif";
}
$sql .= "')"; 
include 'bravo.htm';
mysql_close();
?>
:(

Posté : 02 oct. 2007, 21:55
par ouckileou
ça, ça insère le nom du fichier uniquement. Le fichier, tu l'uploades sur ton serveur à part.

Tu peux enregistrer directement le fichier en base maisce n'est pas ce qu'il y a de plus pratique et ce n'est pas conseillé.

Posté : 04 oct. 2007, 21:21
par Invité
ben alors, comment je peux faire? :cry:

Posté : 04 oct. 2007, 21:22
par Invité
les fichiers "aspect1.gif et aspect2.gif" sont déjà sur le serveur...

Posté : 04 oct. 2007, 23:33
par iclo
Donc où est le problème ? :wink:

Posté : 05 oct. 2007, 00:01
par Invité
f ($sexe== 'h') {
   $sql.= "./aspect/aspect1.gif";
} else {
$sql.= "./aspect/aspect2.gif";
}
$sql .= "')";  
cette partie du script ne remplit pas son role, le champ "aspect" en base demeure vierge :?

Posté : 05 oct. 2007, 01:17
par ouckileou
$sql = "INSERT INTO membres(id, pseudo, passe, email, sexe, age, avatar, date_inscri) VALUES ('','$login','$passe','$email', '$sexe','$age','$typeava', NOW())"; // 1- début du SQL
mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error()); // 2 - exécution du SQL
if ($sexe== 'h') {
   $sql.= "./aspect/aspect1.gif"; // 3.a - suite du SQL
} else {
$sql.= "./aspect/aspect2.gif"; // 3.b - suite du SQL
}
$sql .= "')";  // 4- fin du SQL
Rien ne te choque dans mes commentaires ?

Pour la suite, regarde le lien "Débuguer du SQL via PHP" dans ma signature, il y a des trucs de base pour résoudre les problèmes :)

Posté : 05 oct. 2007, 08:31
par Tracker
Si les deux fichiers sont sur le serveur, et que leur utilisation ne dépend que du sexe du membre, c'est un problème de rendu (HTML).
Ca ne sert à quedal de stocker l'url (toujours les mêmes) dans la base...