Hallo,

Ik heb het werkend, maar ik zou het graag iets anders werkend hebben.

<?php
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(\''.$MenuItem['table_name'].'\', \''.($MenuItem['where_clause']).'\');"><span>View Data</span></a>';
?>

Dit resulteert in HTML:

'<a class="'.$classTag.'" href="javascript: OpenModalDialog('input_table', ' WHERE DATE_FORMAT(Datum, '%Y%m') = '201606'');"><span>View Data</span></a>';


Probleem zoals iedereen kan zien zit hem in het feit dat er quote's in de 2e parameter van de signatuur zitten: '%Y%m' en '201606'.

Ik dacht even met de oplossing gevonden te hebben met json_encode en/of htmlspecialchars, maar dit bood ook geen oplossing.
Op zich begrijp ik ook dat het op z'n minst lastig is of dat het misschien niet kan.

Maar anderzijds denk ik, ik ben vast niet de eerste die met dit problem zit en heb ik het idee dat het wel zou moeten kunnen werken.

Alvast bedankt,

Nico
Het lijkt mij sowieso al een slecht idee om een deel van je query in je HTML/JavaScript te stoppen.
Ok, waarom? Vanwege hack gevaar? Iemand met F12 even kijkt wat daar staat. Heb je gelijk in.

Maar even afgezien daarvan, blijft de vraag is dit mogelijk, wat ik vraag?

Edit:
De opmerking is terecht en ik weet een betere oplossing. Die ga ik ook door voeren. Echter, afgezien van dit, wil ik toch graag weten of dit op te lossen is.
Vanwege de quotes zou je toch moeten escapen.
En voordat je het in je query stopt als een WHERE-clause het escapen als het ware ongedaan maken.

Het verzenden van de WHERE-clause kan met $.ajax() van jQuery bijvoorbeeld, daar ga je de WHERE-clause als data meesturen naar een PHP script.
Helpt het niet om bij de betreffende quotes een ge-escapete backslash toe te voegen? Dus: \\\' (wat \' in je javascript geeft)
Wat zou die functionaliteit uberhaupt moeten implementeren? Specifieke vraagstukken kunnen loslaten op bepaalde tabellen / data? Dus een soort van rapportages? Of is dit meer bedoeld als een soort van (tijdelijk) filter van een lijst?

Het aanvoeren van rauwe SQL lijkt mij in ieder geval de verkeerde strategie.
Hallo,

Het verbaast me dat er nog door gegaan wordt op wat de bedoeling van die where clause is. Het heeft inderdaad met een rapportage naar Excel te maken.

Maar waar het mij om gaat, of de vraag is niet duidelijk, heb ik nog steeds geen antwoord op!

Los van of het nu een where clause is of niet, is dit mogelijk wat ik wil? Zo ja heeft iemand een voorbeeld/tutorial waar zoiets uitgelegd wordt?

PHP Maarten heeft het over Ajax icm. PHP. Mijn kennis reikt op dit moment niet zover dat ik weet hoe ik het kan oplossen hiermee.

Ik heb het voor nu niet meer nodig omdat ik het met de where clause anders heb opgelost, maar ik wil graag weten hoe ik zoiets kan oplossen mocht ik weer zoiets tegen komen.
Zoals Thomas al zei: Je moet geen rauwe SQL voeren aan je script. Dat is wat je nu dus doet.

Alleen in PHP wordt de query bepaald, en als je dit via een javascript event wilt doen, dan komt er nou eenmaal een AJAX-functionaliteit bij te pas. Die zorgt er voor dat a-synchroon bij het aanroepen van je event dat er een PHP-script geladen wordt. Je kan hier bijvoorbeeld een argument aan meegeven dat hij bepaalde data moet filteren, maar ook hier geldt dan: 'Geen rauwe SQL'. Gewoon een vaste waarde die in het script de juiste query aanstuurt. (inclusief escaping!).

Dus bijv. loaddata.php?date=201606

Over de werking van AJAX hoef ik niet veel uit te leggen, want er zijn genoeg tutorials die met vanilla JavaScript of met library's zoals jQuery uitleggen hoe je dit moet doen. Ikzelf werk met de laatste omdat deze handiger in gebruik is, en direct cross-browser is.
Hoi Ariën,

Het zal wel aan mij liggen maar als ik je goed begrijp en ik heb het volgende:
<?php
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(' Datum = '201606'');"><span>View Data</span></a>';
?>

Het gaat om het stukje: ' Datum = '201606'', moet ik op de één of andere manier oplossen met jQuery?

Ik hoop nu NIET dat mensen beginnen met waarom je dit zo zou willen doen!!! Of dan ook gelijk de oplossing geven.

Het gaat mij erom dat ik wil weten of dit mogelijk is, want ik zie nog niet direct hoe ik dit met jQuery moet oplossen omdat het nog PHP (server sided) is.
En als je dit moet escapen, hoe dan? ik heb het geprobeerd met \, htmlspecialchars, en nog 2 of 3 andere probeersels.

(Zoals Ariën het nu voorstelt met loaddata.php?date=201606, zo heb ik het inmiddels al lang opgelost!).

Nico
Jij doet nu dit:
javascript: OpenModalDialog(' Datum = '201606'');

Deze functie OpenModelDialog heeft een vaste volgorde aan argumenten die er geaccepteerd worden, en daar kan je niet zomaar van afwijken.
Nee, dat begrijp ik en ik begrijp niet hoe je er bij komt dat de volgorde van argumenten veranderd, ik zie geen komma staan. Maar kan ook aan mij liggen dat iets niet zie wat jij ziet.

Waar het mij nog steeds om gaat en dat wil graag weten of dit mogelijk is:
"kan ik met PHP JavaScript schrijven en daarbinnen expliciet aangegeven dat een deel daarvan string is met quotes?"

In mijn voorbeeld wordt een functie call gedaan met 1 argument.
Binnen dit argument wil ik aangeven dat het om een stukje string gaat met single quotes.
Aangezien ik voor de PHP echo ook al single qoute's gebruik, geeft dit natuurlijk een conflict!

Ik hoop niet een antwoord als dat wordt vanzelf gecast, hoef je geen single quotes om heen te zetten.
Ook niet iets in de trant van dat is niet logisch wat je daar doet en dan op het voorbeeld in gaan.

Nogmaals, ik wil graag weten als je al zoiets wilt hoe kun je dit oplossen? In welke richting moet ik dit gaan zoeken.

Als ik hier op google, zie ik dat meer mensen hier mee worstelen maar ik kan niet de oplossing vinden.

Mocht het 'dom' zijn wat ik hier vraag dan wil ik best accepteren maar leg het mij dan wel uit!

Reageren