[PHP+Oracle] Zoeken met PHP in Oracle

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo mensen,

Hier bij ons op het werk is verzoek ingediend voor een zoekpagina die kan zoeken in een Oracle database. Nu ben ik als systeembeheerder niet helemaal thuis in PHP. En al helemaal niet in combinatie met Oracle. Daarom vraag ik jullie om hulp.

Wat moet dit formulier kunnen?

Zoeken op exacte waarden (er mag dus niet zomaar wat uitrollen als je niet waarden invult die niet in database voorkomen.)

Zoeken op verschillende waarden. Bijvoorbeeld zoeken op postcode en huisnummer of op Naam.

Oracle database opbouw



NaamPostcodeGeboorte datumPersoonlijk nummer


Code die ik al heb



zoek formulier
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
include('adodb/adodb.inc.php');
include('adodb/adodb-errorpear.inc.php');
$server = '*******';
$user = '*******';
$db = ADONewConnection('oci8');

$db->Connect($server, $user, '*******', '*******');


//html formulier maken
echo 
'<html>
 <FORM method="post" action="zoeken_resultaat.php">
 Postcode: <input name="pc" size="30"><br>
 Huisnummer: <input name="hn" size="30"><br>
 <input type="submit" value="Zoek" />
 </FORM>
 </html>';

?>


Uitkomst van zoeken
[code=php]
<?php
include('adodb/adodb.inc.php');
include('adodb/adodb-errorpear.inc.php');
$server = '*******';
$user = '*******';
$db = ADONewConnection('oci8');

$db->Connect($server, $user, '*******', '*******');

//strings aanmaken
$pc=$_POST["pc"];
$hn=$_POST["hn"];


//sql query aanmaken
$sql_pc =
"SELECT *
FROM Gebruikers
WHERE Postcode= '".$pc."'
AND Huisnummer= '".$hn."'";

$res_pc = $db->query($sql_pc);

if ($pc=! "" && $hn=! "")
{
foreach($res_pc as $row_pc)
{
echo "<strong>Naam:</strong> ".$row_pc['Gebruikers']."<br>";
echo "<strong>Straat:</strong> ".$row_pc['Straat']." ".$row_pc['Huisnummer']."<br>";
echo "<strong>Postcode:</strong> ".$row_pc['Postcode']."<br><br>";
}
}else{
echo "niets ingevuld";
};
?>
[/code=php]




Nu heb ik al een 2 regels waar ik gecombineerd op postcode en huisnummer kan zoeken.

Ok dan nu mijn vragen:

- Hoe kan ik makkelijk "kiezen" op de manier hoe ik zoek? Kan dit in 1 formulier?
- Hoe kan ik makkelijk nog meer zoek criteria opgeven? Moet ik hiervoor een nieuw formulier maken waar ik bijvoorbeeld kan zoeken op persoonlijk nummer?

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
- je zou je query kunnen uitbreiden wanneer een bepaald veld ingevuld is
dus bv iets zoals if ($_POST[xxxx]) $query .= '....';
- denk aan SQL Injecties !

[ Voor 21% gewijzigd door webinn op 10-04-2012 08:48 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
webinn schreef op dinsdag 10 april 2012 @ 08:47:
- je zou je query kunnen uitbreiden wanneer een bepaald veld ingevuld is
dus bv iets zoals if ($_POST[xxxx]) $query .= '....';
- denk aan SQL Injecties !
SQL injecties ben ik me van bewust. Dit stukje code heb ik in elkaar gezet puur voor de opzet. :)

En kun je misschien een voorbeeldje geven van wat je voorstelde? Moet dit binnen dezelfde if - else functie?

Acties:
  • 0 Henk 'm!

  • webinn
  • Registratie: Oktober 2002
  • Laatst online: 06-06 12:44
Verwijderd schreef op dinsdag 10 april 2012 @ 08:52:
[...]


SQL injecties ben ik me van bewust. Dit stukje code heb ik in elkaar gezet puur voor de opzet. :)

En kun je misschien een voorbeeldje geven van wat je voorstelde? Moet dit binnen dezelfde if - else functie?
Ik schud even iets uit m'n mouw...

Stel je hebt een form met daarin de velden A, B, C, D ...

Dan zou je iets kunnen schrijven als volgt:

PHP:
1
2
3
4
5
6
7
8
9
if ($_POST[A]) $queryarray[] = "A = '".$_POST[A]."'";    // Veld A is ingevuld
if ($_POST[B]) $queryarray[] = "B = '".$_POST[B]."'";    // Veld B is ingevuld 
if ($_POST[C]) $queryarray[] = "C = '".$_POST[C]."'";    // ...
if ($_POST[D]) $queryarray[] = "D = '".$_POST[D]."'";
// + hou rekening met injecties!

$query = "SELECT *  
FROM Gebruikers 
WHERE ".implode(' AND ', $queryarray);      // Plak alle ingevulde velden aan elkaar met AND


Er zijn natuurlijk nog andere opties ook, je zou bv je gebruikers kunnen laten selecteren tussen AND en OR. Of je zou bv sommige velden verplicht en andere weer niet kunnen maken...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat had inderdaad ook gekund. Ik heb ondertussen dit in elkaar geknutseld.

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
//strings aanmaken
$pc=$_POST["pc"];
$hn=$_POST["hn"];
$naam=$_POST["naam"];
$nummer=$_POST["nummer"];

//sql queries aanmaken
if ($pc ==! NULL && $hn==! NULL)
{
$sql_pc =  
"SELECT * 
FROM gebruikers
WHERE postcode = '".$pc."' 
AND huisnummer = '".$hn."'"; 
}elseif ($naam==! NULL) {
$sql_naam =
"SELECT * 
FROM gebruikers
WHERE naam = '".$naam."'
OR naam2 = '".$naam."'";
}elseif ($nummer==! NULL) {
$sql_bsn =
"SELECT * 
FROM gebruikers
WHERE nummer= '".$nummer."'";
};



//sql queries uitvoeren
if ($pc ==! NULL && $hn == NULL)
{
echo 'Huisnummer niet ingevuld<br>Als u wilt zoeken op postcode en huisnummer beide invullen.';
}elseif ($pc == NULL && $hn ==! NULL)
{
echo 'Postcode niet ingevuld<br>Als u wilt zoeken op postcode en huisnummer beide invullen.';
}elseif ($pc ==! NULL && $hn==! NULL)
{
$res_pc = $db ->query($sql_pc);
foreach($res_pc as $row_pc) 
   { 
echo "<TABLE BORDER='1'>
<TR>
<TD WIDTH='300'><b>Naam</b></TD>
<TD WIDTH='250'><b>Straat en huisnummer</b></TD>
<TD WIDTH='60'><b>Postcode</b></TD>
</TR>
<TR>
<TD>".$row_pc['naam']."</TD>
<TD>".$row_pc['straatnaam']." ".$row_pc['huisnummer']."</TD>
<TD>".$row_pc['postcode']."</TD>
</TR>
</TABLE><br>";
    }
}elseif ($naam==! NULL) 
{
$res_naam = $db ->query($sql_naam);
foreach($res_naam as $row_naam) 
   { 
    echo "<strong>Naam:</strong>  ".$row_naam['naam']."<br>";
    echo "<strong>Straat:</strong> ".$row_naam['straatnaam']." ".$row_naam['huisnummer']."<br>";
    echo "<strong>Postcode:</strong> ".$row_naam['postcode']."<br><br>";
   }
} elseif ($bsn==! NULL) 
{
$res_bsn = $db ->query($sql_bsn);
foreach($res_bsn as $row_bsn) 
   { 
    echo "<strong>Naam:</strong>  ".$row_bsn['naam']."<br>";
    echo "<strong>Straat:</strong> ".$row_bsn['straatnaam']." ".$row_bsn['huisnummer']."<br>";
    echo "<strong>Postcode:</strong> ".$row_bsn['postcode']."<br><br>";
   }   
}else{
echo 'Niets ingevuld';
}



Lijkt dit ergens op of is dit een :F ?

Acties:
  • 0 Henk 'm!

  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

Ruwweg 65 regels niet te lezen en niet te onderhouden code tegenover 9 overzichtelijke regels? ;-)

Natuurlijk zie ik dat jij nog een beetje user error afvang en het uitpoepen verzorgt, maar verder doet het niet zo heel veel meer volgens mij. Ik zou nog even kritisch naar de code van webinn kijken als ik jou was, die lijkt me een heel stuk flexibeler! :-)

[ Voor 9% gewijzigd door Wokkels op 10-04-2012 11:02 ]

Permanent wintericon!

Pagina: 1