1 resultaat bekijken van meerdere zoekresultaten?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Inge V

Inge V

21/06/2012 10:41:10
Quote Anchor link
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?
 
PHP hulp

PHP hulp

28/12/2024 13:39:20
 
Kris Peeters

Kris Peeters

21/06/2012 11:03:08
Quote Anchor link
1 resultaat uit de DB halen:
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
  ...
  while ($row = mysql_fetch_assoc($res)) {
   ...
  }
  ...

?>


Wel, als je maar 1 resultaat verwacht, maak je daar van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if ($row = mysql_fetch_assoc($res)) {
?>
 
Inge V

Inge V

21/06/2012 11:25:36
Quote Anchor link
@Kris, maar het is juist de bedoeling dat hij meerdere resultaten vind. Ik heb bijvoorbeeld docent1 waarbij datum1 hoort. en docent2 waarbij datum1 hoort. Wanneer je dan zoekt op datum1 dan moet hij beide resultaten weergeven, maar dan wil ik wel dat je 1 resultaat daarvan kan kiezen en dat je dan op een aparte pagina de andere gegevens die bijvoorbeeld bij docent1 en datum1 horen erbij weergeven.

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)
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
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");

?>
 
Obelix Idefix

Obelix Idefix

21/06/2012 14:13:57
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "<select name=\"jaar\">";
echt praktisch?
Waarom niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo '<select name="jaar">';
?

-->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
 
Reshad F

Reshad F

21/06/2012 14:31:18
Quote Anchor link
geef een link mee met een id zoals obelix al aangeeft.

dat ziet er dan ong zoiets uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<a href="?id='.mysql_real_escape_string($row['id']).'">Lees verder</a>';
?>
Gewijzigd op 21/06/2012 14:32:38 door Reshad F
 
Erwin H

Erwin H

21/06/2012 14:36:58
Quote Anchor link
Daar is het 'mysql_real_escape_string-moet-overal-spook' weer. Dat moet je daar natuurlijk niet doen Reshad. De input komt niet van de gebruiker en het gaat niet een database in op dat punt....

Gewoon zo dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<a href="?id='.$row['id'].'">Lees verder</a>';
?>
 
Reshad F

Reshad F

21/06/2012 15:30:19
Quote Anchor link
ah je hebt gelijk erwin.

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

21/06/2012 15:40:50
Quote Anchor link
@Inge,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$zoek_datum
= date('Y-m-d', strtotime($_POST["jaar"].'-'.$_POST["maand"].'-'.$_POST["dag"]));
?>

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)
 
Kris Peeters

Kris Peeters

21/06/2012 16:03:48
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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
 
Wouter J

Wouter J

21/06/2012 16:15:02
Quote Anchor link
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.
 



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.