Select box Zoekfunctie
Ik ben bezig met klein systeempje waar je aan de achterkant clubs kunt invoeren, bewerken en verwijderen. Dit werkt allemaal prima.
aan elke club wordt een ID, naam en land gegeven.
Nu wil ik aan de voorkant een soort zoekfunctie bouwen, waar je op land kan zoeken door middel van een Select box.
Het liefste zou ik willen dat alleen de landen worden weergegeven die gekoppeld zijn met een club, omdat het anders nutteloos is om te zoeken op een land waar geen club is. het zijn in totaal 240+- landen, dat zou anders een super lange lijst worden.
Ik heb nu in de database:
- Clubs
-- clubID
-- clubnaam
-- landID
- Landen
-- landID
-- landnaam
Er moet dus een Select box komen met een submit button, als er een post is moet de geposte waarde dus aan een query of iets dergelijks worden meegegeven. zodat de gegevens die voldoen aan de geposte waarde worden weergegeven. Dit heb ik geprobeerd maar ik kreeg alleen maar errors of geen content terug.
Weet iemand misschien hoe ik dit zou kunnen oplossen?
Alvast bedankt!
Groetjes Mark
En wat heb je momenteel?
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
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
if(is_array($_POST['land'])){
$clubb = $_POST['land'];
}
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID = '.$clubb.'';
$result = mysql_query($query) or die(mysql_error());
$htmlrows = array();
$aantalrecords = mysql_num_rows($result);
for($nummer=1; $nummer<=$aantalrecords; $nummer++){
$record = mysql_fetch_assoc($result);
$htmlrows[] = '<tr><td><a href="index.php?action=show&id='.$record['clubID'].'">'.$record['clubnaam'].'</a></td>
<td><a href="'.$record['clubwebsite'].'" target="_blank">Website</a></td>
<td>'.$record['landnaam'].'</td></tr>';
}
$queryy = 'SELECT * FROM landen';
$resultt = mysql_query($queryy) or die(mysql_error());
$aantalrecordss = mysql_num_rows($resultt);
$genre = array();
for($nummer=1; $nummer<=$aantalrecordss; $nummer++){
$recordd = mysql_fetch_assoc($resultt);
$genre[] = '
<option name="land" value="'.$recordd['landID'].'">'.$recordd['landnaam'].'</option> <br />
';
}
$content = '<form id="frm1" name="frm1" method="post" action="'.$_SERVER['REQUEST_URI'].'">
<table>
<tr>
<td><span>Choose a Genre:</span><br />
<select name="land">
'.implode('', $genre).'
</select>
<td/>
</tr>
</table>
<input type="submit" value="Search">
</form>';
if(isset($_POST['land'])){
$content .= '<br /><table class="toponiemen"> <tr>
<td><b>Club Name</b></td>
<td><b>Website</b></td>
<td><b>Country</b></td>
</tr>'.implode('', $htmlrows).'</table>';
}
$clubb = $_POST['land'];
}
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID = '.$clubb.'';
$result = mysql_query($query) or die(mysql_error());
$htmlrows = array();
$aantalrecords = mysql_num_rows($result);
for($nummer=1; $nummer<=$aantalrecords; $nummer++){
$record = mysql_fetch_assoc($result);
$htmlrows[] = '<tr><td><a href="index.php?action=show&id='.$record['clubID'].'">'.$record['clubnaam'].'</a></td>
<td><a href="'.$record['clubwebsite'].'" target="_blank">Website</a></td>
<td>'.$record['landnaam'].'</td></tr>';
}
$queryy = 'SELECT * FROM landen';
$resultt = mysql_query($queryy) or die(mysql_error());
$aantalrecordss = mysql_num_rows($resultt);
$genre = array();
for($nummer=1; $nummer<=$aantalrecordss; $nummer++){
$recordd = mysql_fetch_assoc($resultt);
$genre[] = '
<option name="land" value="'.$recordd['landID'].'">'.$recordd['landnaam'].'</option> <br />
';
}
$content = '<form id="frm1" name="frm1" method="post" action="'.$_SERVER['REQUEST_URI'].'">
<table>
<tr>
<td><span>Choose a Genre:</span><br />
<select name="land">
'.implode('', $genre).'
</select>
<td/>
</tr>
</table>
<input type="submit" value="Search">
</form>';
if(isset($_POST['land'])){
$content .= '<br /><table class="toponiemen"> <tr>
<td><b>Club Name</b></td>
<td><b>Website</b></td>
<td><b>Country</b></td>
</tr>'.implode('', $htmlrows).'</table>';
}
Toevoeging op 19/12/2011 16:16:37:
Volgens mij is het enige probleem dat mijn query verkeerd is opgebouwd.
Code (php)
1
2
3
4
5
2
3
4
5
if(is_array($_POST['land'])){
$clubb = $_POST['land'];
}
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID = '.$clubb.'';
$clubb = $_POST['land'];
}
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID = '.$clubb.'';
Want als ik ipv die $clubb in de query een nummer zet, dan werkt het wel..
De $clubb wordt niet gevuld denk ik dan, maar hoe kan ik hem wel gevuld krijgen zodat de waarde wel wordt neergezet in de query?
Gewijzigd op 19/12/2011 15:57:04 door Mark H
Daarbuiten moet je ook goed kijken naar SQL injectie, gebruik op zijn minst nog mysql_real_escape_string().
Gewijzigd op 19/12/2011 16:42:44 door Jonathan de Vries
het probleem zit zich in de SQL,
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Code (php)
1
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID = '.$clubb.'';
Hoe krijg ik nu die geposte waarde achter ingevuld waar nu '.$clubb.' staat.
dat is het enige probleem wat ik heb denk ik. klinkt heel simpel maar wat ik ook doe het lukt me niet.
Ja de mysql_real_escape_string() voeg ik later nog toe.
Die is waarschijnlijk gewoon leeg.
Probeer anders eens:
WHERE clubs.landID IN ' . $clubb;
==>
WHERE clubs.landID IN(' . $clubb. ')';
ik heb dit geprobeerd:
Code (php)
1
2
3
2
3
<?php
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID IN(' . $clubb. ')';
?>
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID IN(' . $clubb. ')';
?>
Zonder resultaat.
Maar als ik een willekeurig nummer invul (ID van een land) dan worden wel de waardes van dit land gepost.. (zie onderstaande code)
Code (php)
1
2
3
2
3
<?php
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID IN(81)';
?>
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID=landen.landID WHERE clubs.landID IN(81)';
?>
Zover ik zie klopt de query nu toch 100% of heb dit fout?
Code (php)
1
2
3
4
2
3
4
<?php
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID = landen.landID WHERE clubs.landID IN(' . $clubb . ')';
echo 'De uitgevoerde query is: ' . $query . '<br /><br />';
?>
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID = landen.landID WHERE clubs.landID IN(' . $clubb . ')';
echo 'De uitgevoerde query is: ' . $query . '<br /><br />';
?>
Gewijzigd op 20/12/2011 11:20:20 door kitty N
maar ik denk dat ik het opgelost heb met het volgende:
Eerst had ik de accolade direct gesloten na het vullen van de $clubb, oftewel daarbuiten zou hij leeg zijn:
Nu heb ik de accolade onder alle query tekst etc gezet en zo te zien doet hij het nu wel. Dankjewel iedereen voor het helpen!
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
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
<?php
if(isset($_POST['land'])){
$clubb = $_POST['land'];
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID = landen.landID WHERE clubs.landID IN('.$clubb.')';
$result = mysql_query($query) or die(mysql_error());
$htmlrows = array();
$aantalrecords = mysql_num_rows($result);
for($nummer=1; $nummer<=$aantalrecords; $nummer++){
$record = mysql_fetch_assoc($result);
$htmlrows[] = '
<tr>
<td><a href="index.php?action=show&id='.$record['clubID'].'">'.$record['clubnaam'].'</a></td>
<td><a href="'.$record['clubwebsite'].'" target="_blank">Website</a></td>
<td>'.$record['landnaam'].'</td>
</tr>
';
}
}
?>
if(isset($_POST['land'])){
$clubb = $_POST['land'];
$query = 'SELECT * FROM clubs JOIN landen ON clubs.landID = landen.landID WHERE clubs.landID IN('.$clubb.')';
$result = mysql_query($query) or die(mysql_error());
$htmlrows = array();
$aantalrecords = mysql_num_rows($result);
for($nummer=1; $nummer<=$aantalrecords; $nummer++){
$record = mysql_fetch_assoc($result);
$htmlrows[] = '
<tr>
<td><a href="index.php?action=show&id='.$record['clubID'].'">'.$record['clubnaam'].'</a></td>
<td><a href="'.$record['clubwebsite'].'" target="_blank">Website</a></td>
<td>'.$record['landnaam'].'</td>
</tr>
';
}
}
?>