Mijn zoek functie geeft niks weer...

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis  van DUin

Dennis van DUin

05/12/2014 19:04:12
Quote Anchor link
Hoi Beste mensen,

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)
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
            <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)
PHP script in nieuw venster Selecteer het PHP script
1
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);


En dan probeer ik het weer te geven via de code dit het eigenlijk altijd heeft gedaan...
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
<table width="auto" border="0" align="center">
<tr>
               <td class="top" >
            <?php echo nl2br($news['jaar']) ?>
        </td>
</tr>
    <tr>
    <td class="bottem" >
            <b>&nbsp;<?php echo $news['geslacht'] ?></b>
        </td>
        <td class="bottem" >
            <b>&nbsp;<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$sql= "SELECT * FROM records ORDER BY id DESC LIMIT 4";
$res= mysql_query($sql);
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
 
PHP hulp

PHP hulp

24/12/2024 06:16:28
 
- Ariën  -
Beheerder

- Ariën -

05/12/2014 19:12:22
Quote Anchor link
- Voeg foutafhandeling toe
- Je GET-invoer is onbeveiligd en vatbaar voor SQL-injection
- Gebruik bij sterke voorkeur de functies voor MySQLi.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/12/2014 19:13:40
Quote Anchor link
Fouthandeling op queries inbouwen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}

?>

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
 
Dennis  van DUin

Dennis van DUin

05/12/2014 19:22:40
Quote Anchor link
Heey het veranderen van ` om ' wekt en lost inderdaad het probleem voor een deel op. Behalve dan dat hij nu de lijst onbeperkt weergeeft onder elkaar. En als ik erachter zet LIMIT 1 dan gebeurd dit nog... Kunnen jullie daarbij helpen.

@ -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??
 
- Ariën  -
Beheerder

- Ariën -

05/12/2014 19:26:42
Quote Anchor link
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()
 
Dennis  van DUin

Dennis van DUin

05/12/2014 19:28:52
Quote Anchor link
- 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()


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
 
- Ariën  -
Beheerder

- Ariën -

05/12/2014 19:31:47
Quote Anchor link
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 -
 
- SanThe -

- SanThe -

05/12/2014 19:32:02
Quote Anchor link
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%.
 
Dennis  van DUin

Dennis van DUin

05/12/2014 19:34:56
Quote Anchor link
Ik geef mijn uitslagen weer met:

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
<?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>&nbsp;<?php echo $news['geslacht'] ?></b>
        </td>
       </tr>
    <tr>
        <td class="bottem" >
            <b>&nbsp;<?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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/12/2014 19:44:39
Quote Anchor link
Je moet de if op regel 21 voor de while op regel 16 zetten. En regel 10 verwijderen
Gewijzigd op 05/12/2014 19:45:34 door Ger van Steenderen
 
Dennis  van DUin

Dennis van DUin

05/12/2014 19:47:17
Quote Anchor link
Dankjewel ;)

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
 
- Ariën  -
Beheerder

- Ariën -

05/12/2014 20:18:09
Quote Anchor link
Wil je spaties aan het begin om einde van een string verwijderen, of in het algemeen overal?
 
Dennis  van DUin

Dennis van DUin

06/12/2014 17:02:44
Quote Anchor link
Ik wil ze niet verwijderen. Ik zet bijvoorbeeld het voglende als long text in de database:

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
 



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.