Kun je met echo in een javascript -functie een PHP-variabele oproepen?
Ik wil een door de gebruiker opgegeven woord in een door hem opgegeven taal half-automatisch door 'Google Translate' naar een reeks van zeven andere talen laten vertalen.
Dus staan er op mijn pagina Zamenhofa.php zeven knoppen, met bv. voor de knop naar het Duits de HTML-code
<button type="button" onclick="vertaalWoordMetGT('de')">
Klik hier voor Duits.</button >,
voor Frans
<button type="button" onclick="vertaalWoord Met GT('fr')">
Klik hier voor Frans.</button >,
Ik moet dan http://translate.google.com openen met de parameters brontaal, doeltaal en woord, zodat er bij voorbeeld http://translate.google.com/#cs|fr|miláček komt te staan.
De waarden cs (brontaal) en miláček (bronwoord) komen dus van de gebruiker en zijn met de methode "POST" naar Zamenhofa.php opgestuurd.
Ik wil voor dat vertalen met de javascriptfunctie vertaalWoordMetGT(doeltaal) de variabele
url = "http://translate.google.com/#"++"|"+doeltaal+"|"+" gebruiken.
Helaas, er gebeurt niets als ik op de betreffende knop druk.
Dit probleem lijkt op mijn vorige probleem, maar toen kon de PHP-variabele maar twee bekende waarden hebben en kon ik met 'if else' en de PHP-functie 'print' het HTML-script genereren.
Nu kunnen brontaal en brontaal allerlei onbekende waarden aannemen, dus gaat dat niet met 'if else'.
Een paar vragen om mee te beginnen:
1 - geeft de gebruiker een woord op in een input veld?
2 - bij het klikken op de knop, wordt de pagina dan herladen?
en omdat ik denk dat het antwoord op 1 ja is en op 2 nee is...
3 - hoe moet dat door de user opgegeven woord in de $_POST array komen?
Antwoord 1: Ja, in een voorgaande pagina, die dat woord naar Zamenhofa.php gepost heeft. Ik gebruik ook een session, maar weet daar niet mee om te gaan.
Antwoord 2: Nee. Dat is dus hier niet relevant, omdat het woord uit een formulier op een vorige pagina komt.
Antwoord 3: De volledige code van de javascriptfunctie is:
<script type="text/javascript">
function tradukuVortonPerGT(allingvo)
{var url="http://translate.google.com/#"++"|"+allingvo+"|"+;
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
en het event zit in:
<button type="button" onclick="tradukuVortonPerGT('de')">
Klaku ĉi-tie por la germana.</button >
Even zodat ik het begrijp:
1. De gebruiker geeft een woord op in een formulier en klikt op een knop.
2. Daarmee wordt er een pagina geladen via een php script waarin dus dat woord al meegegeven is
3. In de output pagina van dat php script kan de gebruiker op een knop klikken om de vertaling te zien, maar geeft dus GEEN nieuw woord op
Klopt dit allemaal? In dat geval kan je namelijk wel het woord uit de $_POST array halen, alleen waarschijnlijk iets anders dan je denkt.
Volgens mij heb je het goed begrepen.
Hoe dan, Erwin of iemand anders?
Maar het antwoord is dat als het woord al bestaat als je de html pagina genereert door php, je de php variabelen wel kan echoen in je javascript. Je moet er dan alleen op letten dat het wel correcte javascript wordt en dat de variabelen dan als strings in je javascript komen. Als ik je voorbeeld gewoon even pak zou je het als volgt kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<script type="text/javascript">
function tradukuVortonPerGT(allingvo)
{
var url="http://translate.google.com/#<?php echo $_POST['fontLingvo'] ?>|"+allingvo+"|<?php echo $_POST['fontVorto'] ?>";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
function tradukuVortonPerGT(allingvo)
{
var url="http://translate.google.com/#<?php echo $_POST['fontLingvo'] ?>|"+allingvo+"|<?php echo $_POST['fontVorto'] ?>";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
Stel nu dat de twee variabelen zijn "test1" en "test2" dan kom de javascript code die in je HTML terecht komt er als volgt uit te zien:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<script type="text/javascript">
function tradukuVortonPerGT(allingvo)
{
var url="http://translate.google.com/#test1|"+allingvo+"|test2";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
function tradukuVortonPerGT(allingvo)
{
var url="http://translate.google.com/#test1|"+allingvo+"|test2";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
Wat je dus feitelijk doet is de variabelen in je php script al invullen in je javascript, zodat tijdens de executie van javascript dat niet meer nodig is. Let wel goed op de quotes (alleen nodig daar waar de string onderbroken wordt) en zorg ervoor dat de hele url op een regel terechtkomt. Dus GEEN enters in je php script anders kan javascript er niet meer overweg. Dat kan alleen als je er een + hebt staan, maar ik raad aan het helemaal niet te doen.
Volgens mij heb ik alles nauwkeurig uitgevoerd, wat je zei. Maat het werkt niet.
De alert met de url geeft alleen http://translate.google.com/#|de|", dus de variabelen in het PHP-script komen niet over. Ze zijn wel goed gepost.
Omdat ik ook steeds vóór de html-tags in php-script een session startte en die volgens mij nu geen enkele functie meer heeft, heb ik die code weggehaald. Het maakt geen verschil.
Tenslotte ter informatie: De javascriptfunctie wordt aangeroepen in een button met
onclick="tradukuVortonPerGT('de')" (feitelijk zeven verschillende buttons, voor zeven verschillende talen). Moet dat misschien
onclick="type/javascript: tradukuVortonPerGT('de')" zijn?
De alert staat binnen de functie dus die wordt wel uitgevoerd. Post even het stukje code wat je nu hebt, misschien zie je iets over het hoofd.
Johan Derks op 23/12/2011 15:25:37:
dus de variabelen in het PHP-script komen niet over. Ze zijn wel goed gepost.
Als je deze helemaal aan het begin van je php script eens echo'ed, krijg je ze dan wel te zien? Of anders, zet aan het begin van je script eens:
print_r($_POST);
Dit zou je hele POST array moeten printen waardoor je kan controleren of alles er goed in staat.
Voor Gert, ik heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php /* Created on: 17-12-2011 */
ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
define('TITLE','Register');
session_start();
if (isset($_POST["fontVorto"]))
{$_SESSION["fontVorto"]=$_POST["fontVorto"];};
if (isset($_POST["fontLingvo"]))
{$_SESSION["fontLingvo"]=$_POST["fontLingvo"];};
if (isset($_POST["portugalaItala"]))
{$_SESSION["portugalaItala"]==$_POST["portugalaItala"];};
?>
ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
define('TITLE','Register');
session_start();
if (isset($_POST["fontVorto"]))
{$_SESSION["fontVorto"]=$_POST["fontVorto"];};
if (isset($_POST["fontLingvo"]))
{$_SESSION["fontLingvo"]=$_POST["fontLingvo"];};
if (isset($_POST["portugalaItala"]))
{$_SESSION["portugalaItala"]==$_POST["portugalaItala"];};
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- Created on: 13-12-2011 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/>
<title>Tiel Zamenhof verŝajne difinus 'fremdan vorton', se li estintus statistikisto.</title>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<meta name="author" content="Unregistered User"/>
<meta name="generator" content="AceHTML Freeware"/>
<style type="text/css">
h4 {text-align: center; color: #FFFFCC; font-family: book antiqua; background: silver}
button {text-align: right; background: #FFFFCC; width: 250px}
select {font-size: 15px}
</style>
<script type="text/javascript">
function tradukuVortonPerGT(allingvo)
{var url="http://translate.google.com/#|"+allingvo+"|";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
</head>
<body onload="kashu()">
<h4>Interaktive kun Gugl Translejt</h4>
<form name="lingvojZamenhofaj" method="post">
<table align="center">
<tr>
<td><button type="button" onclick="tradukuVortonPerGT('de')">
Klaku ĉi-tie por la germana.</button ></td>
<td>Ekzistas traduko kiu<input type="radio" name="de" value="jes">jes </input>
<input type="radio" name="de" value="ne" checked="checked">ne </input>similas.</td>
</tr>
<tr>
Enzovoorts (andere talen)
</tr>
</table>
</body>
</html>
Toevoeging op 23/12/2011 16:47:53:
en het javascript was geworden, op Erwins advies:
<script type="text/javascript">
function tradukuVortonPerGT(allingvo)
{var url="http://translate.google.com/#|"+allingvo+"|";
alert(url);
window.open(url,"alGugla", "toolbar=0, location=0, directories=0, menuBar=0, scrollbars=1, resizable=1, width=520, height=680, left=520, top=0")
}
</script>
Bekijk de broncode die in je browser staat eens.
Als je dit even aan het begin zet (alleen voor test) krijg je je hele POST array op je scherm. Hiermee kan je controleren of de juiste waarde wel in je POST array zijn gekomen. Zoniet, dan kunnen we daar dus de fout zoeken.
Ik zie ook dar je in de onload van de body een functie aanroept dei verder nergens gedefinieerd is, roep je ook nog een extern script aan?
Nu even terug naar Erwin, die samenvattend vroeg of het volgende juist is:
1. De gebruiker geeft een woord op in een formulier en klikt op een knop.
2. Daarmee wordt er een pagina geladen via een php script waarin dus dat woord al meegegeven is.
3. In de output pagina van dat php script kan de gebruiker op een knop klikken om de vertaling te zien, maar geeft dus GEEN nieuw woord op.
Mijn antwoord was niet goed. De pagina van 2. heet metodElektilo.php (methodekiezer), die stuurt het van 1. (fontVortRegistrado.html) ontvangen woord alleen maar door naar 3. (Zamenhofa.php) en dáár klik op een knop om een vertaling te zien.
Mijn eerste opzet was: metodElektilo vangt het van fontVortRegistrado ontvangen woord op in een formulier met verborgen variabelen en zendt de gegevens van dat formulier door naar Zamenhofa. Dat wordt ingewikkeld met een php-script dat een formulier met verborgen variabelen genereert.
Mijn tweede opzet was: start een sessie, maar daarvoor vind ik onvoldoende uitleg op internet en in het boek van Larry Ullman.
Mijn derde opzet is: heel beleefd zijn en het jullie vragen!
De enige vraag die ik heb is hoe precies de overgang van pagina 2 naar 3 gaat (metodElektilo naar Zamenhofa). Dat zijn beide php pagina's neem ik aan, maar moet de gebruiker op een knop klikken of zo?
<form name="alZamenhofaj" action="Zamenhofa.php" target="ZamenhofaKadro.html" method="post">
<p><button type="submit" style="width: 400px">Trasendu min al elektopaĝo pri 7 gravaj eŭropaj lingvoj.</button></p>.
Wel zit deze voorgeprogrammeerd in het php-script:
Het woord dat is opgegeven op pagina 1 (fontVortRegistrado.html) wordt naar pagina 2 (metodElektilo.php) gestuurd. Daar wordt bovenstaande code dus gegenereerd, waarbij pagina 3 (Zamenhofa.php) wordt geladen als de gebruiker op de knop klikt.
Alleen, in het form staan geen hidden inputs met de waardes van die woorden. Wat je dus eigenlijk wil op pagina 2 is dat het volgende form wordt gebouwd:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if ($_POST["portugalaItala"]!=-1)
{print'
<form name="alZamenhofaj" action="Zamenhofa.php" target="ZamenhofaKadro.html" method="post">
<input type="hidden" name="fontLingvo" value="'.$_POST['fontLingvo'].'" />
<input type="hidden" name="fontVorto" value="'.$_POST['fontVorto'].'" />
<p><button type="submit" style="width: 400px">Trasendu min al elektopaĝo pri 7 gravaj eŭropaj lingvoj.</button></p></form>';
}
?>
if ($_POST["portugalaItala"]!=-1)
{print'
<form name="alZamenhofaj" action="Zamenhofa.php" target="ZamenhofaKadro.html" method="post">
<input type="hidden" name="fontLingvo" value="'.$_POST['fontLingvo'].'" />
<input type="hidden" name="fontVorto" value="'.$_POST['fontVorto'].'" />
<p><button type="submit" style="width: 400px">Trasendu min al elektopaĝo pri 7 gravaj eŭropaj lingvoj.</button></p></form>';
}
?>
Hiermee worden de variabelen dan in het form gezet op pagina 2 vanuit de POST array. Als de gebruiker nu op de knop klikt, komen die waardes automatisch ook weer in de POST array op pagina 3 terecht en daar kan je ze dan in het javascript zetten zoals ik eerder al aangaf.
Hartelijkst dank voor de geboden adviezen.
Johan Derks