Espace généré automatiquement

Eléphanteau du PHP | 45 Messages

24 août 2009, 20:22

Bonjour
Il m'arrive quelque chose d'incongru et là, je ne vois pas bien comment faire.
Je transmets des variables par le biais d'une URL (genre : http://www.mapage.php?mapremierevariabl ... iable=riri
J'envoie cette url par mail (type mailto).
Sur le mail, créé un lien genre 'cliquez ici' qui renvoir directement sur l'URL transmise.
Et là, c'est le malheur : l'url devient
http://www.mapage.php?mapremierevaria%2 ... iable=riri

(remarquez la présence incongrue du %20)
Donc, évidemment, je ne peux pas récupérer la valeur de mapremierevariable par un $_GET...

J'ai donc mis une vérif sur le mail, et en plus du cliquez ici, j'affiche l'URL entière par
echo "http://www.mapage.php?mapremierevariabl ... iable=riri";
Il affiche http://www.mapage.php?mapremierevariabl ... iable=riri
(remarquez l'absence du %20)

J'ai essayer d'inverser les deux variables, de retaper le texte (à la base tapé sous DW, puis sous BBedit), de changer "mapremierevariable" par "camesaoule", il trouve toujours le moyen de m'insérer un "%20" dans mon url...

Quelqu'un aurait-il une idée du pourquoi tant de malheur ????


Merci de vos réponses :)

ViPHP
ViPHP | 2291 Messages

24 août 2009, 20:34

Salut
En général le %20 apparaît quand il y a un espace dans l'adresse, est tu certain de ne pas avoir d'espace ?
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 45 Messages

24 août 2009, 20:35

Oui, j'ai tout vérifié, retapé, et j'en suis d'autant plus sûr que l'url qui s'affiche ne comporte pas le %20 ni d'espace... et quand je fais un "copier collé" de cette url, ça marche !
:(

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 août 2009, 20:58

as-tu essayé sur un autre mail ?

Eléphanteau du PHP | 45 Messages

24 août 2009, 21:10

Oui, sur plusieurs mails différents, depuis plusieurs machines différentes... mais toutes des MAC et non pas des PC !! Ca pourrait changer qq chose ?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 août 2009, 21:26

Logiquement non mais tu peux toujours essayer sur un PC. Là il ne devrait pas y avoir de problème, comment un espace peut-il s'ajouter tout seul au milieu d'un mot qui plus est...mystère...

Donne nous le code si jamais c'est toujours pareil qu'on puisse tester aussi.

Eléphanteau du PHP | 45 Messages

25 août 2009, 02:00

Ok... je viens de tester depuis un PC, et c'est pareil...
Voici donc le code :

Le formulaire

<FORM ACTION="inscription.php" NAME="form_suspension" METHOD="POST" ENCTYPE="x-www-form-urlencoded" onSubmit="return VerifFormulaire(this)" >
<INPUT NAME="nom_utilisateur" ID="Nom" TYPE="text" SIZE="30" maxlength="30" onKeypress="return valid_mail(event);">
<br>
<font> Entrez votre mot de passe</font><br>
<INPUT NAME="mdp_utilisateur" ID="Mot de passe" TYPE="text" SIZE="30" maxlength="15" onKeypress="return valid_mail(event);">
<br>
<font>merci de saisir votre email</font>.<br>
<INPUT NAME="email_utilisateur" ID="Email" TYPE="text" SIZE="30" value="<? echo $email_utilisateur ?>">
<br>
<br>
<font> Confirmez votre email</font><br>
<INPUT NAME="confirm_email" ID="Email de confirmation" TYPE="text" SIZE="30" ><br>
<br>
<INPUT NAME="nom" TYPE="submit" VALUE="Validez >>">
</FORM>

Qui redirige vers la page inscription.php
<?
$aujourdhui = date("d/m/Y");
$nom_utilisateur = $_POST['nom_utilisateur'];
$mdp_utilisateur = $_POST['mdp_utilisateur'];
$email_utilisateur = $_POST['email_utilisateur'];
$confirm_email = $_POST['confirm_email'];
echo "<FONT>Consultez votre boite mail et cliquez sur le lien. A tout de suite !</font>";
$subject = 'Votre abonnement';
include('mail.php');

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: inscription <[email protected]>\r\n";
$headers .= "Reply-To: <[email protected]>\r\n";
$headers .= "X-Mailer: PHP/" . phpversion() . "\n" ;
$headers .= "To: <$email_utilisateur>\r\n";
mail(null, $subject, $message, $headers);


?>


Qui fait appel au fichier mail.php


<?
$url = 'http://www.monsite/inscription_ok.php?';
$url.= 'mdp_utilisateur='.$mdp_utilisateur;
$url.= '&nom_utilisateur='.$nom_utilisateur.'&email_utilisateur='.$email_utilisateur.'/';
$message = 'Paris, le '.$aujourdhui.'<br><br>';
$message .= 'Bonjour <br clear=\'all\'><br clear=\'all\'>';
$message .= 'Vous souhaitez vous inscrire sur notre site de nous vous en remercions vivement.<br clear=\'all\'>';
$message .= 'Pour valider votre inscription, veuillez cliquer sur le lien suivant :<br clear=\'all\'>';
$message .= '<a href=\''.$url.'\'>';
$message .= 'www.monsite/inscription_ok.php';
$message .= '</a><br>';
$message .= 'Cordialement.<br><br>';
$message .= '<br><br><br><i><B>REMARQUE IMPORTANTE:<BR></B>Si le lien contenu dans ce mail ne fonctionne pas, copier le lien ci dessous et coller le dans la barre de navigation de votre navigateur.</i><br>';
$message .= '<i>'.$url.'</i>';

?>


Je vous ai épargné les tableaux de présentation, etc... Alors quand on clique sur le lien, on a l'espace
http://www.monsite/inscription_ok.php?m ... [email protected]

alors que le lien qui s'affiche en fin de mail (après "remarque importante"est le suivant : http://www.monsite/inscription_ok.php?m ... [email protected]

remarque intéressante : lorsque j'inverse les variables dans mon url, ça donne ça :

http://www.monsite/inscription_ok.php?n ... [email protected]

comme si il y avait un bug autour du mot "utilisateur"... ou plutôt après un certain nombre de caractère. Puisque j'ai aussi fait l'essai en modifiant "nom_utilisateur" par "nom" et mon %20 était juste après le &...

Je sais, ça paraît fou...

Alors si vous avez une idée, je suis preneur !!!
Merci à tous !!

*
Modifié en dernier par medianeweb le 25 août 2009, 03:12, modifié 1 fois.

Eléphanteau du PHP | 45 Messages

25 août 2009, 03:08

Bon voilà j'ai "trouvé", si on peut appeler ça "trouver" !
En y allant pas à pas, j'ai vu que mon bug se trouvait dans le fichier mail.php
J'ai testé chacune des lignes et c'est celle qui est juste avant
$message .= '<a href=\''.$url.'\'>';
qui génère un espace dans $url.
j'ai ajouté la ligne suivante (un peu en désespoir de cause)
$message .=' ';
et là, contre toute attente ça a fonctionné...
je ne comprends pas pourquoi.
Si vous avez une explication à cette bizarrerie :)

Sinon, je continuerai de croire que les lois de l'informatique sont parfois impénétrables...

Salutations et remerciements à ceux qui ont bien voulu se pencher sur mon problème !

A bientôt

:)

Mammouth du PHP | 985 Messages

25 août 2009, 04:18

$message .= '<a href=\''.$url.'\'>';
$message .= 'www.monsite/inscription_ok.php';
$message .= '</a><br>';
Déjà pourquoi découper l'url en 3 lignes?
Puis: '<a href=\''.$url.'\'>' #-o
Trop compliqué, rassemble donc tout, et ensuite si tu écris simplement comme ceci:
$message .= '<a href="' . $url . '">www.monsite/inscription_ok.php</a><br>';
Ou
$message .= "<a href='" . $url . "'>www.monsite/inscription_ok.php</a>\r\n";
Ps: Faudra peut-être vérifier les autres lignes aussi, suivant le même principe.

Test et dis moi ... :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 45 Messages

25 août 2009, 15:59

Bon il semblerait que mon hébergeur ait bloqué la fonction "mail"... suite à une fausse manip cette nuit qui a généré l'envoie d'environ 5000 mails :(

Donc je peux plus rien tester maintenant, mais dès que c possible je te tiens au courant !

Sinon, pour info, oui, évidemment, l'url sur 3 lignes c'est trop compliqué, ms j'avais fait ça pour isoler les pb...
cela dit, je vais utiliser ta syntaxe, plus claire...
j'en profite pour te poser la question : quelle différence avec
$url = 'blablabla.php' et
$url = "blablabla.php" ?

vaut-il mieux utiliser " ou ' ?

Mammouth du PHP | 985 Messages

25 août 2009, 16:06

$url = 'blablabla.php' et
$url = "blablabla.php" ?
vaut-il mieux utiliser " ou ' ?
Aucune différence, si ce n'est que bizarrement et apparemment \r\n qui remplace ici <br> sont exécutés correctement que entre 2 ".
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

25 août 2009, 18:58

La principale différence, c'est qu'entre guillemets (") php va tenter d'interpréter les variables qu'il rencontre (idem pour le \n) :
$var = 'le monde';
echo = "bonjour $var"; // affiche : bonjour le monde
echo = 'bonjour $var'; // affiche : bonjour $var
Mais d'une manière générale, il vaut mieux sortir ses variables des chaines, c'est plus lisible et ça évite de s'arracher les cheveux parce qu'on a mit des apostrophes au lieu de guillemets. Par ailleurs le fait que php ne cherche pas à identifier les variables entre aopstrophes permet par conséquent d'améliorer un chouillah les performances (mais doit en falloir vraiment, vraiment beaucoup pour que ça commence à se sentir... c'est plus pour le principe que pour un véritable effet :))

Autre caractéristique utile, entre apostrophes, pas besoin d'échapper les guillemets et inversement :
echo '<img src="monImage.jpg" alt="sonTitre" style="..." />';
// est plus lisible (et donc plus facile à comprendre et à maintenir) que :
echo "<img src=\"monImage.jpg\" alt=\"sonTitre\" style=\"...\" />";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 45 Messages

25 août 2009, 19:14

Hey ! Merci pour ces explications entre ' et " ! Voilà enfin, je n'hésiterai plus ! :P =D>

Mammouth du PHP | 985 Messages

25 août 2009, 21:24

Ok Cool, ca je ne savais pas, mais ca explique pas mal de choses.
J'avais effectivement remarqué que certaines fois les variables étaient exécutées et d'autres fois non...
Mais je ne m'étais jamais attardé dessus, vue que je sors toujours les variables...:
La principale différence, c'est qu'entre guillemets (") php va tenter d'interpréter les variables qu'il rencontre (idem pour le \n) :
$var = 'le monde';
echo = "bonjour $var"; // affiche : bonjour le monde
echo = 'bonjour $var'; // affiche : bonjour $var
Mais d'une manière générale, il vaut mieux sortir ses variables des chaines
Et merci pour la précision...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

ViPHP
AB
ViPHP | 5818 Messages

25 août 2009, 22:39

Hey ! Merci pour ces explications entre ' et " ! Voilà enfin, je n'hésiterai plus ! :P =D>
Quand on en a pris l'habitude, effectivement on arrive à coder sans trop se prendre la tête en utilisant les simples quotes et en sortant ses variables - c'est d'ailleurs le même Ryle qui m'en a donné le goût il y a quelques années :)

Juste pour dire qu'il ne faut pas non plus en faire un règle absolue car dans certains cas (beaucoup moins fréquents il est vrai) commencer par des doubles quotes est beaucoup plus facile (ce qui n'empêche pas de sortir ses variables en cas de besoin).

Donc ma règle est à priori de coder avec des simples quotes et de sortir mes variables (à vue de nez dans 98% des cas ) mais de garder l'option double quote en réserve au cas ou ça se complique trop vite, car souvent quand ça se complique trop vite c'est qu'on à mal négocier le départ :wink: