Is het mogelijk om met PHP javascript te schrijven waarbij in de variabele quote's moeten worden geb

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nkamp Kamp van de

nkamp Kamp van de

22/06/2017 16:21:42
Quote Anchor link
Hallo,

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<a class="'.$classTag.'" href="javascript: OpenModalDialog(\''.$MenuItem['table_name'].'\', \''.($MenuItem['where_clause']).'\');"><span>View Data</span></a>';
?>


Dit resulteert in HTML:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

29/04/2024 12:01:53
 
Marthijn Buijs

Marthijn Buijs

22/06/2017 16:33:51
Quote Anchor link
Het lijkt mij sowieso al een slecht idee om een deel van je query in je HTML/JavaScript te stoppen.
 
Nkamp Kamp van de

nkamp Kamp van de

22/06/2017 16:46:16
Quote Anchor link
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.
Gewijzigd op 22/06/2017 17:07:46 door nkamp Kamp van de
 
Marthijn Buijs

Marthijn Buijs

22/06/2017 17:12:07
Quote Anchor link
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.
 
Willem vp

Willem vp

23/06/2017 09:40:58
Quote Anchor link
Helpt het niet om bij de betreffende quotes een ge-escapete backslash toe te voegen? Dus: \\\' (wat \' in je javascript geeft)
 
Thomas van den Heuvel

Thomas van den Heuvel

23/06/2017 14:36:56
Quote Anchor link
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.
 
Nkamp Kamp van de

nkamp Kamp van de

02/07/2017 22:53:58
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

02/07/2017 23:17:11
Quote Anchor link
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.
Gewijzigd op 02/07/2017 23:20:59 door - Ariën -
 
Nkamp Kamp van de

nkamp Kamp van de

05/07/2017 12:04:43
Quote Anchor link
Hoi Ariën,

Het zal wel aan mij liggen maar als ik je goed begrijp en ik heb het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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
 
- Ariën  -
Beheerder

- Ariën -

05/07/2017 12:14:01
Quote Anchor link
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.
 
Nkamp Kamp van de

nkamp Kamp van de

07/07/2017 17:37:31
Quote Anchor link
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!
 
Willem vp

Willem vp

08/07/2017 00:08:48
Quote Anchor link
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?"

Lees mijn bericht van 23 juni nog eens?
 
Nkamp Kamp van de

nkamp Kamp van de

24/07/2017 11:18:19
Quote Anchor link
Hallo Willem,

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
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
 
Ben van Velzen

Ben van Velzen

24/07/2017 11:29:17
Quote Anchor link
Uiteraard zou het kunnen. Zoiets:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
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
 
Thomas van den Heuvel

Thomas van den Heuvel

24/07/2017 12:41:01
Quote Anchor link
Waarom zou je statische HTML/JavaScript echo'en, dat is helemaal niet nodig.

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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.