Zoekfunctie
Wie ziet wat ik fout doe in onderstaande code?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if(isset($_POST['searchBtn'])) {
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekwoord."%' ORDER BY datum DESC";
$res = mysql_query($sql);
if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?>
<a href="<?php echo "?p=empty&s=blog&id=$row[id]"; ?>"><b><?php echo "$row[titel]"; ?></a></b><br />
<?php echo "$row[samenvatting]";
echo '<p>';
}}}
else
{
echo "<p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p>";
}
?>
if(isset($_POST['searchBtn'])) {
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekwoord."%' ORDER BY datum DESC";
$res = mysql_query($sql);
if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?>
<a href="<?php echo "?p=empty&s=blog&id=$row[id]"; ?>"><b><?php echo "$row[titel]"; ?></a></b><br />
<?php echo "$row[samenvatting]";
echo '<p>';
}}}
else
{
echo "<p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p>";
}
?>
EDIT: foutje eruit gehaald.
Gewijzigd op 01/01/1970 01:00:00 door Naam Loos
Bump :)
Al gekeken of die de query gewoon goed uitvoert?
al echo gedaan van aantal rows?
error meldingen aanstaan in php?
En verander:
in:
@TS: Een formulier controle voeren we uit met:
We controleren dus niet of een submit-button meegestuurd is, want dat gebeurt niet altijd.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$_POST['zoekterm']."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[titel]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>
if($_SERVER['REQUEST_METHOD'] == "POST") {
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$_POST['zoekterm']."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[titel]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>
Het script wat ik hierboven gebruikte is het enige script op PHPhulp en al zeker 3 jaar oud. Dus misschien moet ik deze maar plaatsen (als deze beter is).
Ik heb het nog niet getest. Dat ga ik nu even doen.
EDIT: toch nog een foutje ontdekt en eruit gehaald. Dit script werkt ook sneller voor mijn gevoel...
Gewijzigd op 01/01/1970 01:00:00 door Naam Loos
SanThe schreef op 25.01.2010 21:10:
Regel 20 zal 4 fouten geven.
Script is lek => SQL-Injection.
Edit: Nu nog 3.
Script is lek => SQL-Injection.
Edit: Nu nog 3.
en bij de error laat je je SQL-query zien. Dat icm met SQL-injection mogelijkheid is dat zeer gevaarlijk.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if (isset($_POST['searchBtn' ]))
{
$sql = "hier je query";
if ($res = mysql_query($sql))
{
// ga verder
} else {
error_log(mysql_error());
print mysql_errno().": Er is een fout opgetreden.";
}
} else {
// Formulier is niet gepost
}
?>
if (isset($_POST['searchBtn' ]))
{
$sql = "hier je query";
if ($res = mysql_query($sql))
{
// ga verder
} else {
error_log(mysql_error());
print mysql_errno().": Er is een fout opgetreden.";
}
} else {
// Formulier is niet gepost
}
?>
SanThe schreef op 25.01.2010 21:10:
Regel 20 zal 4 fouten geven.
Script is lek => SQL-Injection.
Edit: Nu nog 3.
Script is lek => SQL-Injection.
Edit: Nu nog 3.
SanThe, kun je ook zeggen hoe ik aan die fouten moet komen? Het script werkt zonder fouten.
SQL injection en het laten zien van de sql bij een foutmelding verhelpen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
if(isset($_POST['searchBtn']))
{
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?>
if(isset($_POST['searchBtn']))
{
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?>
</b>
<br />
<p>
<p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p>
Haha,
wat een puinhoop wordt het hé als je html en php door elkaar heen gebruikt!!
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
Jim schreef op 25.01.2010 21:30:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(isset($_POST['searchBtn']))
{
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?><a href="<?php echo "?p=empty&s=blog&id=".$row['id']; ?>"><b><?php echo $row['titel']; ?></a>
</b>
<br />
<?php echo $row['samenvatting']; ?>
<p>
<?php
}
}
}
else {
?><p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p><?php
}
[/code]
?>
if(isset($_POST['searchBtn']))
{
$zoekwoord = $_POST['zoekterm'];
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".mysql_real_escape_string($zoekwoord)."%' ORDER BY datum DESC";
if ($res = mysql_query($sql) && mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
?><a href="<?php echo "?p=empty&s=blog&id=".$row['id']; ?>"><b><?php echo $row['titel']; ?></a>
</b>
<br />
<?php echo $row['samenvatting']; ?>
<p>
<?php
}
}
}
else {
?><p>Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.</b></p><?php
}
[/code]
?>
Waarom zou je zo moeilijk doen? Of denk ik te makkelijk?
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$zoekterm = mysql_real_escape_string($_POST['zoekterm']);
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekterm."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
error_log(mysql_error());
print mysql_errno().": Er is iets fout gegaan.";
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[id]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>
if($_SERVER['REQUEST_METHOD'] == "POST") {
$zoekterm = mysql_real_escape_string($_POST['zoekterm']);
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekterm."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
error_log(mysql_error());
print mysql_errno().": Er is iets fout gegaan.";
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row[id]."\"><b>".$row[titel]."</a></b><br />".$row[samenvatting]."<p>";
}}}
?>
$row[id] moet zijn $row['id'] en dan nog 2 keer.
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
$zoekterm = mysql_real_escape_string($_POST['zoekterm']);
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekterm."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
error_log(mysql_error());
print mysql_errno().": Er is iets fout gegaan.";
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row['id']."\"><b>".$row['titel']."</a></b><br />".$row['samenvatting']."<p>";
}}}
?>
if($_SERVER['REQUEST_METHOD'] == "POST") {
$zoekterm = mysql_real_escape_string($_POST['zoekterm']);
$sql = "SELECT * FROM nieuws WHERE titel LIKE '%".$zoekterm."%' ORDER BY datum DESC";
if(!$res = mysql_query($sql))
{
error_log(mysql_error());
print mysql_errno().": Er is iets fout gegaan.";
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Helaas is er niks gevonden op uw zoekopdracht. Probeer het opnieuw.';
}
else
{
while($row = mysql_fetch_assoc($res))
{
echo "<a href=\"?p=empty&s=blog&id=".$row['id']."\"><b>".$row['titel']."</a></b><br />".$row['samenvatting']."<p>";
}}}
?>
Nu ik dit topic een beetje doorlees, is dus een sql injection op te lossen met de functie: mysql_real_escape_string?
Dit GOED lezen:
http://nl3.php.net/manual/en/function.mysql-real-escape-string.php
Gewijzigd op 01/01/1970 01:00:00 door Pepijn
Dankje :)
Dankje :)
Of een PHP Beginners handleiding.
Dus dan wil ik dit krijgen: Gezocht op: phphulp in 10 ms.
Na wat gegoogel weet ik nog steeds niet hoe ik het voor mekaar kan krijgen.