Mijn zoek functie geeft niks weer...
Ik ben bezig met een zoekfunctie op mijn website, en nu wordt er maar niks weergegeven constant en dit is een beetje vervelend. Ik kom er ook niet uit waar het mis gaat...
Ik zoek met de volgende code:
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
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
<table>
<form action="uitslag/uitslaghome.php" method="GET">
<tr><td ><div align="left"><select type="tekst" name="jaar">
<option value="Kies">Kies</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select></div></td>
</tr>
<tr><td ><div align="left"><select type="tekst" name="geslacht">
<option value="Kies">Kies</option>
<option value="heren">Heren</option>
<option value="dames">Dames</option>
</select></div></td>
</tr>
<tr><td ><div align="left"><select type="tekst" name="afstand">
<option value="Kies">Kies</option>
<option value="5km">5 Kilometer </option>
<option value="10km">10 Kilometer </option>
</select></div></td>
</tr>
<tr><td ><div align="center"><input type="submit" value="Zoek"></div></td></tr>
</form></table>
<form action="uitslag/uitslaghome.php" method="GET">
<tr><td ><div align="left"><select type="tekst" name="jaar">
<option value="Kies">Kies</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
<option value="2016">2016</option>
<option value="2017">2017</option>
<option value="2018">2018</option>
<option value="2019">2019</option>
<option value="2020">2020</option>
</select></div></td>
</tr>
<tr><td ><div align="left"><select type="tekst" name="geslacht">
<option value="Kies">Kies</option>
<option value="heren">Heren</option>
<option value="dames">Dames</option>
</select></div></td>
</tr>
<tr><td ><div align="left"><select type="tekst" name="afstand">
<option value="Kies">Kies</option>
<option value="5km">5 Kilometer </option>
<option value="10km">10 Kilometer </option>
</select></div></td>
</tr>
<tr><td ><div align="center"><input type="submit" value="Zoek"></div></td></tr>
</form></table>
Op de site: uitslag/uitslaghome.php
haal ik de gegevens zo binnen:
Code (php)
1
2
3
4
5
2
3
4
5
$zjaar = $_GET['jaar'];
$zgeslacht = $_GET['geslacht'];
$zafstand = $_GET['afstand'];
$sql= "SELECT * FROM uitslag WHERE `jaar` = `$zjaar` AND `geslacht` = `$zgeslacht` AND `afstand` = `$zafstand`";
$res= mysql_query($sql);
$zgeslacht = $_GET['geslacht'];
$zafstand = $_GET['afstand'];
$sql= "SELECT * FROM uitslag WHERE `jaar` = `$zjaar` AND `geslacht` = `$zgeslacht` AND `afstand` = `$zafstand`";
$res= mysql_query($sql);
En dan probeer ik het weer te geven via de code dit het eigenlijk altijd heeft gedaan...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<table width="auto" border="0" align="center">
<tr>
<td class="top" >
<?php echo nl2br($news['jaar']) ?>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['geslacht'] ?></b>
</td>
<td class="bottem" >
<b> <?php echo $news['afstand'] ?></b>
</td>
<td class="bottem" colspan="3">
<?php echo nl2br($news['score']) ?>
</td>
</tr>
</table>
<tr>
<td class="top" >
<?php echo nl2br($news['jaar']) ?>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['geslacht'] ?></b>
</td>
<td class="bottem" >
<b> <?php echo $news['afstand'] ?></b>
</td>
<td class="bottem" colspan="3">
<?php echo nl2br($news['score']) ?>
</td>
</tr>
</table>
Maar als ik dit deed dan had ik er geen zoekfunctie in en werkte ik met het volgende regeltje:
En dat werkt wel. Als ik deze code neer zet dan zie ik gewoon alle uitslagen met een max van 4. Maar ik wil juist dat hij de uitslagen weergeeft aan de hand van jou opgegeven zoek input.
Is er iemand die de tijd wilt nemen om mij hierbij te helpen en wilt kijken waarom hij niks weergeeft? O
Groeten,
Dennis
- Je GET-invoer is onbeveiligd en vatbaar voor SQL-injection
- Gebruik bij sterke voorkeur de functies voor MySQLi.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if (false !== $res = mysql_query($sql)) {
//code om resultaat te tonen
}
else {
echo mysql_error(), '<br>', $sql;
}
?>
if (false !== $res = mysql_query($sql)) {
//code om resultaat te tonen
}
else {
echo mysql_error(), '<br>', $sql;
}
?>
Je gebruikt backticks(`) daar waar je een string of getal op wilt geven, Mysql ziet dat dan als een kolom identifier.
Gewijzigd op 05/12/2014 19:14:21 door Ger van Steenderen
@ -Aar-
Daar heb je gelijk in het is inderdaad onbeveiligd daar ga ik later naar kijken. WIl het eerst even werken hebben voordat ik daarin ga kijken. Ben namelijk nog niet heel goed ermee maar probeer nu zo veel mogelijk zelf te schrijven en soms wat hulp te vragen.
Wat is de verbetering van MYSQLi??
Verder raad ik niet aan om een oplossing voor een groot beveiligingslek m.b.t. onbeveiligde data uit te stellen. In ieder geval zeker niet voor iets wat al in productie is. Kijk eens maar mysql_real_escape_string()
- Aar - op 05/12/2014 19:26:42:
De functie-bibliotheek van mysql_*() is verouderd. Daarom raadt php.net nu die van mysqli_*() aan of om PDO te gebruiken.
Verder raad ik niet aan om een oplossing voor een groot beveiligingslek m.b.t. onbeveiligde data uit te stellen. In ieder geval zeker niet voor iets wat al in productie is. Kijk eens maar mysql_real_escape_string()
Verder raad ik niet aan om een oplossing voor een groot beveiligingslek m.b.t. onbeveiligde data uit te stellen. In ieder geval zeker niet voor iets wat al in productie is. Kijk eens maar mysql_real_escape_string()
Staat inderdaad ook niet op het uitstellen hiervan hoor! WIl er meteen naar gaan kijken zo als hij er nog maar 1 weergeeft en geen hele lijst. Bedankt voor de tips weer! Kan je ook helpen met die andere vraag?
Verder hoe groot is de kans dat mensen op deze site sql injecties proberen te doen? Het is niet dat het een gigantisch grote site is...
Groeten,
Dennis
Dennis van DUin op 05/12/2014 19:28:52:
Verder hoe groot is de kans dat mensen op deze site sql injecties proberen te doen?
Onderschat niet de kracht van botnets en geautomatiseerde taken.
Welke code heb je nu precies?
Gewijzigd op 05/12/2014 19:32:21 door - Ariën -
Dennis van DUin op 05/12/2014 19:28:52:
Verder hoe groot is de kans dat mensen op deze site sql injecties proberen te doen? Het is niet dat het een gigantisch grote site is...
Uh, 99%.
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
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
<?php
include("stylerecord.css");
include("global.inc.php");
$zjaar = $_GET['jaar'];
$zgeslacht = $_GET['geslacht'];
$zafstand = $_GET['afstand'];
$sql= "SELECT * FROM uitslag WHERE `jaar` = '$zjaar' AND `geslacht` = '$zgeslacht' AND `afstand` = '$zafstand' ";
$res= mysql_query($sql);
?>
<?
while($news = mysql_fetch_array($res)){
//Opmaak van datum
$unixtime = strtotime($news['news_datetime']);
if (false !== $res = mysql_query($sql)) {
//code om resultaat te tonen
?>
<table width="auto" border="0" align="center">
<tr>
<td class="top" >
<?php echo nl2br($news['jaar']) ?>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['geslacht'] ?></b>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['afstand'] ?></b>
</td>
</tr>
<tr>
<td class="bottem" colspan="3">
<?php echo nl2br($news['score']) ?>
</td>
</tr>
</table>
<br>
<?php
}
else {
echo mysql_error(), '<br>', $sql;
}
}
mysql_close();
?>
include("stylerecord.css");
include("global.inc.php");
$zjaar = $_GET['jaar'];
$zgeslacht = $_GET['geslacht'];
$zafstand = $_GET['afstand'];
$sql= "SELECT * FROM uitslag WHERE `jaar` = '$zjaar' AND `geslacht` = '$zgeslacht' AND `afstand` = '$zafstand' ";
$res= mysql_query($sql);
?>
<?
while($news = mysql_fetch_array($res)){
//Opmaak van datum
$unixtime = strtotime($news['news_datetime']);
if (false !== $res = mysql_query($sql)) {
//code om resultaat te tonen
?>
<table width="auto" border="0" align="center">
<tr>
<td class="top" >
<?php echo nl2br($news['jaar']) ?>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['geslacht'] ?></b>
</td>
</tr>
<tr>
<td class="bottem" >
<b> <?php echo $news['afstand'] ?></b>
</td>
</tr>
<tr>
<td class="bottem" colspan="3">
<?php echo nl2br($news['score']) ?>
</td>
</tr>
</table>
<br>
<?php
}
else {
echo mysql_error(), '<br>', $sql;
}
}
mysql_close();
?>
Maar dan komt er dus de gehele lijst obeperkd te staan en hij moet hem maar 1x weergeven. Wordt steeds herhaald.
Bedankt beide voor het benoemen van het risico! Ik zet het meteen bovenaan om ernaar te gaan kijken nadat ik dit heb gefixxt om alles te beveiligen.
Gewijzigd op 05/12/2014 19:45:34 door Ger van Steenderen
Op naar de beveiliging tips zijn welkom!
Ik hoorde al:
mysql_real_escape_string()
Groeten,Dennis
Edit:
En ik heb een vraag hoe ik de spatie opmaak uit de input kan behouden? Regels weet ik nu met nl2br maar hoe de spaties?
PS: Dit is weel en sociaal en hulpvaardigforum! Top mensen ga zo door hier!
Gewijzigd op 05/12/2014 19:50:12 door Dennis van DUin
Wil je spaties aan het begin om einde van een string verwijderen, of in het algemeen overal?
1. Dennis 33.23 33.22
En die opmaak moet ik houden want als ik het nu echo dan krijg ik:
1.Dennis 33.23 33.22