[opgelost] Ingewikkeld probleem met vars (?) ...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Justin Groot

Justin Groot

01/03/2011 16:37:49
Quote Anchor link
Hallo,

Ik zit met een erg ingewikkeld probleem, waarvan ik hoop dat ik het juist kan uitleggen. Weet ook niet zeker of mijn vraag hier in het juiste forumdeel geplaatst is, maar het leek mij even de beste keuze.

Het gaat om een website waarbij ik gebruik maak van Google Maps kaarten (api) waarop evenementen aangegeven zijn. Er is ook een zoekfunctie, waarbij men kan zoeken op plaatsnaam. De resultaten worden nu enkel weergegeven in een tekstversie, niet op de google maps kaarten. Daar zit namelijk het probleem.

Als men een zoekterm invuld gaat dat via onderstaande form:
Quote:
<FORM METHOD="POST" ACTION="index.php?pagina=search" NAME="searchform">
<input class="zoekbalk" type="text" name="zoekterm" value="Zoek op plaatsnaam.." onFocus="if(this.value=='Zoek op plaatsnaam..') this.value='';" onBlur="if(this.value=='') this.value='Zoek op plaatsnaam..';"></FORM>


Voor het ophalen van de query in de tekst versie gebruik ik onderstaande:

Quote:
SELECT * FROM overzicht WHERE plaats LIKE '%".preg_replace("/[^a-zA-Z0-9\s]-/", "", $HTTP_POST_VARS['zoekterm'])."%' ORDER BY datum_begin


Deze werkt prima. Bij de Google Maps kaarten kan ik helaas niet zomaar de vars 'zoekterm' ophalen.
De Google Api haalt namelijk de info uit een query die niet op dezelfde pagina staat..

Quote:
GDownloadUrl("phpsqlajax_search.php", function(data) {
etc. etc.


De code van de hierboven genoemde pagina is als volgt:

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
header("cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
require("phpsqlajax_dbinfo.php");

function
parseToXML($htmlStr)
{

$xmlStr=str_replace('<','&lt;',$htmlStr);
$xmlStr=str_replace('>','&gt;',$xmlStr);
$xmlStr=str_replace('"','&quot;',$xmlStr);
$xmlStr=str_replace("'",'&#39;',$xmlStr);
$xmlStr=str_replace("&",'&amp;',$xmlStr);
return $xmlStr;
}


// Opens a connection to a MySQL server
$connection=mysql_connect ($localhost, $username, $password);
if (!$connection) {
  die('Not connected : ' . mysql_error());
}


// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die ('Can\'t use db : ' . mysql_error());
}


// Select all the rows in the markers table
$query = "SELECT * FROM overzicht WHERE plaats LIKE '%" $zoekterm "%' ORDER BY datum_begin";
$result = mysql_query($query);
if (!$result) {  
  die('Invalid query: ' . mysql_error());
}


header("Content-type: text/xml");

// Start XML file, echo parent node
echo '<markers>';

// Iterate through the rows, printing XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  // ADD TO XML DOCUMENT NODE
  echo '<marker ';
  echo 'plaats="' . parseToXML($row['plaats']) . '" ';
  echo 'locatie="' . parseToXML($row['locatie']) . '" ';
  echo 'gelegenheid="' . parseToXML($row['gelegenheid']) . '" ';
  echo 'datum_begin="' . parseToXML($row['datum_begin']) . '" ';
  echo 'datum_eind="' . parseToXML($row['datum_eind']) . '" ';
  echo 'website="' . parseToXML($row['website']) . '" ';
  echo 'Info="' . parseToXML($row['Info']) . '" ';
  echo 'lat="' . $row['lat'] . '" ';
  echo 'lng="' . $row['lng'] . '" ';
  echo 'type="' . $row['type'] . '" ';
  echo 'id="' . $row['id'] . '" ';
  echo '/>';
}


// End XML file
echo '</markers>';

mysql_close($connection);
?>


de $zoekterm kent ie uiteraard niet. Ik heb werkelijk geen idee hoe ik de door de bezoeker ingevulde zoekterm naar deze query kan brengen. Ik hoop dat iemand mij naar het juiste pad toe kan helpen, zou ik erg blij mee zijn na heel wat gepruts!

Alvast bedankt aan een ieder die moeite heeft gestoken in het lezen van bovenstaande.
Gewijzigd op 01/03/2011 23:55:44 door Justin Groot
 
PHP hulp

PHP hulp

15/05/2024 01:20:02
 

01/03/2011 16:41:09
Quote Anchor link
Justin Groot op 01/03/2011 16:37:49:
(...)
Quote:
SELECT * FROMT overzicht WHERE plaats LIKE '%".preg_replace("/[^a-zA-Z0-9\s]-/", "", $HTTP_POST_VARS['zoekterm'])."%' ORDER BY datum_begin
(...)


Er zijn hier al een aantal dingen mis. Het is beter om te selecteren wat je wilt hebben dan * gebruiken. Je moet FROM doen, niet FROMT. Waar dient die preg_replace voor? Volgens mij wil je gewoon mysql_real_escape_string gebruiken. En $HTTP_POST_VARS is verouderd.
 
Justin Groot

Justin Groot

01/03/2011 16:44:54
Quote Anchor link
Ik heb die query ook verkort zodat het wat makkelijker leesbaar is voor jullie :) In de query die ik gebruik heb ik geen "*" gebruikt. Wilde het probleem wat duidelijker schetsen.

de FROM had ik al verbeterd, typfoutje.

Wat betreft je laatste opmerking, dank voor de tip. Ben wat dat betreft nog steeds een beginner, leer alles uit eigen 'ervaring'. Lezen en doen. Ik ga ernaar kijken :)

Toevoeging op 01/03/2011 22:22:20:

Karl Karl op 01/03/2011 16:41:09:
Volgens mij wil je gewoon mysql_real_escape_string gebruiken. En $HTTP_POST_VARS is verouderd.


Heb nu de query aangepast, dank voor de tip.

Quote:
LIKE '%" . mysql_real_escape_string($_POST['zoekterm']) . "%'"


Verder iemand een idee hoe ik het probleem waarvoor ik dit topic heb geplaatst, kan oplossen? Zou het aanmaken van een session een oplossing kunnen zijn?



Toevoeging op 01/03/2011 23:55:15:

Beste forummers,

Na een lange avond spelen, zoeken, proberen, verzinnen, ergeren, muis rondgooien, en toch nog maar eens zoeken en proberen, ben ik er eindelijk uitgekomen.

Om eerlijk te zijn had ik de code in het 1e bericht niet volledig genoeg geplaatst (bedenk ik achteraf). Een deel van de Google Maps code is namelijk Javascript. Hier ging ik zelf ook de mist in. Nu heb ik alles werkend gekregen.

Case closed :)
 



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.