pb insert image base données

Eléphant du PHP | 250 Messages

17 déc. 2005, 22:57

J'ai tout essayé mais je n'y arrive pas, honnetement.
Je voudrais que le visiteur choisisse un avatar et que ce dernier soit stocké en base de données. je sais qu'il s'agit d'un pb de lien de fichizer mais je ne sais comment faire, voici donc les scripts volontairement allégés, j'ai mis le principal:

LE FORMULAIRE
<form name="form1" method="post" action="ins.php" enctype="multipart/form-data">	
bla bla bla bla (j'ai volontairement viré les autres trucs lambda, nom, sexe, age etc)	       
 <td height="30">
<center><A HREF='#' onClick=\"window.open('liste_avatars.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=0, width=900, height=600');return(false)\">avatars</A>
	</center></td>
	<tr>
	<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="typeava" value="pred" checked> 
	<select class="input" name="predef" onChange="showimage()">\n
<?
$rep_dir = 'avatars';
$mis=opendir($rep_dir);
while ($fichiers = readdir($mis)) 
{
$list_fichiers[] = $fichiers;
}
asort($list_fichiers);
while (list ($key, $fichiers) = each ($list_fichiers)) 
{
if (ereg("Default", $fichiers)) 
{
$sel = "selected";
}
else 
{
$sel = "";
}
ereg(".gif",$fichiers);
if ($fichiers == "." || $fichiers == "..") 
{
$a=1;
}
else 
{
echo "<option class='input' value='$fichiers' $sel>$fichiers</option>\n";
}
}
?>
</select>&nbsp;&nbsp;<img src="avatars/avx.gif" name="predef_name" width="50" height="50">
</td>
</tr>
<td><center><input type="submit" name="Submit" value="Envoyer"></center></td>
 </tr></td>
 </table>
</form>
VOICI POUR LA VERIF
if(isset($_POST['avatar']))$age=$_POST['typeava'];
else $typeava="";
ET L INSERTION BASE
$sql = "INSERT INTO membres(id, pseudo, passe, email, sexe, age, avatar) VALUES ('','$login','$passe','$email', '$sexe','$age','$typeava')";
ENSUITE DANS LA SESSION....
           $_SESSION['avatar'] = $data["typeava"];

Donc, l'avatar par défaut est avx.gif (mis dans defaut dans la base de données)
le nom du champ est avatar............
Ou cela coince-t _il?
En fait tout fonctionne sauf que l'avatar (meme celui par défaut) ne s'affiche pas.
Merci d'avance pour votre aide, cela ne fait que quelques soirées que je bloque la dessus



:oops:

ViPHP
ViPHP | 649 Messages

17 déc. 2005, 23:41

En fait c'est tout bête selon moi: Les avatars sont dans le répertoire avatars. Donc, à moins que les fichiers qui utilisent ces images soient dans ce dossier, tu dois ajouter le chemin exact, dans lequel on devrait normalement trouver ./avatars/image.gif
Image

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2005, 00:05

, tu dois ajouter le chemin exact, dans lequel on devrait normalement trouver ./avatars/image.gif
je mets ce chemin dans la base de données ou dans les scripts :roll:

Mammouth du PHP | 19672 Messages

18 déc. 2005, 00:13

Ça dépend: si tu dois pouvoir y accéder uniquement depuis une page qui est toujours au même niveau par rapport à tes répertoires d'image, tu peux mettre l'adresse complète dns la base. Mais si tu veux pouvoir utiliser ces même images dans d'autres pages placées à d'autres niveaux, il vaut mieux compléter le chemin par programmation selon la page.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 250 Messages

18 déc. 2005, 01:21

J'ai mis cela dans la base de données (defaut)

./avatars/image.gif

j'ai aussi testé sans le . ca devrait au moins afficher l'avatar par défaut, mais non :shock:

Eléphant du PHP | 250 Messages

18 déc. 2005, 01:45

petite précision quand meme importante, l'avatar choisi ne va meme pas s'enregister dans la base....

Eléphant du PHP | 383 Messages

18 déc. 2005, 01:51

il fallait commencer par la : si l'user ne precise pas d'avatar, tu met typeava a "", et tu l'inseres dans la base... ce qui aura a priori pour effet d'ecraser la valeur par defaut. essaie en n'inserant typeava que si celui ci est defini. et verifie toujours d'eventuels erreurs SQL, on ne sait jamais...

Eléphant du PHP | 250 Messages

18 déc. 2005, 02:00

C'est fait ,non?

if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="";

// On vérifie si les champs sont vides
if(empty($login) OR empty($passe) OR empty($email) OR empty($sexe) OR empty($age) OR empty($typeava))
    {
    echo '<font face="Calligraph421 BT"> Attention ! Tous les champs ne sont pas correctement renseignés.</font>';
    }

etc.................

Eléphant du PHP | 383 Messages

18 déc. 2005, 02:30

non, tu as :
$typeava=""
puis
if(empty($typeava))
le if te retournera toujours vrai, puisque tu l'a initialisé. donc le champ avatar dans ta base sera egal a une chaine vide, ce qui, me semble t il, est different de NULL. donc la valeur par defaut est ecrasé. accessoirement, je remarque que tu as :

if(isset($_POST['avatar']))$age=$_POST['typeava'];
else $typeava="";

au lieu de (probablement) :

if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="";

( gare aux méandres du copier coller... )

enfin, le mieux est peut etre de placer la valeur par defaut a ce moment la, soit :

if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="./avatars/avx.gif";

Eléphant du PHP | 250 Messages

18 déc. 2005, 22:29

au lieu de (probablement) :

if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="";

désolé pour cette erreur, corrigée au préalable :oops:

j'ai rajouté dans mon script le chemin pour typeava comme conseillé
if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="./avatars/avx.gif";

mais cela ne fonctionne toujours pas....

Eléphant du PHP | 250 Messages

18 déc. 2005, 22:30

est-ce que (par hasard?) il n'y aurait pas 1 autre pb au niveau de la base ou de l'hébergeur?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

18 déc. 2005, 22:58

a quoi correspond $_POST['avatar']

le nom de la liste est "predef" d'apres ton code ! je sais pas trop ce que tu veut vraiment récupérer avec tout ça.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Invité
Invité n'ayant pas de compte PHPfrance

18 déc. 2005, 22:59

rajoute un "or die (mysql_error())" derriere ta commande "mysql_query($sql)", et dis nous ce que ca donne.

Eléphant du PHP | 383 Messages

18 déc. 2005, 23:00

dsl, c'etait moi au dessus

Eléphant du PHP | 250 Messages

18 déc. 2005, 23:31

:oops:
je remets le tout ici, peut-etre y verrez vous plus clair

formulaire

<body background="images/fond.jpg" bgproperties="fixed">
<center><img src="images/banniere.jpg" width="468" height="68">
<br><br>
<a href="index.php"><img border="0" src="images/accueilbtn.jpg" width="100" height="40"></a><a href="intro.htm"><img border="0" src="images/introbtn.jpg" width="100" height="40"></a><a href="forum.htm"><img border="0" src="images/forumbtn.jpg" width="100" height="40"></a><a href="partenaires.htm"><img border="0" src="images/partenairesbtn.jpg" width="100" height="40"></a>
<SCRIPT type='text/javascript'>
function showimage() {
if (!document.images)
return
document.images.predef_name.src='avatars/' + document.form1.predef.options[document.form1.predef.selectedIndex].value
}
</SCRIPT>
<center>
<form name="form1" method="post" action="ins.php" enctype="multipart/form-data">
<tr>
<table width="230" border="1" div align="center">
<tr>
<td><center>
<font face="Calligraph421 BT"><strong>votre pseudo</strong></font>
<input name="pseudo" type="text" id="pseudo"></center></td>
</tr>
<tr>
<td><center>
<font face="Calligraph421 BT"><strong>votre email</strong></font>
<input name="email" type="text" id="email"></center></td>
</tr>
<tr>
<td><center>
<font face="Calligraph421 BT"><strong>votre password</strong></font>
<br>
<input name="passe" type="password" id="passe" maxlenght size="7">
</center></td>
</tr>
<tr>
</td>
</tr>
<tr>
<td><font face="Calligraph421 BT"><strong>Homme</strong></font><input name="sexe" type="radio" value="homme" checked>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Calligraph421 BT"><strong>Femme </strong></font>
<input name="sexe" type="radio" value="femme"></td>
</tr>
<br>
<td height="68">
<center>
<font face="Calligraph421 BT"><strong>votre age </strong></font>
<input name="age" type="text" size="3" maxlenght="3">
</center></td>
<tr>
<td height="30">
<center><A HREF='#' onClick=\"window.open('liste_avatars.php','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=1, resizable=0, copyhistory=0, menuBar=0, width=900, height=600');return(false)\">avatars</A>
</center></td>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio" name="typeava" value="pred" checked>
<select class="input" name="predef" onChange="showimage()">\n
   <?
$rep_dir = 'avatars';
$mis=opendir($rep_dir);
while ($fichiers = readdir($mis)) 
{
$list_fichiers[] = $fichiers;
}
asort($list_fichiers);
while (list ($key, $fichiers) = each ($list_fichiers)) 
{
if (ereg("Default", $fichiers)) 
{
$sel = "selected";
}
else 
{
$sel = "";
}
ereg(".gif",$fichiers);
if ($fichiers == "." || $fichiers == "..") 
{
$a=1;
}
else 
{
echo "<option class='input' value='$fichiers' $sel>$fichiers</option>\n";
}
}
?>
</select>&nbsp;&nbsp;<img src="/avatars/avx.gif" name="predef_name" width="50" height="50">
</td>
</tr>
<td><center><input type="submit" name="Submit" value="Envoyer"></center></td>
</tr></td>
</table>
</form>
</center>

insert dans base
<?php
// On commence par récupérer les champs
if(isset($_POST['pseudo']))$login=htmlentities($_POST['pseudo']);
else $login="";
if(isset($_POST['passe']))$passe=htmlentities($_POST['passe']);
else $passe="";
if(isset($_POST['email']))$email=htmlentities($_POST['email']);
else $email="";
if(isset($_POST['sexe']))$sexe=$_POST['sexe'];
else $sexe="";
if(isset($_POST['age']))$age=$_POST['age'];
else $age="";
if(isset($_POST['avatar']))$typeava=$_POST['avatar'];
else $typeava="./avatars/avx.gif";

// On vérifie si les champs sont vides
if(empty($login) OR empty($passe) OR empty($email) OR empty($sexe) OR empty($age) OR empty($typeava))
    {
    echo '<font face="Calligraph421 BT"> Attention ! Tous les champs ne sont pas correctement renseignés.</font>';
    }
// on se connecte à MySQL
       // connexion à la base
$db= mysql_connect(localhost, xxxx, xxxx) or die("Impossible de se connecter à la base de données"); 	   
// sélection de la base  
 mysql_select_db('xxxx',$db)  or die('Erreur de selection base'.mysql_error());
 // on regarde si le type existe déjà
$req = mysql_query("select * from membres where pseudo='". $login ."'",$db)or die(mysql_error());
    // on compte le nombre de résultats
$res = mysql_num_rows($req); 
if($res!=0)  // le pseudo existe déjà, on affiche un message d'erreur
        {
echo '<center><font color="red">Désolé, mais ce pseudo est déjà pris !</font></center>';
        }
else  // Le pseudo est pas encore pris, on insère les informations du formulaire dans la table
        {    	
$sql = "INSERT INTO membres(id, pseudo, passe, email, sexe, age, avatar) VALUES ('','$login','$passe','$email', '$sexe','$age','$typeava')";
     // on insère les informations du formulaire dans la table
    mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
    // on redirige vers une page de confirmation
    	header("Location: bravo.htm");
    mysql_close($db);  // on ferme la connexion
    } 
?> 
voila, ensuite plus loin, j'ouvre une session qui rapatrie correctement tout sauf l'avatar choisi par le membre

$_SESSION['avatar'] = $typeava;