Problème pour récupérer des données puis les mettre dans un mail à envoyer

cs_palisse Messages postés 6 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 16 août 2009 - 13 août 2009 à 17:20
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 - 16 août 2009 à 22:24
Bonjour,

Je suis novice avec le php et Mysql... et je voudrai faire un code pour envoyer des données dans une base de données, les récupérer et envoyer un mail avec ces données.

Or mon code ne fonctionne pas... Seule, l'insertion fonctionne ainsi que l'envoi de mail. Mais mises ensemble, ces fonctions ne marchent pas.

Voici le code:

<?php
ob_start();

$cnx = mysql_connect( "localhost", "root", "" ) ;
$db = mysql_select_db( "contact" ) ;


if (isset($_POST['submit']))

//récupération des valeurs des champs:
//nom:
$titre= $_POST["titre"];
$nom= strip_tags($_POST["nom"]);
$responsabilite= $_POST["responsabilite"];
$eleve= strip_tags($_POST["eleve"]);
$classe= $_POST["classe"];
$email= $_POST["email"];
$prof= $_POST["prof"];
$date1= $_POST["date1"];
$heure1= $_POST["heure1"];
$date2= $_POST["date2"];
$heure2= $_POST["heure2"];



//création de la requête SQL:
$sql = "INSERT INTO rendezvous (titre, nom, responsabilite, eleve, classe, email, prof, date1, heure1, date2, heure2) VALUES ('$_POST[titre]', '$nom', '$responsabilite', '$eleve', '$classe', '$email', '$prof', '$date1', '$heure1', '$date2', '$heure2')" ;

//exécution de la requête SQL:
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;

// on récupère le dernier numéro inséré, soit le numéro de tibo
$dernier_id = mysql_insert_id();


// on prépare la requête pour récupérer le numero du propriétaire
$sql "SELECT * FROM rendezvous WHERE id '$dernier_id'";
$requete = mysql_query($sql, $cnx) or die( mysql_error() );

if($requete)
{
// Recuperation des resultats
while($row = mysql_fetch_row($requete))
{
$id = $row["id"];
$titre = $row["titre"];
$nom = $row["nom"];
$responsabilite = $row["responsabilite"];
$eleve = $row["eleve"];
$classe = $row["classe"];
$email = $row["email"];
$prof = $row["prof"];
$date1 = $row["date1"];
$heure1 = $row["heure1"];
$date2 = $row["date2"];
$heure2 = $row["heure2"];
$ref = $row["ref"];
$dateheure = $row["dateheure"];
}

// envoi email au secretariat
/* Construction du message */
$msg = " BONJOUR MR / MME LE PROFESSEUR DE $prof.

UNE DEMANDE DE RENDEZ-VOUS A ETE ENVOYEE PAR LE SITE DE SAINT ELME:

$titre $nom ($email)

$responsabilite DE $eleve, ELEVE EN CLASSE DE $classe.

SOUHAITE VOUS RENCONTRER SOIT:

- LE $date1 A $heure1
ou
- LE $date2 A $heure2

MERCI DE CONFIRMER UN DE CES CHOIX AUPRES DU SECRETARIAT.";


/* Envoi de l'e-mail */
mail("palisse@numericable.fr", "DEMANDE DE RENDEZ-VOUS PROF", $msg)


//affichage des résultats, pour savoir si l'insertion a marchée:
if($requete)

{ header('Location: envoimessage.php');
exit;
}
else
{
echo("L'envoi du message a échoué") ;
}

mysql_close($cnx);

ob_end_flush();
?>

C'est une compilation de codes trouvés lors de mes recherches.


J'espère que vous pourrez m'aider

Merci

7 réponses

pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
13 août 2009 à 22:08
Bonsoir,

Je ne vois pas vraiment d'office où il doit y avoir une erreur, mais je me demande pourquoi il y a ces deux requêtes pour la BDD... enfin s'il s'agît de récupérer les informations et de les envoyer par email je ne vois pas l'intérêt d'une BDD...

Sinan j'essaierais peut-être de changer les noms de variable, par exemple en "$requete_1" et "$requete_2" pour essayer... même si a la base il ne devrait pas y avoir de soucis de ce coté là....

Sinon petite chose très déplaisante a dire, mais vraie: ce script est une passoire et un GRAND risque coté sécurité... tu ne vérifie aucune de tes donnés, ce qui est très dangereux!

Bonne soirée


[hr]
PPT: Petit programmeur tranquille =) | Agence Web | Pysco68 was here
0
cs_palisse Messages postés 6 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 16 août 2009
13 août 2009 à 23:28
Bonsoir Pysco68,

Merci pour cette information. Je n'ai pas essayé en ne gardant que la première connexion. Si je veux une BDD c'est pour garder les données.

Pour la sécurité, j'ai fait le formulaire avec Dreamweaver. Et je lui demande soit de vérifier le format de l'email, soit c'est dans une liste qu'on vérifie. Les données "nom" et "eleve" sont les 2 seules qui sont tapées par l'internaute. Bon là aussi je ne suis pas un pro...

Je vais tenter voir ce que cela peut donner.

Merci encore
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
14 août 2009 à 08:55
Ça n'a rien à voir avec pro ou pas ^^

Pour ce qui est de la vérification du formulaire, Dreamweaver donne une belle illusion de sécurité, mais le problème est que si l'on désactive la Javascript (c'est juste une coche a enlever dans la plupart des grands navigateurs...) on finit par pouvoir taper ce que l'on veut... et cela donne lieu a de gros problèmes...

ci dessous un peux de lecture a ce propos:

- http://www.sitepoint.com/article/php-security-blunders/2/ (sur la page 2 SQL-Injections)
- http://www.linuxjournal.com/article/6061 (globalement très intéressant!)

Bonne journée!

[hr]
PPT: Petit programmeur tranquille =) | Agence Web | Pysco68 was here
0
cs_palisse Messages postés 6 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 16 août 2009
16 août 2009 à 21:07
Bonjour,

Je viens de faire une vérification progressive avec "echo" du code.

Ainsi la partie "insert" marche, puis avec "mysql_insert_id" aussi. Et si je rajoute "select" ça marche et le mail est bien envoyé à la bonne adresse.

Aussi je voudrais rediriger vers une autre page pour confirmer le bon envoi des informations. Or là ça ne marche pas. Voici le code entier

<code>
<?php
ob_start();

$cnx = mysql_connect( "localhost", "root", "" ) ;
$db = mysql_select_db( "contact" ) ;


if (isset($_POST['submit']))

//récupération des valeurs des champs:
//nom:
$titre= $_POST["titre"];
$nom= strip_tags($_POST["nom"]);
$responsabilite= $_POST["responsabilite"];
$eleve= strip_tags($_POST["eleve"]);
$classe= $_POST["classe"];
$email= $_POST["email"];
$prof= $_POST["prof"];
$date1= $_POST["date1"];
$heure1= $_POST["heure1"];
$date2= $_POST["date2"];
$heure2= $_POST["heure2"];



//création de la requête SQL:
$sql = "INSERT INTO rendezvous (titre, nom, responsabilite, eleve, classe, email, prof, date1, heure1, date2, heure2) VALUES ('$_POST[titre]', '$nom', '$responsabilite', '$eleve', '$classe', '$email', '$prof', '$date1', '$heure1', '$date2', '$heure2')" ;

//exécution de la requête SQL:
$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
$id = mysql_insert_id($cnx);

// on prépare la requête pour récupérer le numero du propriétaire
$sql = "SELECT * FROM rendezvous ORDER BY id DESC LIMIT 0,1";
$requete = mysql_query($sql, $cnx) or die( mysql_error() );
$result=mysql_fetch_row($requete);

$id = $result[0];
$titre = $result[1];
$nom = $result[2];
$responsabilite = $result[3];
$eleve = $result[4];
$classe = $result[5];
$email = $result[6];
$prof = $result[7];
$date1 = $result[8];
$heure1 = $result[9];
$date2 = $result[10];
$heure2 = $result[11];


// envoi email au secretariat
/* Construction du message */
$msg = " Ref: $id

BONJOUR MR / MME LE PROFESSEUR DE $prof

UNE DEMANDE DE RENDEZ-VOUS A ETE ENVOYEE PAR LE SITE DE SAINT ELME:

$titre $nom ($email)

$responsabilite DE $eleve, ELEVE EN CLASSE DE $classe

SOUHAITE VOUS RENCONTRER SOIT:

- LE $date1 A $heure1
ou
- LE $date2 A $heure2

MERCI DE CONFIRMER UN DE CES CHOIX AUPRES DU SECRETARIAT.";

/* Envoi de l'e-mail */
mail("palisse@numericable.fr", "DEMANDE DE RENDEZ-VOUS PROF", $msg)

if()

{ header('Location: envoimessage.php');
exit;
}
else
{
echo("L'envoi du message a échoué") ;
}


ob_end_flush();
?>
<code>

J'ai donc un problème avec le if en fin de code. Si je lui mets comme condition "requete" ça me met une erreur parse... même si je nomme cette requete "requete1". Ca ne reconnaît aucune condition.

Comment faire pour rediriger vers une autre page?

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 août 2009 à 21:31
Tu pourrais mettren en place une variable comme $error, puis remplacer par ex. tout tes or die( mysql_error()) par une incrémentation de cette variable...

a la fin tu vérifie si la variable est toujours égale a zéro tout c'est bien passé sinon tu envoi une erreur...

Bonne soirée

[hr]
PPT: Petit programmeur tranquille =) | Agence Web | Pysco68 was here
0
cs_palisse Messages postés 6 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 16 août 2009
16 août 2009 à 22:16
Bonsoir Pyscho,

Là je ne sais pas trop incrementer une variable.

Mais surtout je me demande pourquoi if($requete) ne marche pas quand je lui demande d'insérer puis d'envoyer un mail, alors que si je ne lui demande que d'insérer dans ma BDD ça marche et il me redirige vers une autre page qui envoie le mail.

Mais là où le bat blesse, je voudrais quand ce cas récupérer l'id nouvellement inséré dans ma page de redirection. Et là je n'y arrive pas!

J'espère être clair.

Merci
0
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
16 août 2009 à 22:24
incrémenter une variable fonctionne de là facon suivante:

$i = 0;
$i++; // maintenant on a $i == 1


enfin voilà...

sinon voilà ce que je ferais a ta place:

*pseudo-code: début*
# $erreur = 0;

#effectuer requete 1
-> si erreur: $erreur++;

#effectuer requete 2
-> si erreur: $erreur++;

#envoyer le mail
-> si erreur: $erreur++;

# $erreur == 0
-> rediriger
-> sinon envoyer erreure

* fin pseudo code *

Et voilà, j'espère que ca t'aide!

Bonne soirée

[hr]
PPT: Petit programmeur tranquille =) | Agence Web | Pysco68 was here
0
Rejoignez-nous