problème php

Répondre
Partager Rechercher
Citation :
Publié par sourigsd
Je me permets un quadripleplost pour vos dire que j'ai upload un fichier rar avec mon projet à l'intérieur, c'est pas forcément claire pour vous sinon.

Si vous pouviez y jeter un oeil, et le tester chez vous, voir ce qui ne va pas, le code est sûrement pas très beau, mais j'ai commencé mardi, soyez indulgent s'il vous plaît ^^

voici le lien http://dl.free.fr/qQiMCbf3W
J'ai regardé vite fait et ai repéré quelques trucs bizarres :

  • Dans ton formulaire, tu charges une feuille de style qui est un fichier PHP. En soi c'est tout à fait valable, surtout que dans formulec.php tu envoies bien un header de content-type css, mais à quoi bon ? Tu ferais mieux de créer un bête fichier .css avec le même contenu modulo les trois premières lignes à retirer. C'est très rare d'avoir besoin de générer des feuilles de style avec PHP.
  • Toujours dans ton formulaire, la plupart des tes input on un attribut name composé de plusieurs mots et de caractères spéciaux. Techniquement, c'est possible (en HTML5, pas en vieil HTML4.01), mais tu vas ensuite te faire chier si dans ton code tu veux récupérer les valeurs des champs correspondants. Tu ferais mieux d'utiliser des des name plus canoniques sans espaces et caractères spéciaux, genre code_postal, tu t'éviteras de potentiels ennuis.
  • Certains de tes inputs ont le même problème avec l'attribut id, sauf que pour le coup, tu n'as pas le droit d'utiliser des espaces. En plus, vu qu'ils semblent assez inutiles dans ton cas, tu devrais les supprimer.
Enfin, beaucoup plus problématique, comme certains l'ont fait remarquer, c'est ta ligne
Code:
$h  = "From: <?php echo $_POST ['Couriell']; ".$TO;
En effet, <?php signifie au serveur web qu'à partir de ce moment ce que tu écris est du PHP. Ca n'a pas de sens d'imbriquer deux balises comme tu le fais, et c'est faux, car <?php n'est pas un élément du langage (comme ton serveur n'a pas l'air configuré pour afficher les erreurs, tu devrais pouvoir les voir dans le fichier error.lol d'Apache).
Ce que tu cherches à faire, c'est une simple concaténation de chaînes :
Code:
$h  = "From: " . $_POST['Couriell'] . $TO;
En supposant que $_POST['Couriell'] (au passage, tu n'as pas mis ce name là dans le formulaire mais un truc avec deux r) ait pour valeur 'toto@Foo.bar' et $TO 'brol@Example.com', $h vaudra alors 'From: toto@Foo.barbrol@Example.com'. C'est comme ça qu'on concatène des chaînes de caractères. Note qu'il existe d'autres possibilités pour concaténer (mais tu n'as pas vraiment besoin de t'en préoccuper pour l'instant) :

  • $bar = "lol $foo"; (note l'utilisation des guillemets doubles plutôt que simple) j'aime pas cette méthode car elle n'est pas très lisible et devient plus complexe à maipuler quand tu utilises des tableaux ou des objets
  • la fonction sprintf() qui permet en plus de formater les variables que tu veux concaténer (par exemple pour ajouter des 0 devant un nombre, ou concaténer à une chaine la valeur binaire d'une variable)
Tu noteras également que ta variable $h résultante est quand même super bizarre : tu cherches à mettre le contenu de $TO dans un header From:. Je n'ai pas bien saisi ce que tu cherchais à faire, mais ça semble quand même vachement incorrect.
De plus, en supposant qu'en réalité tu ne veuilles que "From: $_POST['Courriell'], cela signifie que le mail que tu vas envoyer contiendra dans le header From: l'adresse mail entrée par l'utilisateur. Il fut un temps où c'était possible, mais de nos jours, à peu près tous les serveurs mails refusent ce genre d'email où le from: ne correspond pas à l'utilisateur ayant réellement envoyé le mail. C'est bloqué car c'était une technique de base utilisée par les spammers (voir la notion d'Open Mail Relay).

Enfin, tu es en train de découvrir les joies de la programmation Web donc c'est peut-être un peu secondaire, mais une chose primordiale est de TOUJOURS assainir les données fournies par l'utilisateur, sous peine d'ouvrir des failles de sécurité énormes. Par exemple, le simple fait d'utiliser <?php echo $_POST['toto']; ?> permet à la personne qui soumet le formulaire de trifouiller la page contenant cet echo, de rajouter des appels javascripts, ... par exemple en soumettant la valeur "<blink>MDR</blink>", il fera clignoter un message clignotant (et il y a bien plus vache à faire que ça ). Donc, au moment d'afficher des données comme ça, il est de bon ton de les passer à la fonction htmlentities(). De même, lorsqu'on utilise une base de données, il faut échapper les variables et s'assurer qu'elles soient dans le format que l'on souhaite, sous peine de créer des catastrophes.
Le problème se pose également avec les variables que tu utiliserais dans un email. Pour reprendre ton exemple avec $h = 'From: ' . $_POST['Courriell'], l'utilisateur peut décider d'envoyer le mail à qui il veut (et faire bien d'autres choses) en saisissant par exemple le texte suivant dans le champs Courriell :
Code:
toto@Bar.fr
Bcc: moi@Olol.com, moi2@Olol.com, moi3@Olol.com
En pratique, tu viens de créer un script de spam, uniquement parce que les données n'ont pas été assainies avant d'être traitées.
Ze Reaper a tout dit

Je rajouterai que je suis tout à fait d'accord avec Herlatt également. Tu devrais te focaliser sur des tutoriaux et de la documentation. Apprendre le PHP en faisant du concret, c'est très bien, mais au-delà de certaines fonctionnalités, tu auras impérativement besoin de comprendre ce que tu fais (pour la suite: bien comprendre les boucles et les fonctions), sinon tu risques de rencontrer le même problème que tu as en ce moment.
Bonjour à tous,

merci pour vos messages, j'en ai bien pris conscience, je ferai plus attention, et merci notamment pour vos conseils Herlatt et Ze Reaper.

Après le souci, c'est que j'ai rien qui m'indique ce qui ne va pas, j'ai pas de log d'erreur, tout run, Notepad ne m'indique rien, et mon fichier "appache error log" non plus, j'ai juste eu un message lorsque j'ai réexécuté mon code ce matin phpp.png et après silence radio.

Edit: Je me suis décidé à ce qu'il m'indique un message d'erreur quand le mail ne part pas,
Code PHP:

if (!mail($TO$_POST['subject'], $message$h))
    die(
"Réeesaye encore une fois");
else
    
header("Location: https://www.youtube.com/?gl=FR&hl=fr");
mail($TO$subject$message$h); 
et j'ai bien "Réeesaye encore une fois".

Je vais essayer de reconfigurer fake sendmail, ça vient peut-être de là ?

Edit@Lilva: Je viens de l'essayé en enlevant les echo tout ça, et je tombe sur une pagr blanche. Mais,je pense que le code est bon, il faut "juste" configurer l'envoi, c'est ce que je suis entrain de chercher.

Dernière modification par sourigsd ; 25/07/2014 à 11h17.
Bon bah j'ai essayé de configure sendmail, mais j'ai toujours mon message en cas d'erreur qui s'affiche. Mon PHPerror.log est vide, je n'ai pas de sendmail error.log et en appache error j'ai ça phpph.png

Rien de vraiment concret donc, mais vu que je veux intégrer ça sur mon site plustard, j'aurai pas vraiment besoin de ça, je voulais juste voir comment ça marchais en local quoi.

Du moment que c'est pas mon code qui foire.
Bonjour,

Est ce que l'un d'entre vous peut tester ce code
Code PHP:

<?php
$headers 
='From: "test OBH"<votremail@JoL.com>'."\n";
$headers .='Return-Path: votremail@JoL.com'."\n";
$headers .='Reply-To: votremail@JoL.com'."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
if(
mail('votremail@JoL.com''test de formulaire''exemple de message avec enveloppe complete'$headers))
{
echo 
"Le message a bien 1";
}
else
{
echo 
"L'envoi du message a bien 0"; }
?>
Le mail part bien chez vous ? Et si ça vous retourne des erreurs quelconques ou bien quel echo vous avez.

merci
Ce code fonctionne très bien mais en même temps il ne fait appel qu'à la fonction mail() de php donc à partir du moment qu'on a un serveur apache et php installé ya pas de soucis.

Code HTML:
Le message a bien 1
J'ai mis en place un système de formulaire contact sur mon blog. Il fonctionne très bien. Je te donnerai le code en revenant du boulot, si tu veux.
Chez moi il me retourne 0, ça vient peut-être de la configuration du réseau avec un partage général..

J’essaierai d'un autre lieu pour tester, parce que j'ai bien wampserver et j'ai essayé de conf sendmail rien n'y fait.

Merci pour ton retour, je vais pouvoir continuer.

Edit@Lilva: Ok merci Lilva, j'ai un peu avancé sur le mien car je me focalisais plus sur l'erreur d'envoi en pensant qu'elle venait de moi, mais j'ai déjà une bonne base.
Puis si ça peut me permettre d'améliorer le mien ^^
Bon bah, j'ai réussi à m'envoyer un mail à moi même, je l'ai fait.
Après des jours de recherches, ouvrir sa boîte mail et voir un nouveau message de soi-même.

Bon bah une épine du pied en moins, je vais pouvoir avancer, et je suis toujours ok pour voir ton formulaire Lilva.
Bonjour,

je reviens car j'ai une question; j'aimerai bien sécuriser mon formulaire, j'ai essayé avec quelques babioles style (stripslashes, htmlmachin) mais ça fait planter mon formulaire, donc si vous aviez des conseils de balises de sécurisation.

merci
Ah en effet, j'ai beaucoup modifié et j'men suis même pas rendu compte, et c'est pas Notepad qui me l'aurai dit..

merci à toi !

Dernière modification par sourigsd ; 29/07/2014 à 15h54.
Bonjour, une petite question : Dans mon formulaire j'ai un champ "pièce jointe" ou le client devra me joindre un fichier, ça c'est bon, mais j'aimerai le gérer et c'est là que je coince, je sais pas comment faire pour que la pièce jointe, me sois transmise en même temps que les autres données sur mon mail lorsque le formulaire est validé, si vous avez des pistes, merci.
Ok je vais jeter un oeil, généralement j'évite ce genre d'article car ils sont un peu vieux (2007 pour celui-là) et qu'après il y a des balises qu'on utilisent plus, pas recommandée tout ça, vu que les versions ont changé depuis ^^

Edit: je viens de regarder mais ce n'est pas ce que je veux, là ils joignent une pièce jointe déjà choisi à leur mail d'envoi, alors que moi, je veux que le fichier choisi par le client soit envoyé automatiquement avec les autres réponses par mail.

Dans mon formulaire j'ai inclu le
Code PHP:

<form action="cible.php" method="post" enctype="multipart/form-data"
Et dans ma cible
Code PHP:

$_FILES['CV']['name']  
$_FILES['CV']['type']     
$_FILES['CV']['size']   
$_FILES['CV']['tmp_name'
$_FILES['CV']['error']    
if (
$_FILES['CV']['error'] > 0$erreur "Erreur lors du transfert";
$extensions_valides = array( 'txt' 'pdf' 'docx' 'jpeg' );

$typepiecejointe filetype($path.$file_name);  
$data chunk_splitbase64_encode(file_get_contents($path.$file_name)) );  
//Génération du séparateur  
$boundary md5(uniqid(time())); 
J'ai les files à complétés, mais à part ça, j'ai oublié un truc ? Car dès que je joint un fichier, ça ne marche plus

Dernière modification par sourigsd ; 01/08/2014 à 10h19.
Citation :
Publié par sourigsd
Edit: je viens de regarder mais ce n'est pas ce que je veux, là ils joignent une pièce jointe déjà choisi à leur mail d'envoi, alors que moi, je veux que le fichier choisi par le client soit envoyé automatiquement avec les autres réponses par mail.
J'utilise pas la la fonction mail() de base (faut être maso pour s'en servir alors qu'il existe des bibliothèques super pour ça), mais leur exemple a quand même l'air de correspondre parfaitement à ce que tu veux... T'as juste à remplacer la valeur de $file_name dans l'exemple qu'ils donnent et une ou deux autres comme $file_type par les valeurs données par $_FILES['CV'] et c'est bon.
Citation :
Publié par Ze Reaper
mais leur exemple a quand même l'air de correspondre parfaitement à ce que tu veux... T'as juste à remplacer la valeur de $file_name dans l'exemple qu'ils donnent et une ou deux autres comme $file_type par les valeurs données par $_FILES['CV'] et c'est bon.
Carrément. Toi tu as juste à upload ton fichier via ton form (tout bidon si tu fais pas de verifs ensuite, t'as déjà le code d'ailleurs) et ensuite tout est dans le tuto quoi...

A la limite pour ce qui est requètes SQL je comprends ton raisonnement de ne pas regarder trop loin en arrière car ça évolue souvent, mais pour ce qui est PHP natif ça change pas des masses... Parfois tu peux trouver du code orienté Objet (avec des classes) à la place de code procédural mais sinon c'est assez rare qu'un article bien référence ne soit plus d'actualité. Même quand des fonctions sont "deprecated", ça tourne encore sauf que ça génère des erreurs type "Notice" (rien de grave en soit) et si ça te gêne tu peux remplacer ces fonctions par leurs remplaçantes qui sont indiquées sur php.net.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés