login  Naam:   Wachtwoord: 
Registreer je!
 Forum

jQuery Ajax geeft string niet door (mysql query) (Opgelost)

Offline GroundZero - 08/06/2015 16:21
Avatar van GroundZeroLid Ik wou een (erg grote en complexe, vandaar deze manier) mysql query doorgeven via jquery ajax. Echter ziet hij de hele query niet.

  1. $(document).ready(function(){
  2. var query = '<?=$command?>';
  3.  
  4. $.ajax({
  5. url : "/ajax/searchResults.php",
  6. type : "POST",
  7. datatype : "html",
  8. data : {
  9. query : query
  10. },
  11. success : function(html){
  12. $('#new_results_list').html(html);
  13. }
  14. });
  15. });


Hij krijgt een lege POST terug. Vul ik er gewoon een woord in "TEST" bijvoorbeeld dan werkt het wel prima. Nu weet ik dat alles op één regel moet en niet op meerdere regels. Als het goed is, zit de query ook zo in elkaar.

Iemand die mij kan vertellen hoe ik dit kan oplossen? om nu voor elk ding een data mee te sturen zie ik namelijk niet erg zitten aangezien het voor een zeer uitgebreide zoekmachine binnen onze website is die vrij complex is.

4 antwoorden

Gesponsorde links
Offline Thomas - 08/06/2015 19:54
Avatar van Thomas Moderator Ben je enigszins vertrouwd met hoe je JavaScript/jQuery moet debuggen? Maak je gebruik van je (developer) console (meestal onder de F12) toets?

Heb je gekeken naar je broncode? Treden er foutmeldingen op in de JavaScript? Je huidige opzet ziet er ook vrij statisch uit, hoe wordt de waarde van $command bepaald? Als je deze waarde wilt wijzigen komt hier een page-refresh aan te pas? Dat doet dan toch een beetje een opzet met een AJAX-call teniet? Escape je single quotes (bijvoorbeeld met addslashes) anders klopt je JavaScript niet? Hoe ziet je query er uit?

En dan aan de "verwerkende kant" geeft searchResults.php ook een indicatie terug of de query geldig was / dump je de query ergens naartoe zodat je kunt zien hoe de uiteindelijke query die je probeert uit te voeren luidt?

Ik denk dat je voornaamste probleem op dit moment het inzichtelijk maken van wat er aan de hand is correct? Dit bereik je door je browsertools te benutten en e.e.a. naar je scherm (of log, of wat dan ook) te dumpen zodat je de informatie die je nodig hebt beschikbaar maakt.
Offline GroundZero - 09/06/2015 08:49 (laatste wijziging 09/06/2015 09:03)
Avatar van GroundZero Lid Ik ga het eens proberen! De query is erg complex en groot. Hij word in PHP opgebouwd en ik wou hem dan doorgeven onpageload door ajax. Wanneer er dan binnen ajax (de verwerkende kant) iets gedaan word, dan word er een nieuwe ajax call gedaan en de nieuwe query mee gegeven, zonder pagina verversing dus.

Enigste probleem is dat de query, wanneer op meerdere lijnen door de lengte, niet gezien word door de post. Hoe dit precies te zien geen idee ik ga het eens proberen, ik heb wel Firebug uiteraard 


  1. $(document).ready(FUNCTION(){
  2. var query = "SELECT p.ProductNumber, p.assign_breda, p.lock_breda, ((p.nQtyAvailable + p.AvailableFromSupplier + nQtyAvailable_breda + p.nQtyAvailable_shop)> 0) as inVoorraad, pd.product_id,
  3. p.id, p.ProductType,p.ProductNumber, p.newcollection , p.ItemName, p.ItemNameSub, p.BrandID,
  4. p.nQtyAvailable,p.AvailableFromSupplier,p.nQtyAvailable_shop,p.nQtyAvailable_breda, p.Diameter,
  5. p.SpecialOfferMIT,p.SpecialOfferPrice, p.InternetPrice,p.HighVAT, p.show_mm ,p.Diameter, p.for_men, p.for_women, p.for_girls, p.for_boys, p.BandSize, (IF(p.SpecialOfferMIT = '1', p.SpecialOfferPrice, p.InternetPrice) + (IF(p.SpecialOfferMIT = '1', p.SpecialOfferPrice, p.InternetPrice) * IF(p.HighVAT = '1', 0.210, 0.060))) AS price_final
  6. FROM Products AS p
  7. INNER JOIN products_domains AS pd
  8. ON
  9. p.id = pd.product_id
  10. LEFT JOIN NewCollection nc
  11. on nc.id = p.newcollection
  12. LEFT JOIN brandpage_product_sort bps
  13. on bps.pid = p.id
  14. WHERE
  15. pd.domain_id = "51"
  16. AND (ProductNumber LIKE "%a%"
  17. OR ItemName LIKE "%a%"
  18. OR ItemNameSub LIKE "%a%"
  19. OR MetaTitle LIKE "%a%"
  20. OR MetaDescription LIKE "%a%"
  21. OR MetaKeywords LIKE "%a%"
  22. OR EAN LIKE "%a%")
  23. ORDER BY InternetPrice DESC
  24. LIMIT 0, 50";
  25. $.ajax({
  26. url : "/ajax/searchResults.php",
  27. type : "POST",
  28. DATA : {
  29. query : query
  30. },
  31. success : FUNCTION(html){
  32. $('#new_results_list').html(html);
  33. }
  34. });
  35. });


Bovenstaand trouwens de code die gegenereerd word. Die var query wil ik dus mee sturen maar dat werkt niet Is overigens de meest basis code hoor, de rest zijn drie tot zeven keer zo groot haha
Offline Thomas - 09/06/2015 20:32 (laatste wijziging 09/06/2015 20:34)
Avatar van Thomas Moderator Ik heb nog even na zitten denken over deze constructie, want er zat mij iets dwars. Nu weet ik wat dit was: deze opzet is heel erg onveilig, je hebt namelijk geen enkele controle (of liever gezegd, garanties) over de uiteindelijke vorm van de query die wordt uitgevoerd.

Het lijkt mij beter om enkel de parameters mee te geven via de AJAX-call als de query een (semi-)vaste opbouw heeft en/of deze on-the-fly samenstellen. Dit zal echt niet zo'n enorme performance-deuk geven, lijkt mij. Je zou dan de query ook kunnen cachen via een sessie of zelfs opslaan als een sjabloon of als een soort van zoekopdracht. Dit alles zorgt er dan voor dat de "controle" over de uiteindelijke vorm van de query echt aan jouw kant ligt.

Zelfs als de user waarmee je een connectie maakt alleen maar kan lezen uit de database (en dus niets kan wijzigen of verwijderen door SQL manipulatie) kan deze nog steeds gevoelige informatie uitlezen die niet bedoeld was voor de kijkers thuis.

Ik zou je strategie herzien als ik jou was.
Offline valles10 - 30/06/2015 10:43 (laatste wijziging 30/06/2015 10:44)
Avatar van valles10 HTML interesse
FangorN schreef:
Ik heb nog even na zitten denken over deze constructie, want er zat mij iets dwars. Nu weet ik wat dit was: deze opzet is heel erg onveilig, je hebt namelijk geen enkele controle (of liever gezegd, garanties) over de uiteindelijke vorm van de query die wordt uitgevoerd.

hehe
  1. DROP TABLE Products
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.2s