Page 1 sur 2

Pb syntaxe et autre...

Posté : 18 juil. 2008, 08:20
par jycs
Salut,

Pour faire apparaitre plusieurs infos en même temps, lors du rollhover d'un lien, j'utilise :
<script type="text/javascript">
function changeMessage(ladate, limage)
{
	message = 'Ajouté le '+ladate+'<br /><img src="'+limage+'" />';
	document.getElementById('trucachanger').innerHTML = message;
}
</script>

<a href="osef.html" onmouseover="changeMessage('20/12/2000', 'http://www.google.com/intl/en_ALL/images/logo.gif')">changer le message</a>
<div id="trucachanger">blabla</div>
Et le lien :
$myimgs [$i] = '<a href=\"recherche.php?mot=$titre\" onMouseOut=\"changeMessage(\'\', \'\')\" onmouseover=\"changeMessage(\"'.$resultat['date_add'].'\", \"'.$resultat['image'].'\")\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>';
Mais j'ai deux gros problèmes :

Quand je rollout, y'a ce texte qui reste :
Ajouté le
ainsi qu'une balise image vide...

Faudrait que ça enlève tout !

Autre question :

<a href=\"recherche.php?mot=$titre\" onMouseOut=\"changeMessage(\'\', \'\')\" onmouseover=\"changeMessage(\'.$resultat['date_add'].\', \'.$resultat['image'].\')\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>

me fait une erreur de syntaxe à cause de
changeMessage(\'.$resultat['date_add'].\', \'.$resultat['image'].\')

Mit comme ça, plus d'erreur mais plus rien ne marche (changé les ' en ") :
changeMessage(\'.$resultat["date_add"].\', \'.$resultat["image"].\')

Et comme ça il n'affiche pas les infos, au passage de la souris :
changeMessage(\"'.$resultat['date_add'].'\", \"'.$resultat['image'].'\")

Voilà... J'ai vraiment besoin d'aide :/

Posté : 18 juil. 2008, 09:46
par Sékiltoyai
Pour le problème de quotes, réfère toi à la doc :
http://fr.php.net/string

Posté : 18 juil. 2008, 11:06
par Truc
j'ai du mal à suivre et savoir ce que tu demandes au juste...
plusieurs sujets... débutant ou pas... aide ou travail clé en main...

Posté : 18 juil. 2008, 11:17
par jycs
Pfff, ça me démoralise...

Désolé pour le double post, mais là je commence à me perdre sérieusement (et à perdre la boule aussi, plusieurs jours d'arrachage de cheveux pour en finir avec ça... j'avance même pas).

Je vais recommencer depuis le début...

J'ai besoin d'intégrer à ça :
while($resultat = mysql_fetch_array($req)) {
$myimgs [$i] = '<a href=\"recherche.php?mot=$titre\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>';
$i++;
}
Un système pour afficher dans un div toutes ces informations :
$resultat['date_add']
$resultat['titre']
$resultat['image']
$resultat['description']
Tout à la fois quand je survole <a>.


Voilà, c'est juste ça, mais à cause de la syntaxe j'y arrive pas...

Posté : 18 juil. 2008, 11:26
par Sékiltoyai
Hé bien relis la doc sur les chaînes déjà...
Ta réponse s'y trouve...

Posté : 18 juil. 2008, 11:32
par jycs
Il faut que je trouve une alternative, ou que l'on me trouve une solution très rapidement, je dois faire ça le plus rapidement possible !!

J'apprendrais après, je peux pas me permettre de perdre plus de temps pour lire une doc ! (et pourtant je voulais m'attaquer aux regex, dom et tout...)

Je sais que vous n'aimez pas du tout les gus comme moi qui veulent qu'on leur mâche le travail, mais si je peux faire quelque chose en retour, dites moi quoi...

J'essaie d'être franc, j'y connais rien donc j'attends que ceux qui savent me disent, et en attendant je teste tout ce que je peux quasiment au hasard :(

Je suis même allé du coté de mootools, mais je peux pas mettre d'infobulle car j'ai un cadre en JS incontournable ><

A la limite, une doc qui explique exactement comment faire, je m'y jetterais dessus :(

Posté : 18 juil. 2008, 12:24
par Sékiltoyai
Ce que je te recommande n'est pas la mort. Manifestement tu n'as pas compris l'échappement des chaines de caractères. Je ne te demande pas de lire le manuel php entier, je te demande de lire une page, ca va te prendre 20 minutes, et vu que je suis super sympa, je te restreint même la lecture à ces deux sections :
http://fr.php.net/manual/fr/language.ty ... tax.single
http://fr.php.net/manual/fr/language.ty ... tax.double
La réponse y est, que tu sois pressé ou non, ce n'est pas notre problème, notre problème c'est que tu ne reviennes pas avec la même question demain, et pour cette raison ne compte pas sur nous pour donner la réponse cash...

Posté : 18 juil. 2008, 13:14
par jycs
Bon ok alors cash, tu veux combien de roupies en échange de la réponse ?

Image

Posté : 18 juil. 2008, 14:31
par zigz4g
Petit exemple pour aider, meme si la doc est ce qu'il y a de mieux (un clic sur un lien ca a l'air d'etre trop dur :wink: )
Une balise 'a' dans une page HTML :

Code : Tout sélectionner

<a href="http://fr.php.net/manual/fr/language.types.string.php#language.types.string.syntax.single">Clique sur ce lien pour lire cette doc.</a>
En version PHP :
<?php
echo '<a href="http://fr.php.net/manual/fr/language.types.string.php#language.types.string.syntax.single">Clique sur ce lien pour lire cette doc.</a>';
?>
Ok la pour le moment c'est simple, on passe a plus complexe. En HTML :

Code : Tout sélectionner

<a href="#" onclick="mafonction('arg1', 'arg2')">FAUT LIRE LA DOC</a>
En PHP :
<?php
echo '<a href="#" onclick="mafonction(\'arg1\', \'arg2\')">FAUT LIRE LA DOC</a>';
//Si tu essaye le code suivant en le decommentant, ca te fera une erreur de syntaxe :
//echo '<a href="#" onclick="mafonction('arg1', 'arg2')">FAUT LIRE LA DOC</a>';
?>
Comprends tu la gestion des \' dans ce cas la ? Si oui, alors tu peux corriger ton code.
C'est bien sur l'inverse si tu change tes doubles quotes (") par des simples quotes (').

Si non, faut comprendre que si tu fais une chaine en PHP commencant par une simple quote,
tu dois finir par une simple quote. Dans ce cas, tu ne peux pas mettre de simple quote dans
ta chaine sinon elle va couper ta chaine. C'est pour cela qu'on utilise le caractere "\" pour
que PHP ne l'interprete pas.

La je peux pas faire mieux que la doc. Bon courage.

PS: Surtout non, non, non ne clique surtout pas sur le lien suivant qui te donnera toute la doc
necessaire a ton probleme, surtout non ne le fait pas http://fr.php.net/manual/fr/language.ty ... tax.single :lol: :lol: :lol:

Posté : 18 juil. 2008, 15:28
par Truc
Bon ok alors cash, tu veux combien de roupies en échange de la réponse ?

Image
Le truc c'est de réfléchir calmement sans stresser, prendre une pause et regarder ton code.
Tu n'as nul besoin d'aller chercher loin (mootools...) il s'agit juste d'une syntaxe !

Posté : 19 juil. 2008, 01:52
par jycs
En fait je m'arrache les cheveux, j'étais super pressé et ça fait presque 4 jours (de 30 heures) que du réveil au coucher j'arrive pas à trouver de solution pour ce problème !! J'ai l'impression que c'est impossible, que j'y arriverais jamais. Mon père sur skype qui en sait un peu plus que moi, essaye tous les jours de m'aider le matin, mais lui non plus n'y arrive pas !

Pour ma part, c'est la première fois que je fais ce genre de truc, mais je suis obligé de le faire alors que j'y comprends rien !

Merci pour votre soutien Zigz4g et Truc... En effet maintenant je comprends mieux pour la syntaxe (mais au point où j'en suis, je suis pas contre une solution toute faite, je sais que j'abuse mais j'en ai terriblement marre, je veux en finir... quand mon site sera relancé, je compte apprendre plus sérieusement tout ça, y'a des chances que j'aide à mon tour pour m'entrainer).

Voici mon code en entier
<?php
function afficherx() {
$sql = "SELECT image,titre,description,cate, DATE_FORMAT(date_add,'%d/%m/%y') AS date_add FROM fichier ORDER BY id DESC limit 20";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  

$i = 1;
$myimgs = array();
while($resultat = mysql_fetch_array($req)) {
$myimgs [$i] = '<a href=\"recherche.php?mot=$titre\" onmouseover=\"afficherImage();\" onmouseout=\"enleverImage();\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>';
$i++;
}
return $myimgs;
}
$myimgs = afficherx();

echo '<SCRIPT LANGUAGE="JavaScript">
	function afficherImage()
	{
		document.getElementById(\"zoneImg\").innerHTML = "<img src="<?php echo $resultat[\'image\']; ?>" />";
	}
	
	function enleverImage()
	{
		document.getElementById(\"zoneImg\").innerHTML = \'\';
	}
</script>';

?>

<?php
echo '<SCRIPT LANGUAGE="JavaScript">
var direction=0  
var sliderwidth="645px"
var sliderheight="80px"
var sliderleft="0px"
var slidertop="0px"
var pixelstep=1
var timespeed=25
slidebgcolor="#000000"
var himgspace=""
var vimgspace="<div id=vimgspace></div>"
var slideshowspace=0 
var moveslide=new Array()

moveslide[0]="' . $myimgs[1] . '"
moveslide[1]="' . $myimgs[2] . '"
moveslide[2]="' . $myimgs[3] . '"
moveslide[3]="' . $myimgs[4] . '"
moveslide[4]="' . $myimgs[5] . '"
moveslide[5]="' . $myimgs[6] . '"
moveslide[6]="' . $myimgs[7] . '"
moveslide[7]="' . $myimgs[8] . '"
moveslide[8]="' . $myimgs[9] . '"
moveslide[9]="' . $myimgs[10] . '"
moveslide[10]="' . $myimgs[11] . '"

</script>'
?>
J'ai aussi essayé en remettant
$sql = "SELECT image,titre,description,cate, DATE_FORMAT(date_add,'%d/%m/%y') AS date_add FROM fichier ORDER BY id DESC limit 20";
devant le echo du JS, sans succès.


Le dernier JS n'a pas d'intérêt pour ce problème, c'est le premier JS qui doit afficher des trucs. Au moins il fait plus d'erreur grace à ton aide zigz4g mais <?php echo $resultat[\'image\']; ?> ne fonctionne jamais. Il affiche une balise image vide...

Sinon tout le reste marche (
$myimgs [$i] = '<a href=\"recherche.php?mot=$titre\" onmouseover=\"afficherImage();\" onmouseout=\"enleverImage();\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>';
a toujours marché, il affiche les images)

Voilà où j'en suis...
D'habitude quand je trouve pas de solution, je cherche une alternative, mais là c'est même pas possible étant donné que les images sont piégée dans un JS overflow hidden...

Posté : 19 juil. 2008, 02:52
par Sékiltoyai
Tu as toujours les mêmes problèmes de guillemet sur ce code :
$myimgs [$i] = '<a href=\"recherche.php?mot=$titre\" onmouseover=\"afficherImage();\" onmouseout=\"enleverImage();\"><img border=\"0\" height=\"80\" width=\"60\" src=\"'.$resultat['image'].'\"></a>';
Pour information, ce que tu aurais dû lire dans la doc, c'est que dans les chaînes simple-quotées seuls deux caractères doivent être échappés, le simple quote : ' (normal), et le caractère d'échappement : \ (normal aussi), et absolument aucun autre. Donc des doubles quotes n'ont absolument pas à être échappées dans ces chaînes.

Posté : 19 juil. 2008, 06:09
par jycs
Mais ce morceau de code marche, c'est le seul truc qui marche !! C'est le JS qui marche pas ! C'est $resultat[\'image\']; qui marche pas dans le JS !!

Edit : Tiens, j'ai encore passé toute la nuit à TOUT essayer !!! A chaque nouveauté je refait TOUUUTT !! Les . les " les ', partout, pour tout, j'ai essayé ça en infobulle, en ID, EN JS OU EN CSS !!! à coup de 10 ou 15 tests par minutes !!!! En mode infobulle, DIV distant, avec les fonctions de base ou des JS déjà programmés !!

Si c'est aussi facile, donne la réponse ! Depuis le début, j'essaye ce que tu écris et ça marche pas. Pour moi qui n'y connait rien ça marche pas, mais j'ai tout essayé. Alors c'est pas la peine de me sortir le coup des syntaxes, parce que j'ai l'impression que toi non plus t'en sait rien ><

Ce code est pourri, j'ai plus qu'à me tirer une balle, y'en a pas un pour m'aider. J'ai aucune solution et vous me jouez le coup des profs, comme si je pouvais comprendre en si peu de temps !! Je m'embrouille tellement que je comprends plus rien à rien !! Je demande de l'aide pour en finir avec ce code avant que mon site me dégoute définitivement ><, je peux pas lire des pages de tutoriel, j'ai pas le temps, et je peux pas résoudre mes problèmes de ""'\'"'\"\("\('"\'" parce que j'ai pas l'oeil pour ça... p*tin je suis dégouté, c'est quoi ce cauchemar, j'en ai vraiment trop marre.

Image

Posté : 19 juil. 2008, 11:10
par Sékiltoyai
Mais ce morceau de code marche, c'est le seul truc qui marche !! C'est le JS qui marche pas ! C'est $resultat[\'image\']; qui marche pas dans le JS !!
Non ce code ne fonctionne pas, parce qu'il ne donne pas un résultat correct au niveau de l'affichage. Ne me dit pas que ton image s'affiche très bien cela ne veut rien dire. Tu n'as pas une bonne méthode, auquel cas tu aurais depuis longtemps regardé le code source et remarqué que les antislashes y étaient toujours, et là tu aurais retiré les antishashes de ta chaîne en php (désolé, on ne peut pas être plus précis), et c'est le même problème un peu partout dans ton code… Je ne dis pas que ton js marchera ensuite (non n'avons pas ton code), je dis simplement que ton js ne peut pas marcher sans cela.

Donc petit rappel,
""" affichera "
"\'" affichera \'
'"' affichera "
'\'' affichera '
Alors c'est pas la peine de me sortir le coup des syntaxes, parce que j'ai l'impression que toi non plus t'en sait rien ><
N'essaye pas cela, cela n'incite pas à aider…

Toujours est-il que si tu n'arrives pas à enlever des antislashes dans une chaîne de caractères c'est très grave et il te manque manifestement les bases. On n'apprend pas un langage informatique en regardant des exemples et modifiant les scripts d'autres, on apprend en lisant des cours et des documentations…

Posté : 19 juil. 2008, 23:06
par Alf
bon deja un truc comme ça c'est te prendre la tête pour rien.
quand tu as des blocs HTML comme ça tu evite de les imprimer avec echo, tu ferme tes balises php et tu les met directe.

J'ai retouché vite fait la forme de ton exemple.
<?php
//tout ton code ici ...
$myimgs = afficherx();
//fermeture de la balise php
?>

<script type="text/javascript">
    function afficherImage()
    {
        document.getElementById("zoneImg").innerHTML = <img src="<?php echo $resultat['image']; ?>";
    }
    
    function enleverImage()
    {
        document.getElementById("zoneImg").innerHTML = '';
    }
</script>

<?php
//reouverture de la balise php
//la suite de ton code ....
?>
est plus propre que ça !
$myimgs = afficherx();

echo '<SCRIPT LANGUAGE="JavaScript">
    function afficherImage()
    {
        document.getElementById(\"zoneImg\").innerHTML = "<img src="<?php echo $resultat[\'image\']; ?>" />";
    }
    
    function enleverImage()
    {
        document.getElementById(\"zoneImg\").innerHTML = \'\';
    }
</script>';

?>
Assure toit d'avoir un editeur avec un hightlight de bonne facture un genre PSpad 4.5 au moins (j'utilise eclipse PDT) ça évite de faire des erreur lorsqu'il faut échapper des caractères.