Bonjour à tous,
Je suis en train de réaliser un page en PHP/Javascript dont voici une illustration du fonctionnement : http://images1.hiboox.com/images/2508/982b6325973d734df9579bddbfab439a.jpg
Le principe est de générer aléatoirement des éléments d'une BdD et d'afficher une courte description dans la case du bas lors du passage de la souris.
Là où j'aurais besoin d'aide, ça serait dans le passage d'un paramètre contenant des espaces à une fonction Javascript.
Pour l'instant, tout fonction lorsque la description se résume à un seul mot, mais dès que je mets plusieurs mots, donc des espaces, la fonction plante.
Voici les lignes en question :
Print "<a href='#' onmouseover=afficher('$adjectif') onmouseout='effacer()'> etc... ";
Envoie le paramètre $adjectif contenant la description
function afficher($adjectif)
{
document.form.area.value=$adjectif;
}
Fonction qui affiche la description au passage de la souris
Je précise que j'ai bien testé, et le paramètre $adjectif contient bien toute la chaine (y compris les espaces) lorsque la ligne PHP est éxécutée.J'ai aussi essayer plusieurs combinaisons de parenthèses et d'apostrophes, mais rien n'y fait.
Merci d'avance aux personnes qui pourront m'aider.
ajoute simplement des guillemets autours de ta chaine de caracteres qui contient des espaces, ça devrait passer.
je parle de guillemets double " pas d'apostrophes '.
Je ne peux pas mettre de guillemets, car toute l'instruction l'est déjà avec le :
Print "....";
Donc je ne peux mettre que des quotes simples.J'ai essayé d'inverser pour faire :
Print '...';
Et les variables entre guillemets, mais ça ne fonctionne pas : ça passe la chaine "$adjectif" plutôt que la valeur qu'elle contient.
je suis sur qu'il doit etre possible "d'échaper" les caractères " dans un print.
essaye un truc dans ce genre:
Print "hier toto a dit \"salut\"";
ou alors essaye de concaténer ton texte avec ta variable. Je ne suis pas un dieu du php mais il me semble que pour concaténer deux chaine l'opéateur c'est ..
par exemple "toto".."titi" donnera "tototiti"
du coup tu peux essayer un truc comme ça :
Print"document.form.area.value=\""..$adjectif.."\"
;";
arg la dernière et plus importante ligne est passé a la trappe...
Print"document.form.area.value=\""..$adjectif.."\"
;";
désolé pour le triple post mais il s'avère que c'est ce satané forum qui s'amuse a deformer mes propos
il faut ecrire en une seule ligne ce qui se trouve apres le print. il ne doit pas y avoir de retour a la ligne avant le 1er point virgule.
Oula, tu nous fais un mélange entre PHP et JavaScipt^^
Dans le Print du PHP, on met des instruction HTML seulement, pas du JavaScript.Mais je vois où tu veux en venir
En fait, je cherche bien une méthode de ce genre, mais pas pour PHP, pour JavaScript.Car j'ai bien testé, et le $adjectif envoyé par le Print en PHP fonctionne bien, avec ou sans espace.
Ce qui pose problème, c'est la réception de ce $adjectif dans la fonction JavaScript lorsque $adjectif contient un ou des espaces.
En tout cas, merci de m'aider ![]()
attend, tu m'embrouille en disant que je melange javascript et php. Car ce n'est pas du tout ce que j'ai l'impression de t'avoir dis.
[relecture de tout le topic]
OK je vois ce que tu veux dire. Je n'ai juste pas pris le bon exemple.
C'est $adjectif (une variable de php) qui contient la chaine avec les espaces, c'est bien ça ? et tu voudrais l'ecrire comme paramètre d'une fonction javascript.
un truc comme ça ça fonctionne ? (en une seule ligne au cas ou le formatage sauterait)
Print "<a href='#' onmouseover=afficher(\""..$adjectif.."\") onmouseout='effacer()'> etc... ";
si ta variable $adjectif contient un truc du genre:
toto titi
alors ça va ecrire :
<a href='#' onmouseover=afficher("toto titi") onmouseout='effacer()'>
Jusque là, on est bien d'accord.
Le problème est que la fonction afficher en question, avec "toto titi" passé en paramètre, ça donne :
function afficher(toto titi)
{
document.form.area.value=toto titi;
}
Et ça, le Javascript, il n'aime pas !
ok, c'est donc là le point de notre mésentente.
Ce que j'essaye d'expliquer a grand coup d'exemples mal tournés c'est que tu dois mettre des guillemets autour de ta chaine de caractère passée en paramètre a ta fonction javascript:
essaye avec :
// definition de la fonction
function afficher(chaine)
{
document.form.area.value=chaine;
}
// appel de la fonction avec une chaine contenant des espace:
afficher("toto titi");
Les guillemets vont là (lors de l'appel de la fonction)
On tourne en rond lol.
Ma fonction afficher est dans un Print, ce qui fait que je ne peux pas mettre de guillemets dans l'appel :
Print "...afficher('$adjectif')...";
Donc j'ai mis des quotes.Si je mets des guillemets, cela ne fonctionne pas, ni doubles quotes, ni doubles guillemets, ni guillemets+quotes, ni quotes+guillemets...D'où ma demande d'aide.
Je sens qu'il va falloir que je trouve un autre moyen de faire ça ![]()
d'ou ma proposition d'échaper tes guillemet avec l'antislash
essaye
Print"coucou \"phrase entre guillement\" s'affiche entre guillemets";
Le résultat est identique.
Sacrebleu !
pourtant tu devrais avoir les guillemets...
essaye avec la fonction echo qui à l'air de faire ce que je raconte depuis tout à l'heure.
http://www.siteduzero.com/tuto-3-68-1-premiers-pas-avec-php.html#ss_part_2
regarde le point : "Comment faire pour afficher un guillemet ?"
Désolé, rien n'y fait.Echo ne change rien non plus.
Je reste convaincu que le problème se trouve au niveau du JavaScript, et non pas du PHP.
Je viens de faire un test : si je passe le paramètre avec un apostrophe, ça fonctionne.C'est seulement en cas d'espace que ça ne fonctionne pas.
Mais...Si je mets un et bien ça fonctionne aussi ! Seulement, je ne peux pas mettre des partout, cela crée une chaine trop longue pour être gérée par PHPMyAdmin.
c'est facile de savoir d'ou vient le probleme,
lance ta fonction "a la main" en lui donnant toi meme une chaine de caractére avec et sans guillemet:
afficher(totot titi);
afficher("totot titi");
et regarde si l'une d'elle (plutot la seconde) fonctionne
Si ça marche alors le pb vient du php, sinon il vient de ta fonction javascript.
ben crée une variable de type chaine qui contient " " et tu remplaces nbsp par ta variable, ca fait gagner quelques caracteres
ou meme mieu :
si tu arrive a enregistrer correctement ta chaine avec espace dans ta BdD et que tu arrive aussi a recuperer correctement cette chaine mais que c'est juste le passage a la fonction javascript qui pose problème.
Tu peux traiter ta chaine avec espace juste apres l'avoir lue dans la BdD pour remplacer tout les espace par  .
comme ça tu n'augmente pas la taille des chaines stockées dans la base de données.
VouVerreyDan1an
Pas possible, la description (contenu de $adjectif) est définie dans PHPMyAdmin, pas sur la page PHP.
guyver2
Alors, ma fonction JavaScript est :
function afficher($adjectif)
{
document.form.area.value=$adjectif;
}
Si, par exemple, le $adjectif envoyé par le PHP est "toto titi", ça donne :
function afficher(toto titi)
{
document.form.area.value=toto titi;
}
J'ai testé "à la main", et ça ne fonctionne pas.