petit soucis d'insert à l'inscrition?

Invité
Invité n'ayant pas de compte PHPfrance

30 sept. 2007, 22:25

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:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 sept. 2007, 23:12

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 :)
Modifié en dernier par ouckileou le 02 oct. 2007, 14:23, modifié 1 fois.

Eléphant du PHP | 187 Messages

01 oct. 2007, 08:11

Salut,
pense a protéger ta requête contre les injections SQL...
netsupra

Invité
Invité n'ayant pas de compte PHPfrance

01 oct. 2007, 21:20

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)...

ViPHP
ViPHP | 3607 Messages

02 oct. 2007, 10:52

ouckileou, t'as oublié un "=" dans ton if...

ViPHP
ViPHP | 2144 Messages

02 oct. 2007, 13:19

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')

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 oct. 2007, 14:21

ouckileou, t'as oublié un "=" dans ton if...
c'est vrai, je corrige :)

Invité
Invité n'ayant pas de compte PHPfrance

02 oct. 2007, 21:36

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();
?>
:(

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 oct. 2007, 21:55

ç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é.

Invité
Invité n'ayant pas de compte PHPfrance

04 oct. 2007, 21:21

ben alors, comment je peux faire? :cry:

Invité
Invité n'ayant pas de compte PHPfrance

04 oct. 2007, 21:22

les fichiers "aspect1.gif et aspect2.gif" sont déjà sur le serveur...

ViPHP
ViPHP | 2144 Messages

04 oct. 2007, 23:33

Donc où est le problème ? :wink:

Invité
Invité n'ayant pas de compte PHPfrance

05 oct. 2007, 00:01

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 :?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 oct. 2007, 01:17

$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 :)

Eléphant du PHP | 443 Messages

05 oct. 2007, 08:31

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...