Insertion dans une base du contenu d'une fonction

Eléphant du PHP | 137 Messages

09 août 2005, 12:27

Bonjour,
Je voudrais insérer dans une base le contenu d'une fonction :
function choixpeaumagique()
{ 
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison); 
    return $maison[0]; 
}
$sql1 = "INSERT INTO membres (maison)
        VALUES('choixpeaumagique()')";
$result = mysql_query($sql1)
or die ("Erreur d'insertion de données dans la base1");
Le problème, c'est que ça ne fonctionne pas, ça m'insère dans la base :
choixpeaumagique()

Comment dois-je m'y prendre?

Mammouth du PHP | 19672 Messages

09 août 2005, 12:30

Je ne comprends pas bien ce que tu veux insérer au juste... :?: Toute la fonction en format texte ? Ou bien les valeurs du tableau ? Enfin je capte pas ce que tu veux faire... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 137 Messages

09 août 2005, 12:32

En fait, je veux insérer la variable qui à été sélectionnée et qui provient du tableau.

Mammouth du PHP | 19672 Messages

09 août 2005, 12:34

Ha ben ce n'est pas le contenu de la fonction que tu veux insérer, mais le résultat obtenu de son exécution: ALors il faut correctement séparer le PHP du SQL:
{
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison);
    return $maison[0];
}
$sql1 = "INSERT INTO membres (maison)
        VALUES('". choixpeaumagique() ."')";
$result = mysql_query($sql1)
or die ("Erreur d'insertion de données dans la base1");
Essaye comme ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 137 Messages

09 août 2005, 12:42

Désolé, ça marche toujours pas. Voici une plus grosse partie de mon code :
function choixpeaumagique() 
{ 
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison); 
    return $maison[0]; 
}
$message="Nous vous souhaitons bienvenue sur l'école virtuelle du Chemin de Traverse";
$sujet="Bienvenue";
$prior = "Moyenne";
$annee= 1;
$sql1 = "INSERT INTO membres (login,mp,maison,annee,web,mail)
        VALUES('$_POST[pseudo]','$_POST[mpasse]','". choixpeaumagique() ."','$annee','$_POST[web]','$_POST[email]')";
$result = mysql_query($sql1)
or die ("Erreur d'insertion de données dans la base");

Mammouth du PHP | 19672 Messages

09 août 2005, 12:49

Ok, alors définis la maison avant la requête. Proposition de corrigé avec en plus des correction d'erreurs :
<?php
function choixpeaumagique()
{
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison);
    return $maison[0];
}
$message="Nous vous souhaitons bienvenue sur l'école virtuelle du Chemin de Traverse";
$sujet="Bienvenue";
$prior = "Moyenne";
$annee= 1;
$maison = choixpeaumagique();
$sql1 = "INSERT INTO membres (login,mp,maison,annee,web,mail)
        VALUES('". $_POST['pseudo'] ."','". $_POST['mpasse'] ."','". $maison ."','". $annee ."','". $_POST['web'] ."','". $_POST['email'] ."')";
$result = mysql_query($sql1)
or die ("Erreur d'insertion de données dans la base");
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

09 août 2005, 14:17

salut
Désolé, ça marche toujours pas. Voici une plus grosse partie de mon code :
function choixpeaumagique() 
{ 
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison); 
    return $maison[0]; 
}
$message="Nous vous souhaitons bienvenue sur l'école virtuelle du Chemin de Traverse";
$sujet="Bienvenue";
$prior = "Moyenne";
$annee= 1;
$sql1 = "INSERT INTO membres (login,mp,maison,annee,web,mail)
        VALUES('$_POST[pseudo]','$_POST[mpasse]','". choixpeaumagique() ."','$annee','$_POST[web]','$_POST[email]')";
$result = mysql_query($sql1)
or die ("Erreur d'insertion de données dans la base");
ca devrait fonctionner
c'est ta requete qui plante ou la valeur est vide?
ta fonction te retourne bien une valeur?

Mammouth du PHP | 19672 Messages

09 août 2005, 14:52

Tiens, rajoute donc des tests de validation :
<?php
function choixpeaumagique()
{
    $maison = array("Gryffondor","Serpentard","Serdaigle","Poufsouffle");
    shuffle($maison);
    return $maison[0];
}
/* On commence par récupérer les valeurs du formulaire */
$pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : "";
$mpasse = isset($_POST['mpasse']) ? $_POST['mpasse'] : "";
$web = isset($_POST['web']) ? $_POST['web'] : "";
$email = isset($_POST['email']) ? $_POST['email'] : "";
/* Si les valeurs ne sont pas vide, on insère, sinon, on ré-affiche le formulaire */
if(!empty($pseudo) && !empty($mpasse) && !empty($web) && !empty($email))
{
    $message="Nous vous souhaitons bienvenue sur l'école virtuelle du Chemin de Traverse";
    $sujet="Bienvenue";
    $prior = "Moyenne";
    $annee= 1;
    $maison = choixpeaumagique();
    $sql1 = "INSERT INTO membres (login,mp,maison,annee,web,mail)
        VALUES('". $pseudo ."','". $mpasse ."','". $maison ."','". $annee ."','". $web ."','". $email ."')"; 
    echo($sql1);
}
else
{
    /* Il manque des éléments qui n'ont pas été complétés dans le formulaire */
    // ...  suite du code ré-affichant le formulaire
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 137 Messages

09 août 2005, 14:59

C'est bon pour ce qui est de la reqûete.
Le seul problème maintenant, c'est ma fonction mail, ça n'envoie rien :
$sujet="Inscription école virtuelle";
$from="[email protected]";
$message="Merci de votre inscription à l'école Interactive ou virtuelle si vous préférez du Chemin de Traverse!
Votre pseudo/login est : $_POST[pseudo] 
Votre mot de passe est : $_POST[mpasse] 
Votre maison : choixpeaumagique();

Votre compte est désormais activé, il ne vous reste plus qu'à vous connecter à l'école. 
Pour pouvoir assister à vos cours, vous devez acheter du matériel sur le Chemin de Traverse, voici la liste : 
Liste du matériel à avoir : 

 1 livre d'histoire de la magie
_Un kit de balles de Quidditch
_Une baguette magique
_Un kit de potions
et un grimoire de potions

D'autres objets vous seront demandés pour les autres cours par 
la suite.

Instructions de dernière minute : 
Pour vous rendre à l'école, vous devez passer par l'intermédiaire du 
formulaire de connexion qui se trouve en bas à gauche de chaque 
page du site ou  par l'intermédiaire du mini-site qui se trouve à
cette adresse : http://hpotter.club.fr/blog/index.htm . Vous
devrez rentrer votre login/pseudo et votre mot de passe.

Une aide pour l'école est disponible dans le forum de
la grande salle.
Bonne scolaritée!";

$headers="From: $from";
mail('$_POST[email]','$sujet','$message','$headers');

D'ou vient le problème, en tout cas, cela ne vient pas du tableau $_POST[email] car j'ai testé pour voir si ce qu'il contenait était bon et ça allait.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

09 août 2005, 15:02

mail('$_POST[email]','$sujet','$message','$headers');
Que font ces apostrophes autour des variables ? :shock:

Et sinon, pourquoi ne pas tester aussi les autres variables....
par exemple
print($_POST[email],$sujet,$message,$headers);
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 19672 Messages

09 août 2005, 15:05

Hum, hum...
$_POST['email']
et non
$_POST[email]
Sinon "email" est interprété comme une constante...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 137 Messages

09 août 2005, 15:14

C'est bon, tout fonctionne. Merçi beaucoup!

Administrateur PHPfrance
Administrateur PHPfrance | 250 Messages

09 août 2005, 15:31

et c'etait quoi le probleme? :)
pense au tag resolu aussi . c'est une habitude a prendre :)