Zoekmachine Database
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Naam = addslashes($_POST['naam']);
$sql = 'SELECT Name, Resultaat
FROM waarden
WHERE Name = $Naam';
$res = mysql_query($sql,$link);
het probleem is dat ik het script geen waarde vind, die wel degelijk in de database staat. Ook als ik $Naam vervang door een waarde, bijvoorbeeld 'peter', dan krijg ik vind het script wel gewoon de goede waarde. Zie ik iets over het hoofd?
Je mist foutafhandeling, beveiliging tegen sql-injection en de enkele quotes om je tekst(data).
Gebruik nooit addslashes(), deze verkloot je data alleen maar. De functie die je zou moeten gebruiken is mysql_real_escape_string(). Verder vergeet je zoals SanThe al zegt de enkele quotes om de string in je query. Maar daar had je snel achter kunnen komen als je degelijke foutafhandeling toegepast had...
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Naam = mysql_real_escape_string($_POST['naam']);
$sql = 'SELECT Name, Resultaat
FROM waarden
WHERE Name = "'.$Naam.'"';
$res = mysql_query($sql,$link);
?>
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Naam = mysql_real_escape_string($_POST['naam']);
$sql = 'SELECT Name, Resultaat
FROM waarden
WHERE Name = "'.$Naam.'"';
$res = mysql_query($sql,$link);
?>
Als je iets wilt zoeken, en die waarde is een string, horen er quotes om die naam heen. "peter" dus, ipv peter.
Foutafhandeling doe je in dit geval, door te kijken of $res een resource is (is_resource), zo niet, toon je een foutmelding (mysql_error).
Neem overigens eens een kijkje in het PHP Beginnershandleiding, hierin word dit allemaal behandeld :)
Gewijzigd op 04/08/2011 14:32:41 door Chris -
Ik heb nu de foutafhandeling toegevoegd. Nu krijg ik de foutmedling "Unknown column '$naam' in 'where clause'". Hoe zorg ik dat $naam als variabele word gezien en niet als kolom van mijn database?
Name => Hoofdletter en engels
Resultaat => Hoofdletter en nederlands
waarden => Kleine letter en nederlands
Beter is om een en dezelfde manier te gebruiken voor alles.
Gewijzigd op 04/08/2011 15:52:45 door - SanThe -
<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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
<?php
$link = mysql_connect('...','...','...');
mysql_select_db(' ... ',$link) or die (mysql_error());
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Nummer = $_POST['Nummer'];
$sql = "SELECT Nummer, Resultaat
FROM Waarden
WHERE Nummer == '".$iNummer."'";
$res = mysql_query($sql,$link);
if (!is_resource($db_link)) {
die(mysql_error());
}
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table border="10">
<tr>
<td>naam</td>
<td>adres</td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td>'.$row['Nummer'].'</td>
<td>'.$row['Resultaat'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden voor nummer ';
echo $Nummer;
}
}
else
{
<form action=" <?=$_SERVER['PHP_SELF']?> " method="POST">
Nummer: <input type="text" name="Nummer" maxlength="7" size="10"><br />
<input type="submit" name="verzenden" value="verzenden">
</form>
}
?>
$link = mysql_connect('...','...','...');
mysql_select_db(' ... ',$link) or die (mysql_error());
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$Nummer = $_POST['Nummer'];
$sql = "SELECT Nummer, Resultaat
FROM Waarden
WHERE Nummer == '".$iNummer."'";
$res = mysql_query($sql,$link);
if (!is_resource($db_link)) {
die(mysql_error());
}
if ($res && mysql_num_rows($res) >= 1)
{
echo '<table border="10">
<tr>
<td>naam</td>
<td>adres</td>
</tr>';
while ($row = mysql_fetch_array($res))
{
echo '<tr>
<td>'.$row['Nummer'].'</td>
<td>'.$row['Resultaat'].'</td>
</tr>';
}
echo '</table>';
} else {
echo 'Geen data gevonden voor nummer ';
echo $Nummer;
}
}
else
{
<form action=" <?=$_SERVER['PHP_SELF']?> " method="POST">
Nummer: <input type="text" name="Nummer" maxlength="7" size="10"><br />
<input type="submit" name="verzenden" value="verzenden">
</form>
}
?>
Nu krijg ik de foutmelding: 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 '== '1'' at line 3 (Het lijkt mij dat in line 11 de fout zit). Wat kan ik met deze foutmelding?
Gewijzigd op 04/08/2011 16:15:44 door kris beensma
bij sql heb je maar 1 = nodig
In een query gebruik je geen == maar gewoon = om waarden te vergelijken...
WHERE Nummer = '".$iNummer."'"; // onbekend door de 'i' er bij
Gewijzigd op 04/08/2011 16:31:05 door kris beensma
Krijg je alleen een wit scherm? Zorg dan dat je error_reporting instelling goed staat!
Op regel 42 begin jij gewoon met html terwijl je nog in php-mode zit.
Gewijzigd op 05/08/2011 10:26:36 door kris beensma