IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Cookies] la méthode setcookie fonctionne en local, mais pas sur l'hébergeur


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut [Cookies] la méthode setcookie fonctionne en local, mais pas sur l'hébergeur
    Slt à tous , je viens d'héberger mon site web sur planethoster et je rencontre un souci avec la création d'un cookie. Voila ou je rencontre un souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    				if(!(setcookie("champsForm[nom]",$_POST['nom']))){
    									echo "<script type='text/javascript'>
    									alert('Probleme avec la methode setcookie');
    									</script>";
    				}
     
     
    				setcookie("champsForm[message]",$_POST['message']);
    				setcookie("champsForm[email]",$_POST['email']);
    				setcookie("champsForm[url]",$_POST['url']);	
     
    				echo "<script type='text/javascript'>
    					alert('Erreur de recopie du champs de sécurité');
    					window.location.replace('signature.php');
    				</script>";
    Ce code est exécuté lorsque l'utilisateur recopie mal le captcha d'un formulaire. On récupère tous les champs que l'utilisateur a rempli dans un cookie, on laisse un message comme quoi le captcha a mal été recopié, on réactualise par la suite et on pré-rempli les champs des anciennes infos de l'utilisateur grâce au cookie.
    Le Hic c'est que la méthode setcookie me retourne false sur l'hébérgeur mais sur ma machine en local ca fonctionne très bien. Alors qu'est ce qui peut faire que ca ne fonctionne pas ? Est ce que par sécurité l'hébergeur planethoster bloque par défaut les cookies?

  2. #2
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Avez-vous essayé de mettre le path et le domain ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcookie ("TestCookie", "", 0, "/", ".example.com");
    Par ailleurs, pourquoi passer par les cookies ? Surtout que là vous créez 4 cookies pour un simple formulaire...

    Les sessions, c'est bien aussi...
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    En fait je veux faire un formulaire assez élaboré. C'est à dire que les champs obligatoire du formulaire doivent être bien informés (grâce aux expressions régulières) pour que le bouton de validation (du formulaire) devienne actif.
    Pour cela je crée un cookie en php et je le récupère par la suite en javascript, voici le code javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    	<script language="javascript" type="text/javascript">
     
     
        /*déclaration d'un tableau*/
    		var tabChampMess=new Array;
     
     
    		for(i=0;i<5;i++){
     
    			if((i==1)||(i==2)){//email et url facultatif donc champs valides par defaut
    				tabChampMess[i] = 1;
    			}  
    			else{//sinon c'est obligatoire donc a zero
    				tabChampMess[i] = 0;
    			}
     
    		}
     
    		function getCookie(sName) {
            var cookContent = document.cookie, cookEnd, i, j;
            var sName = sName + "=";
     
            for (i=0, c=cookContent.length; i<c; i++) {
                    j = i + sName.length;
                    if (cookContent.substring(i, j) == sName) {
                            cookEnd = cookContent.indexOf(";", j);
                            if (cookEnd == -1) {
                                    cookEnd = cookContent.length;
                            }
                            return decodeURIComponent(cookContent.substring(j, cookEnd));
                    }
            }       
            return null;
    		}
     
     
    		if(getCookie('champsForm[nom]')){
    			var id = 1;
    			var txtOrigin = getCookie('champsForm[nom]');
    			txtModif = txtOrigin.replace(/(\+)/g, ' ');
    			document.getElementById(id).value=txtModif ;
    			verifMessage(1);
    			document.cookie= 'champsForm[nom]'+"="+escape('');
    		}
     
    		else{
    			alert('probleme');
    		}
     
    		if(getCookie('champsForm[email]')){
    			var id = 2;
    			document.getElementById(id).value = getCookie('champsForm[email]');
    			verifMessage(2);
    			document.cookie= 'champsForm[email]'+"="+escape('');
    		}
     
    		if(getCookie('champsForm[url]')){
    			var id = 3;
    			document.getElementById(id).value = getCookie('champsForm[url]');
    			verifMessage(3);
    			document.cookie= 'champsForm[url]'+"="+escape('');
    		}
     
    		if(getCookie('champsForm[message]')){
    			var id = 4;
    			var txtOrigin = getCookie('champsForm[message]');
    			txtModif = txtOrigin.replace(/(\+)/g, ' ');
    			document.getElementById(id).value=txtModif ;
    			verifMessage(4);
    			document.cookie= 'champsForm[message]'+"="+escape('');
    		}
     
     
     
    	function verifMessage(idChampMess){
     
    		switch(idChampMess){
    			case 1: regexp = /^(.{1,30})$/; /*nom de la personne*/
    			break;
    			case 2: regexp = /^(([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3})$/; /*expression régulière email*/
    			break;
    			case 3: regexp = /https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w/_\.]*(\?\S+)?)?)?/;/*url*/
    			break;
    			case 4: regexp = /^(\r|\n|\r\n)|(.)+$/; /*message*/
    			break;
    			case 5: regexp = /^(.+)$/; /*captcha*/
    			break;
    		}
     
    		var champMess = document.getElementById(idChampMess).value;
     
    			if((idChampMess==1)||(idChampMess==4)||(idChampMess==5)){/*nom de la personne ou message ou captcha*/
     
    			  if(champMess.match(regexp)){
    					document.getElementById(idChampMess).style.background = '#ffffff';
    					tabChampMess[idChampMess-1]=1;
    			  }
     
    			  else{
    					document.getElementById(idChampMess).style.background = '#f6e3e3';
    					tabChampMess[idChampMess-1]= 0;
    			  }
     
    			}
     
    			else{/*email ou url*/
     
     
    			  if((champMess.match(regexp))||(champMess=='')){
    					document.getElementById(idChampMess).style.background = '#ffffff';
    					tabChampMess[idChampMess-1]=1;
    			  }
     
    			  else{
    					document.getElementById(idChampMess).style.background = '#f6e3e3';
    					tabChampMess[idChampMess-1]= 0;
    			  }	
     
    			}
     
    		validationMessage();
     
    		}
     
     
    		function validationMessage(){
     
    			var regExpMess = true;
     
    			for(i=0;i<5;i++){
    				if(tabChampMess[i]==0){
    					regExpMess = false;
    				break;
    				}  
    			}
    			if(regExpMess){
    				document.getElementById(6).disabled=false;
    				document.getElementById(6).style.cursor= 'pointer';
    			}
    			else{
    			 document.getElementById(6).disabled=true;
    				document.getElementById(6).style.cursor= 'default';		
    			}
     
    		}
     
     
    	</script>
    J'ai testé en mettant le path et le domain ca fait la même chose, vraiment bizarre ! Au pire j'essaierai avec les sessions si ca ne marche toujours pas !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Je ne fais que répéter un classique, la fonction setcookie échoue forcément s'il y a une quelconque sortie avant son appel.
    Si tu fais un echo, ou s'il y a une erreur AVANT le setcookie(), setcookie renverra FALSE forcément.






    Autre chose, s'assurer coté client (via javascript) que les champs d'un formulaire sont bien remplis sert essentiellement à épargner de la bande passante (moins de formulaires "mal remplis" validés via submit).

    Mais cela est entièrement "optionnel" parce que même rempli les informations peuvent être incorrectes (donc on doit redemander les bonnes informations, et présenter à nouveau le formulaire).

    J'ai l'impression que ton script rend obligatoire

    1°) l'utilisation de cookie. Actuellement rares sont les utilisateurs qui désactivent les cookies.
    2°) l'utilisation de javascript. Les utilisateurs qui coupent java ne sont pas rares.

    Et que donc tu rends ton script inaccessible aux personnes qui désactivent java sur leur navigateur, pourtant ce script n'a pas l'air de faire grand chose de très important (laisser un message ?) qui justifierait l'obligation d'accepter javascript.

  5. #5
    Membre éclairé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2011
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 411
    Points : 735
    Points
    735
    Par défaut
    Citation Envoyé par vince-29 Voir le message
    En fait je veux faire un formulaire assez élaboré. C'est à dire que les champs obligatoire du formulaire doivent être bien informés (grâce aux expressions régulières) pour que le bouton de validation (du formulaire) devienne actif.
    Pour cela je crée un cookie en php et je le récupère par la suite en javascript, voici le code javascript :
    En quoi est-ce élaboré ? C'est le fonctionnement de quasiment tous les formulaires en ligne maintenant. Ils n'utilisent juste pas la même méthode que toi

    Les étapes devraient être (mais ce n'est pas une obligation) :
    1. Affichage du formulaire 1 (session vide, tout est "normal")
    2. Remplissage du formulaire 1
    3. "Submit" du formulaire 1 capté par JS
    4. 1ere Validation via JS des champs (économie de temps de chargement et de bande passante)
    5. si pas ok, affichage du message (et/ou modification du DOM) directement dans le DOM
    6. si ok, (vrai) submit du formulaire vers PHP
    7. Récupération par PHP, 2e validation
    8. si ok, redirection vers la page de remerciement (par exemple)
    9. si pas ok, mise en session des messages, des différentes modif et redirection vers le formulaire 1
    10. Affichage du formulaire 1 (session remplie, modifier le formulaire en conséquence)
    11. Retour à l'étape 2
    Je suis fervent utilisateur de PHP et de jQuery.
    Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web de développeur web dans le Val d'Oise mais aussi plusieurs projets personnels.
    Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, une extension de navigateur pour envoyer l'URL de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc…

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 36
    Points : 30
    Points
    30
    Par défaut
    Je ne sais pas si c'est obligatoire de mettre "ce qui était bon dans le formulaire" en session.

    Moi je ne le fais pas, j'utilise des formulaires à mémoire (option "selected" pour les radios et checkbox, remettre le texte entre les balises textarea, et "value" pour les input text).

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 8
    Points
    8
    Par défaut
    Oui enfin je disais que pour moi c'est élaboré lol. Disons que ça empêche l'utilisateur de cliquer sur envoyer tant qu'il n'a pas remplit les bons champs. Un champs mal rempli est rouge sinon blanc ... Oué je sais c'est nul.
    Non mais c'est bon ca marche, j'ai réussi à trouver le fichier de log apache sur l'hébergeur et le message d'erreur était :
    PHP Warning : Cannot modify header information ...
    En fait je n'avais pas placer l'instruction ob_start au début de mon codage. Je me suis cassé la tete pour pas grand chose .
    En tout cas merci pour votre réactivité!

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/12/2008, 14h47
  2. [GD] imagettftext fonctionne en locale mais pas sur le web
    Par koKoTis dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 12/10/2008, 11h45
  3. [MooTools] AJAX fonctionne en local mais pas sur serveur
    Par LionL dans le forum Bibliothèques & Frameworks
    Réponses: 5
    Dernier message: 07/12/2007, 22h52
  4. AJAX : Fonctionne en local mais pas sur serveur distant ?
    Par jejefeds dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 19/06/2007, 14h26
  5. Réponses: 4
    Dernier message: 14/03/2006, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo