2009-08-05 9 views
0

J'ai cette erreur dans mon code ..erreur en passant arugument par une fonction

echo "<input type='button' value='send mails' onclick=\"sendmails(".$sendQuestion.")\">"; 

je sens un peu stupide affichage à cette question. Mais je suis incapable de comprendre ce qui est faux dans ce code

Ce code est écrit en php. il fonctionne très bien est je ne passe aucun argument dans la fonction sendmails, mais quand je passe arugment donne erreur:

missing) after argument list 
    sendmails(Type your Question here testin to post from chrome) 

peut me dire ce que certains m je fais mal ici?

Meilleur Zeeshan

Répondre

2

Ajouter un devis autour:

echo "<input type='button' value='send mails' onclick=\"sendmails('".$sendQuestion."')\">"; 

sans les guillemets, javascript méprend votre chaîne.

2

Si vous jetez un coup d'oeil au code HTML généré, ça va ressembler à quelque chose comme ceci:

<input type='button' value='send mails' onclick="sendmails(Type your Question here testin to post from chrome)"> 

Il y a quelques citations manquantes arround la chaîne vous passez en paramètre à la fonction JS sendmails

Donc, je dirais ajouter quelques citations autour; un peu comme ceci:

echo "<input type='button' value='send mails' onclick=\"sendmails('".$sendQuestion."')\">"; 

EDIT: a ajouté plus de choses ...

Mais, si $sendQuestion contient des guillemets, il va vous obtenez une autre erreur ... Il pourrait donc être utile à

  • mauvaise idée: soit remplacer les ' avec \' avec quelque chose comme str_replace
  • ou « transformer » la chaîne en valid-JS l'un, avec, par exemple, json_encode

La deuxième solution vous obtiendrez un code PHP comme celui-ci (notez que json_encode ajoute des guillemets doubles ARROUND la chaîne ... il devient plus difficile à incorporer directement dans l'appel de fonction ... donc nous allons utiliser une variable):

$sendQuestion = "Type your Question' here testin to post from chrome"; 
$json = json_encode($sendQuestion); 

echo '<script type="text/javascript">' . "\n"; 
echo 'var myString = ' . $json . ';' . "\n"; 
echo '</script>' . "\n"; 
echo "<input type='button' value='send mails' onclick=\"sendmails(myString)\">"; 

Et le code HTML généré sera:

<script type="text/javascript"> 
var myString = "Type your Question' here testin to post from chrome"; 
</script> 
<input type='button' value='send mails' onclick="sendmails(myString)"> 

qui est beaucoup plus agréable :-)
Peut-être pas encore parfait ... Mais, maintenant, je pense que vous obtenez le point ;-)

En sidenote: json_encode existe seulement depuis PHP 5.2 ... alors vous pourriez voulez vérifier la version de PHP que vous utilisez ...

+1

+1 pour mentionner la possibilité de $ sendQuestion contenant des guillemets. C'est en fait un trou XSS potentiel. –

1

La première chose que vous faites mal est de poster du code PHP lorsque l'erreur est signalée par votre moteur JavaScript.

Pour le déboguer, le JavaScript est important. Nous pouvons deviner à quoi pourrait ressembler le JS, mais c'est beaucoup plus facile si nous pouvons voir le JS pour commencer.

Dans ce cas, l'explication la plus probable est que vous voulez écrire un JS contenant une chaîne littérale - mais vous n'entourez pas l'argument JS avec des guillemets.

0

Pensez à PHP comme un moteur de template. Essayez ceci:

?> 
<input 
    type="button" 
    value="Send mails" 
    onClick="sendmails('<?php echo $sendQuestion; ?>');"> 
<?php 
Questions connexes