Is het mogelijk om met PHP javascript te schrijven waarbij in de variabele quote's moeten worden geb
Ik heb het werkend, maar ik zou het graag iets anders werkend hebben.
Code (php)
1
2
3
2
3
<?php
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(\''.$MenuItem['table_name'].'\', \''.($MenuItem['where_clause']).'\');"><span>View Data</span></a>';
?>
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(\''.$MenuItem['table_name'].'\', \''.($MenuItem['where_clause']).'\');"><span>View Data</span></a>';
?>
Dit resulteert in HTML:
Code (php)
1
'<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
Gewijzigd op 22/06/2017 16:23:34 door Nkamp Kamp van de
Het lijkt mij sowieso al een slecht idee om een deel van je query in je HTML/JavaScript te stoppen.
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.
Gewijzigd op 22/06/2017 17:07:46 door nkamp Kamp van de
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)
Het aanvoeren van rauwe SQL lijkt mij in ieder geval de verkeerde strategie.
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.
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.
Gewijzigd op 02/07/2017 23:20:59 door - Ariën -
Het zal wel aan mij liggen maar als ik je goed begrijp en ik heb het volgende:
Code (php)
1
2
3
2
3
<?php
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(' Datum = '201606'');"><span>View Data</span></a>';
?>
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
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.
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!
Nkamp Kamp van de op 07/07/2017 17:37:31:
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?"
"kan ik met PHP JavaScript schrijven en daarbinnen expliciet aangegeven dat een deel daarvan string is met quotes?"
Lees mijn bericht van 23 juni nog eens?
Ik ben vorige week terug gekomen van vakantie. Nu zojuist dit nog even uitgeprobeerd, ik neem aan dat je dit bedoeld. Dit is syntactisch al fout:
Code (php)
1
2
3
2
3
<?php
echo '<a class="'.$classTag.'" href="javascript: Test('Datum = \\\'201606\\\'');"><span>View Data</span></a>';
?>
echo '<a class="'.$classTag.'" href="javascript: Test('Datum = \\\'201606\\\'');"><span>View Data</span></a>';
?>
Of bedoelde je dit niet?
Ik heb nog wel wat combi's geprobeerd. Een daarvan was voor iedere single quote van de parameter, een 3 voudige slash zetten. Dan klopt het 'syntactisch' (compiler geeft geen fout) maar als ik dan op de link klik krijg ik in de console de melding 'ongeldig teken'.
KORTOM ik trek op dit moment de conclussie dat het (simpel) NIET mogelijk is!!
En misschien, als ik er eens goed over na denk, komt dit ook nooit voor! Wat ik oorspronkelijk van plan was moet je gewoon anders oplossen.
Mocht iemand het toch weten dat dit moet kunnen, dan zou ik graag de oplossing willen zien.
Bedankt,
Nico
Code (php)
1
2
3
2
3
<?php
echo '<a class="'.$classTag.'" href="javascript: Test(\'Datum = \\\'201606\\\'\');"><span>View Data</span></a>';
?>
echo '<a class="'.$classTag.'" href="javascript: Test(\'Datum = \\\'201606\\\'\');"><span>View Data</span></a>';
?>
Dat het onhandig, onverstandig en meer woorden met on is staat buiten kijf.
Gewijzigd op 24/07/2017 11:29:49 door Ben van Velzen
Zoals al eerder aangehaald, je moet het idee van lappen SQL aanleveren laten varen. Waar het om gaat is specifieke informatie, in dit geval een jaar+maand? Dat is de informatie die je enkel door hoeft te geven en dat stukje informatie stop je -na uitvoerige controle op het correct formaat van de invoer- ge-escaped en wel in een volledig SQL-statement.
Vergelijk dit met een functie(aanroep): door middel van parameters lever je de missende informatie. Je hoeft enkel de vakjes in te vullen, meer informatie is niet nodig.
Gewijzigd op 24/07/2017 12:42:02 door Thomas van den Heuvel