[opgelost] Ingewikkeld probleem met vars (?) ...
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>
<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.
etc. etc.
De code van de hierboven genoemde pagina is als volgt:
Quote:
Code (php)
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
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('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$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);
?>
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('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$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
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.
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 :)