zoekresultaten uit database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Shyaak Nana

Shyaak Nana

08/06/2010 17:11:30
Quote Anchor link
Hallo leden,

Ik heb jullie hulp nodig bij het volgende.

Onderstaande script kan ik gegevns uit mijn database tonen. De zoekformulier bestaat uit de volgende 3 citreria:
Type, regio en plaats.

Wat wil ik:
- als alleen $type een waarde heeft en de rest niet dan moet hij alles tonen.
- al $type een waarde heeft en $regio ook een waarde , maar plaats niet dan moet hij alleen de rijen tonen die voldoen aan de waarde $type en $regio.
- en als alle 3 een waarde hebben dan slechts de rijen/gevens die voldoen aan alle drie waarden.


Ik heb met de AND en de OR functie gesprobeerd, maar het werkt niet.
bij de and toont hij niets tenzij alle $waarden ingevuld zijn en bij OR toont hij alles ook al geef een specifieke waarde aan $regio.

Wat kan/moet ik veranderen ana de onderstaande 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
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
<?php

$server
= 'localhost';
$user = 'user';
$pass = 'pass';
$dbname = 'vacaturebronnen';

$type = $_POST['type'];
$regio = $_POST['regio'];
$plaats = $_POST['plaats'];

$query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";

if($db = mysql_connect($server, $user, $pass))
{

    $message = "";

    if(mysql_select_db($dbname, $db))
    {

        $message .= "";

        if($result = mysql_query($query, $db))
        {

            $message .= "";
        }

        else
        {
            $message .= "tabel kan niet geselecteerd worden.<\br>\n";
        }
    }

    else
    {
        $message .= " Database $dbname niet gevonden.<\br>\n";
    }
}

else
{
    $message = "Verbinden met database is mislukt.<\br>\n";
}


echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#ffffff' >\n";
echo "<tr>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='60'></td>\n";
echo "<td width='90'></td>\n";
echo "<td width='110'></td>\n";//echo "<td widht='140'>Adres</td>\n"; dit zou adres weergeven in de kolom
echo "<td width='90'></td>\n";
echo "</tr>\n";

// alle cellen tussen <tr> (tabelrij) plaatsen zodat ze op een rij zijn

while(list($id, $type, $naam, $website, $regio, $postcode, $plaats, $adres, $telefoonnummer) = mysql_fetch_row($result))
{
   echo "<table width='715' border='0' cellspacing='0' cellpadding='2' bgcolor='#Ffffff' style='table-layout:fixed' \n";
    echo "<tr>\n";
    echo "<td width='169'><FONT size='-2' color='#FE4D1B'/>$naam</FONT></td>\n";
    echo "<td width='150'><FONT size='-2' color='#666666'/>$adres</FONT></td>\n";
    echo "<td width='55'><FONT size='-2' color='#666666'/>$postcode</FONT></td>\n";
    echo "<td width='74'><FONT size='-2' color='#666666'/>$plaats</FONT></td>\n";
    echo "<td width='90'><FONT size='-2' color='#666666'/>$telefoonnummer</FONT></td>\n";
    echo "<td width='178'><FONT size='-2' color='#666666'/>$website</FONT></td>\n";
    echo "</td>\n";
    echo "</tr>\n";
}

echo "</table>\n";


mysql_close($db);

?>


Wachtwoord verwijderd[/modedit]
Gewijzigd op 08/06/2010 20:48:11 door Tom Beuckelaere
 
PHP hulp

PHP hulp

06/11/2024 00:21:20
 
Robin van der Vliet

Robin van der Vliet

08/06/2010 17:26:47
Quote Anchor link
Ik zou beginnen met je wachtwoord eruit te halen. ;)
 
- SanThe -

- SanThe -

08/06/2010 17:43:06
Quote Anchor link
Verder is ook aan te raden om foutafhandeling in de bouwen, inputgegevens te controleren en sql-injection te voorkomen. Dit script is lek.
 
Tom Beuckelaere

Tom Beuckelaere

08/06/2010 20:56:51
Quote Anchor link
Beste Shyaak Nana,

Het is aangeraden om eerst uw waarden te controleren tegen uw business rules. Dus op de vooropgestelde eisen die u zelf stelt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
- als alleen $type een waarde heeft en de rest niet dan moet hij alles tonen.
- al $type een waarde heeft en $regio ook een waarde , maar plaats niet dan moet hij alleen de rijen tonen die voldoen aan de waarde $type en $regio.
- en als alle 3 een waarde hebben dan slechts de rijen/gevens die voldoen aan alle drie waarden.


Dat doet u met behulp van verschillende if-statements. Op basis van het resultaat van deze statements kunt u een aangepaste query opbouwen.

Onderstaand nog een codevoorbeeld met het geen ik bedoel.

Opgelet: de controles zijn als voorbeeld en zijn zeker niet voldoende om alle waarden die ingevuld zijn veilig door te loodsen naar uw mysql query.

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
<?php

//...

if($type != "" && ($regio == "" && $plaats == ""))
{

    $query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' ORDER BY 'naam'";
}

elseif($type != "" && $regio != "" && $plaats == "")
{

    $query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' ORDER BY 'naam'";
}

elseif($type != "" && $regio != "" && $plaats != "")
{

    $query = "SELECT * FROM vacaturebronnen1 WHERE type='$type' AND regio='$regio' AND plaats='$plaats' ORDER BY 'naam'";
}

else
{
    //wat moet er in dit geval gebeuren?
}

//...

?>
Gewijzigd op 08/06/2010 20:58:10 door Tom Beuckelaere
 
- SanThe -

- SanThe -

08/06/2010 21:06:28
Quote Anchor link
@Tom: Waarom ORDER BY 'naam'? Dat is tekst.
 
Tom Beuckelaere

Tom Beuckelaere

08/06/2010 21:18:50
Quote Anchor link
SanThe Nvt op 08/06/2010 21:06:28:
@Tom: Waarom ORDER BY 'naam'? Dat is tekst.


Ik heb de query gewoon overgenomen. Eerlijk gezegd niet verder gekeken wat er achteraan nog stond. Sorteren op tekst is inderdaad niet goed. Het is aan de topicstarter om ook hier even over na te denken ;).
 
Shyaak Nana

Shyaak Nana

08/06/2010 23:31:47
Quote Anchor link
Beste Tom, bedankt voor het verwijderen van mijn wachtwoord. Stom en niet opgelet bij knippen en plakken van de script.

ik zal inderdaad wat veiligheid moeten inbouwen. maar nu ging het in ieder geval om het werkend te krijgen. Ik ga de wijzgingen doorvoeren en testen.

wat betreft ORDER BY 'naam' is om de resultaten op alfabetische volgorde te sorteren.

tot dusver bedankt. Nu is de set aan mij om het uit te testen.
 
Shyaak Nana

Shyaak Nana

08/06/2010 23:39:48
Quote Anchor link
Tom super bedankt voor je script. Hij doet het.
de volgende stap zal het inbouwen van veiligheid. ik zal eerst moetn uitzoeken hoe en wat ik daarvoor moet doen.

thnx
 



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.