8741 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Dim a écrit :
Re,

J'ai bien compris header, qui n'est pas compliqué lorsqu'on l'implémente pas avec d'autre paramètre. Cependant, malgré une syntaxe simple

header("location:  http://www.monsite.fr/erreur/index.php");
 

C'est un exemple, mais j'ai aussi essayé

header("location:  http://www.monsite.fr/");
 

et rien y fait...
il m'affiche

Warning: Cannot modify header information - headers already sent by (output started at /home.10.22/monsite/test/include/indexReference.inc.php:9) in /home.10.22/monsite/test/erreur/contenu.inc.php on line 49


La ligne 49 étant la ligne du header.
Je comprend pas trop d'où viens l'erreur sachant que dans mon index référence je n'ai pas de header Smiley decu


Re, boujour Nolem
Peut être devrais je dire bonsoir? Ça dépend... Smiley cligne

Bon alors voila ou j'en suis avant d'aller e coucher...

1. Toujours pas de solution pour header... Smiley fache
Je vois pas ce qui cloche avec elle... Smiley lol
2. Modification de l'endroit où sont affichées les erreurs (sur la même page en bas du formulaire) Smiley biggrin
3. Mise en place de la variable date pour la faire parvenir dans les mails.
D'ailleurs la fonction mail contient telle un nombre limité d'intégration de variable?
Car si je rajoutais la variable date directement dans mail() cela ne m'affichai que la date dans le mail. Si je supprimais une variable (n'importe laquelle, alors dans ce cas toutes les données était affichées... Smiley biggol )
4. Enfin je me suis documenter (reprise a zero sur le site du zero) de mes bases de php... Histoire de revoir les fonctions personnaliser, les fonctions booléen,... Smiley smile

Bonne nuit au craque du net...



[EDIT]
Bonjour à tous (décidément je vais vous faire ch... jusqu'au bout. dsl.)
Alors voila, après une bonne petite nuit je croi avoir les idées plus claire... Smiley smile
Du coup je voulais savoir si l'erreur que j'avais ne viendrais pas du fait qu'une action

<form name="erreur" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>" >

était déjà défini ici et que du coup en rajoutant le header dans une condition je modifiais cette valeur provoquant ainsi l'erreur...
Possible, impossible, probable?
J'ai essayé sans le action, toujours une erreur, sans le header, j'ai une page blanche qui s'affiche...normale car il ne sais pas quoi afficher...
Alors je comprend plus rien... Smiley biggol
Salut Nolem,
décidément je poste toujours un nouveau message en même temps que toi...
Pour la fonction date voila ce que j'ai fait

        $jour = date("d");
	$mois = date("m");
	$annee = date("Y");
	$heure = date("H");
	$minute = date("i");
//On définie la forme de la variable date
$date = "Date: $jour/$mois/$annee\nHeure: $heure:$minute";
//On l'intègre dans la variable mess pour l'envoyer dans le mail
$mess = "Nom: {$_POST['nom']}\nE-mail: {$_POST['email']}\nSite: {$_POST['webSite']}\n $date\n";
//enfin on la variable mess est posté dans l'envoi du mail...


Comme ça ça fonctionne.
Si je fait tous pareil sauf que j'intègre directement la variable date dans

mail($adress, $sujet, $mess, $date, $entete)

Alors j'obtient dans mon mail que la date... et pas les autres valeurs.. Smiley biggol
J'ai pas bien compris ce que tu explique...
Comment ça il ne faut pas mettre d'affichage avant?
Si dans mon index référence j'ai une balise head avec tous le nécessaire et que dedans je lui donne une <legende> Titre de mon site</legende>
Alors il y as beug?
...
Modérateur
Re,

Là, il n'y a pas d'erreur :

<?php
header("location:www.mon_lien.fr");
.....



Là, il y aura une erreur :

<html>
<head>
....
</head>
<body>
<?php
header("location:www.mon_lien.fr");
?>
</body>


Et là aussi :

<?php
...
echo"mon texte afficher avec par exemple traitement de variable affiché";
header("location:www.mon_lien.fr");
.....


++
OK, merci pour l'exemple efficace...
Donc si je comprend bien je doit enlever la balise head de mon index référence si je veut mettre un header dans mon formulaire?
Je vais tester et voir comment me débrouiller...

Pour le mail() je crois avoir compris pourquoi ça ne fonctionnais pas. Elle admet que 4 arguments qui sont:
le destinataire, le sujet, le message et des headers additionnels et moi j'avais mis la variable date en plus... donc beug...
Modérateur
En gros tu vas faire comme ceci :


<?php
if ($_POST['action'] == 'submitted') {
//etc.
if(mail(...)==true{
 header();
 // ...
}else{
?>
<html>
<head>
<!-- ... -->
</head>
<body>
<form ... >
<!-- formulaire -->
</form>
</body>
</html>
<?php
} //end if
?>


Je pense que cela devrait fonctionner.

La fonction date() a exactement5 paramètres dont deux optionnels.
Si tu mets un mauvais paramètres, il est évident que cela ne fonctionne pas. Pour ce qui de mettre la date dans le mail, intégre le dans la variable $message.
Soit :


$date=date("d/m/Y")
$mess="mon texte que j'envoi au destinataire.";
$mess .= "mon texte que j'envoi au destinataire.";
$mess .= "mon texte que j'envoi au destinataire.".$date."suite de texte";
$mess .= "fin du texte";


++
Modifié par Nolem (12 Jul 2008 - 15:27)
Merci encore et toujours pour toutes ces petits exemples bien pratique.

Cependant pour le premier exemple, si je suis le principe que tu me donne cela me reviendrais à mettre le code php qui me permet de faire les vérifications dans un autre fichier que celui où se trouve le formulaire.
Il se trouverais alors dans mon indexReference qui est appelé à chaque nouvelle page.
Ça risque donc de poser des problemes car il me semble qu'on ne peut pas appeler le php comme on peut le faire pour le javascript.

Autre solution à laquelle je pense, mais j'ai pas encore réfléchie dessus, serait de modifier mon indexReference en lui enlevant la partie head.
Ensuite je réinsère celle-ci dans chaque fichier qui change, soit, sur mon site, le fichier contenu.in.php
Mais le problème que cela va me poser c'est que mon fichier contenue sera appelé par mon indexRéférence, donc par un include situé dans une balise body... Je suis pas sur que cela soi très correcte de mettre head dans un body...

Pour la date, j'ai mal du m'expliquer au dessus (dsl) mais en gros ce que j'ai fait c'est ce que tu m'as conseillé... Smiley cligne
Modifié par Dim (12 Jul 2008 - 18:10)
Modérateur
Re,

Tu n'ai pas obligé d'utiliser la fonction include() ou include_once() ou require() ou require_once() pour traiter le formulaire. Normalement, comme je t'ai donner le code, cela doit fonctionner. Tu dois juste ajouter au dessus de la balise <form...>, les balises html communes (<html>, <head>, <body> etc.).

EDIT :
Ne pas mettre de ligne blanche en haut également. header() n'aime pas trop aussi de mémoire.

++
Modifié par Nolem (12 Jul 2008 - 19:21)
Si je te suis, je doit intégrer des balises head et body sachant que la balise head sera vide??? Smiley confus

Donc si j'écris rapidement le code que ça va me donner ça donne:

<html>
<head>
//toutes mes meta et mes link...
</head>
<body>
//l'entete de mon site
//Le menu

//Le formulaire
<?php
if ($_POST['action'] == 'submitted') {
//etc.
if(mail(...)==true{
 header();
 // ...
}else{
?>
<html>
<head>
<!-- ... -->
</head>
<body>
<form ... >
<!-- formulaire -->
</form>
</body>
</html>
<?php
} //end if
?>

//Ici le bas du site avec les informations xhtml css le menu sur une ligne mon adresse...

//Enfin on ferme le premier body
</body>
//puis on ferme le site
</html>


Donc j'intègre dans le contenu de mon site la structure d'un autre site? Smiley sweatdrop

Peut être qu'il me serait plus simple et plus propre de réaliser chaque page comme un site avec html head body...
Et dans ce cas la, intégrer des le début grâce à deux ou trois include les parties qui ne bouge pas (menu, en-tête, bas de page....)

Dans ce cas l'architecture de mes fichier ressemblerait à :

1fichier pour le style css (style.css)
1fichier pour le javascript (javscript.js)
1fichier pour l'en-tête (enTete.inc.php)
1fichier pour le menu (menu.inc.php)
1fichier pour le bas de page (basDePage.in.php)
Et autan de fichier que de menu et sous menu (accueil.inc.php / portfolio.inc.php / cv.inc.php ...)

Peut être plus simple et dans ce cas je pourrais donner un titre (<head> <title> Titre de ma page </title>) à chaque page et non comme actuellement un titre pour le site en entier...?
Je vais éssayer de trouver des informations à ce sujet ou poster un notre poste sur le bon forum car là ce n'est plus vraiment le sujet de départ...

Dans ce cas la je pourrais mettre ma vérification php avant ma balise head. Smiley murf
Re, j'ai quand même testé ce que tu m'as dit au dessus.
Je laisse tous mon code comme il est et j'insère head, body etc et je ferme body à la fin du formulaire...

Mais perdu ça ne fonctionne pas... Smiley decu
Soit j'ai fait une erreur... soit c'est que mon head principal (indexReference) domine le tout... et donc... toujours beug...

Peut être qu'il faut que je remette les informations de mon head principale dans le head que j'intègre au formulaire...
Modérateur
Essaie de remplacer header() par un echo du style
echo "le mail s'est correctement envoyé";

++
Si je remplace header par ce que tu mas dit cela fonctionne très bien...

[EDIT]

Header, le retour... Smiley smile

Alors voila, je devenais fou avec cette balise header qui ne fonctionnais pas...
J'ai utilisé ta technique, toujours erreur (il m'envoie quand même le mail Smiley biggol )
Du coup j'ai viré tous le site avec les indexReferences et j'ai fais au plus simple.
On arrive sur le site donc index.php qui redirige directe sur le formulaire.
Dans le formulaire j'ai utilisé la technique que tu me proposai au dessus.
J'ai donc mis toute ma vérification php avant la balise html et les autres qui suivent avec le formulaire....
Et la miracle... Smiley biggrin ça fonctionne. (Normale tu me l'avais dit...
Smiley cligne )

Donc en gros head doit être avant les balises html, head body.... de tous le site. La triche du html qui la suit ne fonctionne pas... dommage Smiley decu

Solutions trouvé mais pas testé:
*Un echo renvoyant sur une page... (je sais pas si c'est très correcte).
*Autre solution que j'envisage, peut être plus propice à un bon code, celui de créer chaque page avec des html head et body, les parties n'évoluant pas (menu, en-tete, pied de page,...) on les inclus avec include... (Rassuré vous je n'ai que l'acceuil et le formulaire fait... Smiley langue Donc pas trop de changement à faire... lol même si ça risque de me prendre pas mal de temps)
Le seul problème de cette méthode c'est que la forme globale du site va devoir être réécrite à chaque fois, du moins c'est ce que je crois (à part si je trouve comment faire avec un include)...
*Autre solution, utiliser javascript. Mais ceux qui ne l'on pas ou qui l'on désactivé... qu'est ce qu'il deviennent? Page blanche? pas top...
*Enfin dernière solution utiliser ob-start, j'ai trouvé ça sur un forum... Mais sur ce forum, ça ne fonctionnai pas... Smiley biggol
Donc ça c'est l'option dernier recours et de test si je veux finir de perdre les cheveux qui me reste....

Voila, j'ai un formulaire qui plus je l'affine et plus je me pose des questions de base du genre comment organiser mes fichiers (indexReference, des pages qui ont tous le code, le chemin entre les deux... Smiley decu ).
Ce qui est sur c'est que cette foutu balise header, il faut y penser avant même de faire le site lol...

Si quelqu'un une solution miracle... je suis preneur Smiley cligne

[EDIT2]
L'heure tardive me rappel que j'ai sommeil...(dsl moi je dort la nuit Smiley smile )
Bon j'ai pas trouvé comment faire un echo en ouvrant directement une page... echo <a href=... oblige d'avoir une page blanche avec juste le nom du lien... C'est pas très propre et fait pas très pros...
Donc je vais me coucher avec l'idée que demain je vais modifier la structure de mon site... Smiley decu
Après normalement tous iras bien.... Smiley ravi

J'éditerais le titre demain si je fini par faire fonctionner mon formulaire.
Je changerai aussi le nom car il n'as plus vraiment rien a voir... (cependant la question est toujours d'actualité...comment récupère t'ont la valeur de la ou les chekbox coché pour me les faire parvenir dans le mail???)

Merci...
Modifié par Dim (13 Jul 2008 - 01:25)
Modérateur
Salut Dim Smiley smile ,

Je vois que tu as assez bien saisie la fonction include(). Personnellement, je préfère utiliser require_once(). Avec include(), tu peux scinder les pages html. En gros cela se faire comme ceci :

page_top.inc.php :

<html>
<head>
<!--balise d'en-tête-->
</head>
<body>
<div id="header">
<?php require_once ("navigation.inc.php"); ?>
</div>
<div id="contenu">


navigation.inc.php

<ul>
<li><a href="#" target="_self">mon lien</a></li>
<li><a href="#" target="_self">mon lien</a></li>
<li><a href="#" target="_self">mon lien</a></li>
</ul>


pied.inc.php

</body>
</html>


Il manque bien sûr le contenu. Si tu utilises le PHP, le contenu est dynamique bien-sûr Smiley smile

En ce qui concerne tes checkbox. Te souviens-tu qu'elles sont récupérer dans le formulaire en tant que array ? ($option) Je te mets sur la voie en t'écrivant cette question : Comment affiche t'on un array ? (pas en mode débuggage bien sûr (print_r())).

Une fois que tu as vu comment faire il suffit d'intégrer la procédure dans la variable $mess de ton mail Smiley cligne

++
Modifié par Nolem (13 Jul 2008 - 17:13)
Salut Nolem,

Je pense que require_once() peut être pas mal, ça évite tous risque avec les variables selon ce que je viens de lire... En gros ça m'éviteras peut être des problèmes par la suite...
Mais bon c'est quand on as des problèmes que l'on apprend le plus... Smiley cligne

Celon ton exemple tu utiliserais les capacités php pour changer l'affichage du contenu?
J'utilise les liens bête et méchant d'HTML...

Voila ce que j'ai fait pour la refonte du déroulement de mon site.
L'arrivé sur le site entraîne l'ouverture du index.php:



<?$chemin=".";
$menuArbo="Accueil";
$backgrd="Accueil";
include ("$chemin/contenu.inc.php");
?>



Ensuite le contenu qui n'est plus vraiment le contenu:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<?php
// le code php de la page
?>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>monsite.fr => Acceuil</title>
<?php include ("$chemin/include/head.inc.php");?>		
</head>
<body>
	<div id="pcvert"> <!-- Cadre générale-->
		<img class="floatRight" src="<?php $chemin ?>/backgrd/shadow/fondRight.png" alt="" />	<!-- Image permettant de cahcer l'effet d'ombre sur la droite(Right)-->
		
		<div><!-- Insertion de la partie en-tête-->
			<?php include ("$chemin/include/enTete.inc.php");?>
		</div><!-- Fermeture de la partie en-tête-->
		
		<div id="contenu"><!-- Insertion de la partie contenu-->
	
Le contenue

		</div><!-- Fermeture de la partie contenu-->
		
		<div><!-- Insertion de la partie footer (pied de page)-->
			<?php include ("$chemin/include/footer.inc.php");?>
		</div><!-- Fermeture de la partie footer (pied de page)-->

	</div><!-- Fermeture du cadre générale -->
</body>
</html>
<?php } ?>


Chaque include inclus donc les parties inchangées... Cependant ça alourdi quand même chaque page de contenu...

Peut être y à t'il mieux comme méthode?

Pour le header même avec cette méthode... Toujours un beug... Smiley fache
Pourtant le header apparait bien avant html head et body...
Autre remarque notepad++ ne le reconnais pas... Le texte est affiché en noir... Problème de notepad où problème de syntaxe?

Sinon pour le array je vais tester de faire ça car le problème header commence sérieusement à me casser les c... (pour rester poli lol)

Encore un petit truc... Je profite de ta bonté (c'est pas bien), j'ai l'intention une fois le site en place de faire le même en anglais... Pour ça je pense devoir utiliser une variable $langue (par exemple) qui une fois prendrai automatiquement la valeur francais à l'ouverture et en cas de clique sur le bouton anglais prendrai alors la valeur anglais. Je mettrais ainsi les contenu anglais et francais dans le même fichier. Bonne idée?
Sinon, j'ai vu une autre solution sur certains site qui consisterai a créer pour le français un sous-domaine appelé www.fr.monsite.fr et en anglais www.an.monsite.fr
Je penche plutôt sur la première solution, mais j'aimerais bien avoir le point de vue d'un grand maitre du web... Smiley cligne
Modifié par Dim (13 Jul 2008 - 19:11)
Modérateur
C'est encore logique que ton header() te renvoi une erreur.

Header doit être avant tout affichage y compris le doctype !. Le doctype est un affichage.

a écrit :

Chaque include inclus donc les parties inchangées... Cependant ça alourdi quand même chaque page de contenu...


Si tu t'y prend bien, non pas du tout.

a écrit :

j'ai l'intention une fois le site en place de faire le même en anglais... Pour ça je pense devoir utiliser une variable $langue (par exemple) qui une fois prendrai automatiquement la valeur francais à l'ouverture et en cas de clique sur le bouton anglais prendrai alors la valeur anglais.


Bien comme idée, mais tu vas avoir recour à Mysql et faire des tables normalisées. En utilisant, une SGBDR, tu as plus de souplesse.

EDIT :
En ce qui concerne notepad++, je ne peux pas vraiment te dire. Je n'utilises pas du tout. J'utilise soit Go-live CS ou Dreamweaver (Cela dépend sur quel ordi je bosse).

++
Modifié par Nolem (13 Jul 2008 - 19:18)
OUAAAA...

Nolem tu est un miracle.....
Tu est mon miracle.... Smiley biggrin

Alors pour ce qui est de l'anglais... eu vu le chinois que tu viens de m'afficher, je pense que ça va attendre... lol
Je voudrais juste savoir si il est possible de réintégrer facilement ce que tu viens de dire une fois le site créer?
Car si c'est pas le cas peut être qu'il faut que je me penche sur la question maintenant...
Je garde en mémoire le chinois que tu m'as dit pour le jour ou je l'apprendrais....
Toujours et encore moi...
Voila mon formulaire fonctionne impecablement... (faut juste que je retouche l'endroit ou sont affiche les erreurs...)
Mais je galère toujours à comprendre le fonctionnement des array.
J'ai bien trouver comment faire pour afficher la valeur d'un array.
De même pour afficher toutes les valeurs. Mais lorsque je veux juste afficher la valeur de la ou les checkboxes cochées, là, je pige plus rien...
Je vais encore me pencher sur la question demain, mais si tu pouvais un peu plus me mettre sur la piste... Smiley smile
J'essaye avec la fonction foreach précédé d'une condition empty, mais et d'une je suis pas sur que sa soi ça, et de deux ce qu'il faut ensuite c'est dire que la variable checkboxeCoche (par exemple) soit égale à chaque valeur de la variable option rempli... (la je perd la boule Smiley biggol )

Merci.
Bonne nuit a tous
PS: Promis demain ce post est marqué résolu (si j'arrive à comprendre comment faire pour récupérer la variable de ma checkboxe) et je fait un résumé de tous ce qui m'as été utile dans ce long déroulement pour les prochains...
Dim a écrit :
Mais je galère toujours à comprendre le fonctionnement des array.
Le plus simple est de commencer par lire la doc sur les tableaux et notamment toutes les fonctions associées Smiley murf .

Pour ta question, tu pourrais essayer :
if (!empty($_POST['option'])) {
	$mess .= "Pages contenant l'erreur :<br />\n"; 
	foreach ($_POST['option'] as $option){
		$mess .= '> '.$option."<br />\n"; 
	}
}

A+


Edit: et pour insister lourdement et t'inviter encore une fois à aller lire les tutos sur les sites dédiés à cela : les tableaux sur le Site du Zero.
Modifié par Heyoan (14 Jul 2008 - 01:26)
Bonjour Heyoan,


Dabord un grand MERCI pour ta reponse. Je vais tenter de comprendre comment fonctionne la methode que tu m'as donne ci-dessus.
C'est un peut pres ce que j'ai fait hier sauf que je n'avais pas ecrit > entre les deux variables, juste un egal...
[EDIT] Donc le probleme n'etait pas > car en faite c'est juste pour la deco... Mais le faite que j'utilisai une nouvel variable dans la fonction foreach. Le probleme c'est que celle-ci etait defini apres etre utilise pour definir la variable mess. (Des fois je me dit que je suis trop bete quand meme...)

Sinon je voulais juste t'indiquer que avant de poster mon message d'hier (et les precedent), j'ai beaucoup lu de doc sur les fameux tableau (peut etre pas encore asser), sur php depuis la base... sur les sites tel que le site du zero, ici meme sur les forum, sur phpdebutant...
Et donc que je ne pose jamais les questions sans avoir tenter pendant quelques heurs (parfois la journee) de le faire moi meme... Smiley smile

Mais ca fait de moi maintenant le plus grand fane de ce forum... Smiley biggrin
Et donc un futur "sauveteur". (Il faut quand meme que je perfectionne encore beaucoup mes connescences... Smiley langue ).

Merci beaucoup Nolem et Heyoan.
(Je fait un recapitulatif ce soir pour ceux qui voudrais comprendre comment resoudre les problemes qui ont ete resolu ici)

PS: Heyoan, il est vrai que je doit encore travailler mes tres tres faibles connescence sur php mais aussi sur tous le reste (XHTML, Javascript,...). Mais parfois c'est plus un manque de pratique...
Donc merci beacoup a vous de m`avoir aide.
Modifié par Dim (14 Jul 2008 - 15:10)
Pages :