1 resultaat bekijken van meerdere zoekresultaten?
Ik heb een script waarin ik kan zoeken op gegevens uit een tabel. Daaruit komen dan meerdere gevonden resultaten. Hoe kan ik ervoor zorgen dat je een van die gevonden resultaten kan kiezen en alleen die kan bekijken om vervolgens dat ene lijstje uit te kunnen printen?
bv.
SELECT username, email, birthdate FROM users
WHERE birthdate > '1993-01-01'
ORDER BY birthdate
LIMIT 1
Die LIMIT 1 zorgt er voor dat je slechts 1 record van de DB aan php teruggeeft.
Verder: je hebt klassiek deze constructie:
Wel, als je maar 1 resultaat verwacht, maak je daar van:
Zo heb ik het nu, maar verder weet ik niet wat ik moet doen:
en ja waarschijnlijk heb ik nog geen goede foutafhandeling en beveiliging enzo, maar dat zet ik er later in, wanneer het goed werkt.
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
session_start();
include ("include/header.php");
include ("include/config.php");
?>
<html>
<head>
<title>Resultaten</title>
<link rel="stylesheet" type="text/css" href="include/style.css">
</head>
<body>
<?php
if (empty ($_POST))
{
?>
<form action="" method="post">
<table>
<tr>
<td>Datum:</td>
<?php
echo "<td><select name=\"dag\">";
echo "<option selected='selected' value=''>dag</option>";
for ($i = 1; $i <= 31; $i++)
{
echo "<option value='" . $i . "'>" . $i . "</option>";
}
echo "</select> ";
$months = array('', 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni',
'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December');
echo "<select name=\"maand\">";
echo "<option selected='selected' value=''>maand</option>";
for ($i = 1; $i <= 12; $i++)
{
echo "<option value='" . $i . "'>" . $months[$i] . "</option>";
}
echo "</select> ";
$startyear = 2012;
$endyear = 2012 + 20;
echo "<select name=\"jaar\">";
echo "<option selected='selected' value=''>jaar</option>";
for ($i = $startyear; $i <= $endyear; $i++)
{
echo "<option value='" . $i . "'>" . $i . "</option>";
}
echo "</select></td> ";
$query = mysql_query("SELECT docent FROM docenten") or die(mysql_error());
?>
</tr>
<tr>
<td>Docent:</td>
<td><select name="docent">
<option selected="selected" value="">-- maak een keuze --</option> <?php //name="docent" wordt gebruikt voor LIKE '" . $_POST["docent"] . "'
while (list($docent) = mysql_fetch_row($query))
{
echo ("<option value='$docent'>$docent</option>");
}
?>
</select></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="zoek" name="zoek"/></td>
</tr>
<?php
}
if (isset($_POST['zoek']))
{
// datum in het juiste format zetten
$zoek_datum = date('Y-m-d', strtotime($_POST["jaar"].'-'.$_POST["maand"].'-'.$_POST["dag"]));
$zoekquery = mysql_query ("SELECT klassen.klas, docenten.docent, enquete.datum
FROM klassen, docenten, enquete, keuze
WHERE datum = '".$zoek_datum."'
OR docent = '". $_POST['docent'] ."'
AND klassen.klasID = keuze.klasID
AND docenten.docentID = keuze.docentID
GROUP BY klassen.klas, docenten.docent")or die(mysql_error());
$aantal = mysql_num_rows($zoekquery);
//controleren of er records zijn gevonden
if ($aantal == 0)
{
//nee
echo "Helaas, geen resultaten gevonden"."</b><br>";
} else
{
//ja
echo ("<b>$aantal resultaten:</b><br>");
while ($rij = mysql_fetch_array($zoekquery))
{
echo ("klas:" . $rij['klas'] . "<br>");
echo ("docent:" . $rij['docent'] . "<br>");
echo ("datum:" . $rij['datum'] . "<br>");
echo ("<form action='result.php' method='post'>
<input type='submit' value='bekijken' name='bekijken'/>
</form><br>");
//steeds tabel leegmaken en opnieuw aanvullen met de juiste zoekgegevens??? bij result.php SELECT het resultaat WHERE ID = gekozen testID
$keuzeID = $_SESSION['keuzeID'];
mysql_query( " INSERT INTO test
( klas,
docent,
datum
)
VALUES
(
'".$rij['klas']."',
'".$rij['docent']."',
'".$rij['datum']."'
)
");
}
echo ("<form action='' method='post'>
<input type='button' value='Terug' onclick='javascript:history.back();'/>
</form><br>");
}
}
?>
</table>
</form>
</body>
</html>
<?php
include ("include/footer.php");
?>
session_start();
include ("include/header.php");
include ("include/config.php");
?>
<html>
<head>
<title>Resultaten</title>
<link rel="stylesheet" type="text/css" href="include/style.css">
</head>
<body>
<?php
if (empty ($_POST))
{
?>
<form action="" method="post">
<table>
<tr>
<td>Datum:</td>
<?php
echo "<td><select name=\"dag\">";
echo "<option selected='selected' value=''>dag</option>";
for ($i = 1; $i <= 31; $i++)
{
echo "<option value='" . $i . "'>" . $i . "</option>";
}
echo "</select> ";
$months = array('', 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni',
'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December');
echo "<select name=\"maand\">";
echo "<option selected='selected' value=''>maand</option>";
for ($i = 1; $i <= 12; $i++)
{
echo "<option value='" . $i . "'>" . $months[$i] . "</option>";
}
echo "</select> ";
$startyear = 2012;
$endyear = 2012 + 20;
echo "<select name=\"jaar\">";
echo "<option selected='selected' value=''>jaar</option>";
for ($i = $startyear; $i <= $endyear; $i++)
{
echo "<option value='" . $i . "'>" . $i . "</option>";
}
echo "</select></td> ";
$query = mysql_query("SELECT docent FROM docenten") or die(mysql_error());
?>
</tr>
<tr>
<td>Docent:</td>
<td><select name="docent">
<option selected="selected" value="">-- maak een keuze --</option> <?php //name="docent" wordt gebruikt voor LIKE '" . $_POST["docent"] . "'
while (list($docent) = mysql_fetch_row($query))
{
echo ("<option value='$docent'>$docent</option>");
}
?>
</select></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="zoek" name="zoek"/></td>
</tr>
<?php
}
if (isset($_POST['zoek']))
{
// datum in het juiste format zetten
$zoek_datum = date('Y-m-d', strtotime($_POST["jaar"].'-'.$_POST["maand"].'-'.$_POST["dag"]));
$zoekquery = mysql_query ("SELECT klassen.klas, docenten.docent, enquete.datum
FROM klassen, docenten, enquete, keuze
WHERE datum = '".$zoek_datum."'
OR docent = '". $_POST['docent'] ."'
AND klassen.klasID = keuze.klasID
AND docenten.docentID = keuze.docentID
GROUP BY klassen.klas, docenten.docent")or die(mysql_error());
$aantal = mysql_num_rows($zoekquery);
//controleren of er records zijn gevonden
if ($aantal == 0)
{
//nee
echo "Helaas, geen resultaten gevonden"."</b><br>";
} else
{
//ja
echo ("<b>$aantal resultaten:</b><br>");
while ($rij = mysql_fetch_array($zoekquery))
{
echo ("klas:" . $rij['klas'] . "<br>");
echo ("docent:" . $rij['docent'] . "<br>");
echo ("datum:" . $rij['datum'] . "<br>");
echo ("<form action='result.php' method='post'>
<input type='submit' value='bekijken' name='bekijken'/>
</form><br>");
//steeds tabel leegmaken en opnieuw aanvullen met de juiste zoekgegevens??? bij result.php SELECT het resultaat WHERE ID = gekozen testID
$keuzeID = $_SESSION['keuzeID'];
mysql_query( " INSERT INTO test
( klas,
docent,
datum
)
VALUES
(
'".$rij['klas']."',
'".$rij['docent']."',
'".$rij['datum']."'
)
");
}
echo ("<form action='' method='post'>
<input type='button' value='Terug' onclick='javascript:history.back();'/>
</form><br>");
}
}
?>
</table>
</form>
</body>
</html>
<?php
include ("include/footer.php");
?>
Inge V op 21/06/2012 11:25:36:
en ja waarschijnlijk heb ik nog geen goede foutafhandeling en beveiliging enzo, maar dat zet ik er later in, wanneer het goed werkt.
En achteraf heb je geen tijd, geen zin en/of vergeet je het.
Nu zoek je mogelijk uren naar iets omdat het niet werkt, terwijl je met (goede) foutafhandeling het zelf zo zou kunnen vinden.
Vind je dit
echt praktisch?
Waarom niet
?
-->HTML = ", php (echo, print, etc) = '
Ten aanzien van je vraag: voeg een hyperlink toe (obv een id, bv wijzigen.php?id=123) en ga op die pagina verder met wat je wilt doen (controleer op die pagina wel of er een (juist) id is meegegeven! (foutafhandeling, beveiliging ;-))
Waarom () om je echo?
Variabelen buiten quotes.
Waarom mysql_fetch_array en geen mysql_fetch_assoc?
Zou zelf geen formulier gebruiken voor een ‘pagina terug’ optie.
Gewijzigd op 21/06/2012 14:17:02 door Obelix Idefix
dat ziet er dan ong zoiets uit
Code (php)
1
2
3
2
3
<?php
echo '<a href="?id='.mysql_real_escape_string($row['id']).'">Lees verder</a>';
?>
echo '<a href="?id='.mysql_real_escape_string($row['id']).'">Lees verder</a>';
?>
Gewijzigd op 21/06/2012 14:32:38 door Reshad F
ik ben gewend om alless te escapen maar het hoeft in dit geval idd niet :)
kan het overigens kwaad om zoiets te escapen? ik neem aan van niet toch.
Code (php)
Hier plak je eerst een string aam elkaar tot een datumstring, dan maak je eer een datum van en vertaalt die weer terug naar een string. Maw 2 stappen teveel.
Maar (belangrijker), heb je de query al wel eens uitgetest? Eigenlijk zou die niet goed moeten gaan (tenzij MySQL weer zeer genadig is)
Reshad F op 21/06/2012 15:30:19:
... kan het overigens kwaad om zoiets te escapen?
In dit geval kan het geen kwaad.
En als je moet kiezen tussen een escape te weinig en een escape te veel, is de escape te weinig ongetwijfeld de meest gevaarlijke.
Maar zorg toch dat je te allen tijde weet welk wapen je gebruikt en waarom je het gebruikt.
Een mogelijk probleem is dat je gegevens twee keer door zo'n functies haalt, als je niet oplet.
Bekijk dit eens
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$post_test = ' href="test" ';
$a = mysql_escape_string($post_test);
$b = mysql_escape_string($a);
echo $b;
?>
$post_test = ' href="test" ';
$a = mysql_escape_string($post_test);
$b = mysql_escape_string($a);
echo $b;
?>
Ik zie dit probleem wel vaker voorkomen wanneer mensen automatisch escapen en htmlentities tegelijk gebruiken, zonder deftig te weten waar/wanneer/waarom.
Gewijzigd op 21/06/2012 16:04:34 door Kris Peeters
Quote:
kan het overigens kwaad om zoiets te escapen? ik neem aan van niet toch.
Ach, kan het kwaad dat ik de hele dag met een geweer in de aanslag loop? Nee toch. Alleen echt praktisch is het niet, ik loop daardoor minder snel en ik gebruik het verkeerde wapen op het verkeerde moment => ik heb helemaal geen wapen nodig.
Gebruik mysql_real_escape_string alleen als je te maken hebt met een DB en een string. In andere gevallen maakt het je code langzamer heb je straks niet meer door waarom je het doet en kun je problemen krijgen.