if statement met sql query
Pagina: « vorige 1 2 3 volgende »
Thomas van den Heuvel op 23/06/2016 12:44:36:
Daarnaast opper ik de mogelijkheid om de zoekcriteria op verschillende manieren te behandelen: alles inclusief (met AND) of exclusief (met OR). In het eerste geval moeten alle argumenten voldoen, dat is een redelijk stricte match. In het tweede geval moet ten minste één criterium voldoen. Hiermee zoek je veel minder strict, maar is de kans dat je resultaten vindt groter (omdat simpelweg niet alle zoekcriteria hoeven te voldoen zoals in het eerste geval).
Je kunt dat ook mooi in de zoekresultaten tot uitdrukking laten komen: de AND staat bovenaan als best match, gevolgd door de resultaten bij een OR. Bespaart de gebruikers bovendien een Don't make me think-onderbreking als je zoeksysteem met minder opties toekan.
er zit een fout in de query volgens php:
Gewijzigd op 23/06/2016 13:05:35 door - Ariën -
Toevoeging op 23/06/2016 13:08:38:
@Arien. Heb nu ff alleen met Voornaam jou tip getest, en inderdaad het werkt.
Ik zal nu is kijken of het met alle query`s werkt.
Gewijzigd op 23/06/2016 13:05:42 door bart de kinkelaar
Sorry, maar het lijkt erop dat je bepaalde basisprincipes van PHP niet eigen bent (werking van if-elseif-else statement, aaneenrijgen van string middels een punt (.)). Je zou je dan af kunnen (moeten?) vragen of je al met databases in de weer moet gaan...
Bart de kinkelaar op 23/06/2016 13:05:20:
@Arien. Heb nu ff alleen met Voornaam jou tip getest, en inderdaad het werkt.
Ik zal nu is kijken of het met alle query`s werkt.
Ik zal nu is kijken of het met alle query`s werkt.
Als je er maar op let dat je met de $sql maar een werkende en juiste query eruit tovert. Je zult soms zo nu en dan wat fratsen moeten uithalen om AND of OR te gebruiken, of een WHERE of AND. Maar als je $sql echo'ed dan kan je elke situatie prima controleren op de juiste werking.
Een kwestie van experimenteren dus.
Een allerlaatste punt:
Waarom pakt hij nu alleen Voornaam en de rest niet?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
if(isset($_POST['zoek']))
{
$sql = "SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers ";
if(isset($_POST['Voornaam'])) {
$sql.= "WHERE Voornaam = '".$conn->real_escape_string($_POST['txtVnaam'])."' ";
}
if(isset($_POST['Achternaam'])) {
$sql.= "WHERE Achternaam = '".$conn->real_escape_string($_POST['txtAnaam'])."' ";
}
if(isset($_POST['Plaats'])) {
$sql.= "WHERE Plaats = '".$conn->real_escape_string($_POST['txtPlaats'])."' ";
}
$result = mysqli_query($conn,$sql) or die ("Error in query: $query. ".mysqli_error($conn));
if (mysqli_num_rows($result) > 0)
{
$sql = "SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers ";
if(isset($_POST['Voornaam'])) {
$sql.= "WHERE Voornaam = '".$conn->real_escape_string($_POST['txtVnaam'])."' ";
}
if(isset($_POST['Achternaam'])) {
$sql.= "WHERE Achternaam = '".$conn->real_escape_string($_POST['txtAnaam'])."' ";
}
if(isset($_POST['Plaats'])) {
$sql.= "WHERE Plaats = '".$conn->real_escape_string($_POST['txtPlaats'])."' ";
}
$result = mysqli_query($conn,$sql) or die ("Error in query: $query. ".mysqli_error($conn));
if (mysqli_num_rows($result) > 0)
Toevoeging op 23/06/2016 13:57:26:
Of ik de voornaam if of de achternaam if bovenaan zet heeft geen verschil. Ook in dat geval pakt hij alleen Voornaam en laat hij de tabel leeg bij de Achternaam if.
En verder raad ik (net als Thomas) aan om zoekopdrachten via GET uit te voeren.
Gewijzigd op 23/06/2016 13:58:48 door - Ariën -
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
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
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<table width="690" border="0">
<tbody>
<tr>
<td>Voorletters, Voornaam:</td>
<td><input type="text" name="txtVvg" id="txtVvg" style="width:75px;">
<input type="text" name="txtVnaam" id="txtVnaam" style="width:300px;"></td>
</tr>
<tr>
<td>Achternaam:</td>
<td><input type="text" name="Anaam" id="txtAnaam" style="width:383px;"></td>
</tr>
<tr>
<td>Straat, Huisnummer:</td>
<td><input type="text" name="Straat" id="txtStraat" style="width:300px;">
<input type="text" name="Huisnummer" id="txtHuisnummer" style="width:75px;"></td>
</tr>
<tr>
<td>Postcode:</td>
<td><input type="text" name="PCodeNummer" id="txtPcode" style="width:150px;"></td>
</tr>
<tr>
<td>Plaats:</td>
<td><input type="text" name="Plaats" id="txtPlaats" style="width:383px;"></td>
</tr>
<tr>
<td>Zoeken op:</td>
<td>
<input type="checkbox" name="Voornaam" value="Voornaam">Voornaam
<input type="checkbox" name="Achternaam" value="Achternaam">Achternaam
<input type="checkbox" name="Straat" value="Straat">Straat & huisnr
<input type="checkbox" name="Postcode" value="Postcode">Postcode
<input type="checkbox" name="Plaats" value="Plaats">Woonplaats
</td></tr></tbody>
</table>
<button onclick="TINY.box.show({url:'GebruikerToevoegen.php',width:1000,height:500})" class="toevoegenButton" id="add">Toevoegen</button>
<button onClick="clearFields()" class="leegButton">Leegmaken</button>
<button class="zoekButton" id="zoek" name="zoek">Zoeken</button>
</form><?php
if(isset($_POST['zoek']))
{
$sql = "SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers ";
if(isset($_POST['Achternaam'])) {
$sql.= "WHERE Achternaam = '".$conn->real_escape_string($_POST['txtAnaam'])."' ";
}
if(isset($_POST['Voornaam'])) {
$sql.= "AND Voornaam = '".$conn->real_escape_string($_POST['txtVnaam'])."' ";
}
$result = mysqli_query($conn,$sql) or die ("Error in query: $query. ".mysqli_error($conn));
if (mysqli_num_rows($result) > 0) {
echo "<div class='tabelle'><table height=100px width=700px>";
echo "<tr><td><center><b><i>Voornaam</center><i></b></td>";
echo "<td><center><b><i>Achternaam</center><i></b></td>";
echo "<td><center><b><i>Straat & Huisnr</center><i></b></td>";
echo "<td><center><b><i>Postcode</center><i></b></td>";
echo "<td><center><b><i>Plaats</center><i></b></td>";
echo "</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td style='background-color:#dee1e1' width='150px'><h5><b><center>" . $row['Voornaam'] . "</center></b></h4</td>";
echo "<td style='background-color:#dee1e1' width='150px'><h5><b><center>" . $row['Achternaam'] . "</center></b></h4</td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Straat'] . "</center></b></h4></td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Postcode'] . "</center></b></h4></td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Plaats'] . "</center></b></h4></td>";
echo "<br></tr>";
}
echo "</table></div><br>";
}
else {
echo "De persoon die u zoekt is niet gevonden.";
}
$conn->close();
} ?>
<table width="690" border="0">
<tbody>
<tr>
<td>Voorletters, Voornaam:</td>
<td><input type="text" name="txtVvg" id="txtVvg" style="width:75px;">
<input type="text" name="txtVnaam" id="txtVnaam" style="width:300px;"></td>
</tr>
<tr>
<td>Achternaam:</td>
<td><input type="text" name="Anaam" id="txtAnaam" style="width:383px;"></td>
</tr>
<tr>
<td>Straat, Huisnummer:</td>
<td><input type="text" name="Straat" id="txtStraat" style="width:300px;">
<input type="text" name="Huisnummer" id="txtHuisnummer" style="width:75px;"></td>
</tr>
<tr>
<td>Postcode:</td>
<td><input type="text" name="PCodeNummer" id="txtPcode" style="width:150px;"></td>
</tr>
<tr>
<td>Plaats:</td>
<td><input type="text" name="Plaats" id="txtPlaats" style="width:383px;"></td>
</tr>
<tr>
<td>Zoeken op:</td>
<td>
<input type="checkbox" name="Voornaam" value="Voornaam">Voornaam
<input type="checkbox" name="Achternaam" value="Achternaam">Achternaam
<input type="checkbox" name="Straat" value="Straat">Straat & huisnr
<input type="checkbox" name="Postcode" value="Postcode">Postcode
<input type="checkbox" name="Plaats" value="Plaats">Woonplaats
</td></tr></tbody>
</table>
<button onclick="TINY.box.show({url:'GebruikerToevoegen.php',width:1000,height:500})" class="toevoegenButton" id="add">Toevoegen</button>
<button onClick="clearFields()" class="leegButton">Leegmaken</button>
<button class="zoekButton" id="zoek" name="zoek">Zoeken</button>
</form><?php
if(isset($_POST['zoek']))
{
$sql = "SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers ";
if(isset($_POST['Achternaam'])) {
$sql.= "WHERE Achternaam = '".$conn->real_escape_string($_POST['txtAnaam'])."' ";
}
if(isset($_POST['Voornaam'])) {
$sql.= "AND Voornaam = '".$conn->real_escape_string($_POST['txtVnaam'])."' ";
}
$result = mysqli_query($conn,$sql) or die ("Error in query: $query. ".mysqli_error($conn));
if (mysqli_num_rows($result) > 0) {
echo "<div class='tabelle'><table height=100px width=700px>";
echo "<tr><td><center><b><i>Voornaam</center><i></b></td>";
echo "<td><center><b><i>Achternaam</center><i></b></td>";
echo "<td><center><b><i>Straat & Huisnr</center><i></b></td>";
echo "<td><center><b><i>Postcode</center><i></b></td>";
echo "<td><center><b><i>Plaats</center><i></b></td>";
echo "</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td style='background-color:#dee1e1' width='150px'><h5><b><center>" . $row['Voornaam'] . "</center></b></h4</td>";
echo "<td style='background-color:#dee1e1' width='150px'><h5><b><center>" . $row['Achternaam'] . "</center></b></h4</td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Straat'] . "</center></b></h4></td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Postcode'] . "</center></b></h4></td>";
echo "<td style='background-color:#dee1e1' width='125px'><h5><b><center>" . $row['Plaats'] . "</center></b></h4></td>";
echo "<br></tr>";
}
echo "</table></div><br>";
}
else {
echo "De persoon die u zoekt is niet gevonden.";
}
$conn->close();
} ?>
Met deze query en code laat hij uberhaupt helemaal geen tabel meer zien (vooral nadat ik m aanpaste van post naar get). Daarnaast, zou ik where in de basissql zetten en andere querys daarop aaanpassen, het veranderd niks aan het weergeven vd tabel
Gewijzigd op 23/06/2016 14:06:18 door bart de kinkelaar
Je gebruik GET in je method, maar je gebruikt nog wel de $_POST variabelen.
Normaal gesproken had ik zulke dingen wel gezien, maar vandaag blijkbaar niet echt.
Toevoeging op 23/06/2016 14:13:07:
Toch blijf ik het opvallend vinden dat hij bij voornaam, wel de informatie weergeeft in de tabel, maar bij achternaam hij de tabel weergeeft maar leeglaat.
Toevoeging op 23/06/2016 14:14:04:
Bart de kinkelaar op 23/06/2016 14:08:49:
Toch blijf ik het opvallend vinden dat hij bij voornaam, wel de informatie weergeeft in de tabel, maar bij achternaam hij de tabel weergeeft maar leeglaat.
Echo je SQL eens. Misschien geeft dat meer duidelijkheid over je query. Die moet immers precies opgebouwd worden aan de hand van de ingevoerde gegevens.
Gewijzigd op 23/06/2016 14:14:46 door - Ariën -
Althans, in het geval met 2x where. Met 1x where bij voornaam en and bij achternaam geeft hij bij achternaam een error. Wat mij wel logisch lijkt aangezien je niet kunt zeggen "From gebruikers AND ... (de sql van Achternaam)"
Als je je $sql eens uitleest, dan weet je precies wat er fout gaat.
bij voornaam.
Bij achternaam:
SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers WHERE Achternaam = ''
Oha! Eens ff kijken waarom hij het invulveld niet pakt.
Geef $sql eens weer op je scherm. Maak zaken voor jezelf inzichtelijk. Zo zou je ook $_POST (en $_GET als je hier inmiddels naar overgestapt bent) kunnen dumpen.
Dat is allemaal informatie die van invloed is op (sterker nog: rechtstreeks) de opbouw van je query (bepaalt).
Gewijzigd op 23/06/2016 14:21:32 door Thomas van den Heuvel
Had bij Voornaam, name="txtVnaam" en id="txtVnaam" meegegeven.
En bij achternaam alleen id="txtAnaam" en name was daar "Anaam"...
En ja hoor. Nu werkt het gewoon... :)
Toevoeging op 23/06/2016 14:24:33:
Goede tip Thomas & Arien. Tot zover werkt het wat moet werken.
Ik heb nu een script waarmee je afbeeldingen uit db haalt.
Maar die afbeelding wil ik in een tabel met persoonsgegevens zetten als pasfoto/contactfoto.
Het script van afbeelding uit db halen:
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
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
<?php
if(filter_has_var(INPUT_GET, "id") !== false && filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) !== false)
{
/*** assign the image id ***/
$id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);
try {
/*** connect to the database ***/
$dbh = new PDO("mysql:host=localhost;dbname=phpopdracht", 'root', '');
/*** set the PDO error mode to exception ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*** The sql statement ***/
$sql = "SELECT image, image_type FROM afbeeldingen WHERE id=$id";
/*** prepare the sql ***/
$stmt = $dbh->prepare($sql);
/*** exceute the query ***/
$stmt->execute();
/*** set the fetch mode to associative array ***/
$stmt->setFetchMode(PDO::FETCH_ASSOC);
/*** set the header for the image ***/
$array = $stmt->fetch();
/*** check we have a single image and type ***/
if(sizeof($array) == 2)
{
/*** set the headers and display the image ***/
header("Content-type: ".$array['image_type']);
/*** output the image ***/
echo $array['image'];
}
else
{
throw new Exception("Out of bounds Error");
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
else
{
echo 'Please input correct Image ID';
}
?>
if(filter_has_var(INPUT_GET, "id") !== false && filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT) !== false)
{
/*** assign the image id ***/
$id = filter_input(INPUT_GET, "id", FILTER_SANITIZE_NUMBER_INT);
try {
/*** connect to the database ***/
$dbh = new PDO("mysql:host=localhost;dbname=phpopdracht", 'root', '');
/*** set the PDO error mode to exception ***/
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*** The sql statement ***/
$sql = "SELECT image, image_type FROM afbeeldingen WHERE id=$id";
/*** prepare the sql ***/
$stmt = $dbh->prepare($sql);
/*** exceute the query ***/
$stmt->execute();
/*** set the fetch mode to associative array ***/
$stmt->setFetchMode(PDO::FETCH_ASSOC);
/*** set the header for the image ***/
$array = $stmt->fetch();
/*** check we have a single image and type ***/
if(sizeof($array) == 2)
{
/*** set the headers and display the image ***/
header("Content-type: ".$array['image_type']);
/*** output the image ***/
echo $array['image'];
}
else
{
throw new Exception("Out of bounds Error");
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
catch(Exception $e)
{
echo $e->getMessage();
}
}
else
{
echo 'Please input correct Image ID';
}
?>
De code van het formulier
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
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
<center><?php
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
// getting info from db
}
error_reporting(E_ALL);
?> <title>Profiel - Adresboek</title>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</head>
<style>
td {height:30px;}
</style>
<h2>Profiel</h2>
<?php include 'config.php'?><?php
$display = include 'display_image.php';
// create query
$query = "SELECT * from gebruikers where id = $id";
// execute query
$result = mysqli_query($con,$query) or die ("Error in query: $query. ".mysqli_error());
// see if any rows were returned
if (mysqli_num_rows($result) > 0) {
// yes
// print them one after another
echo "<table border=1 height=100px width=500px>";
while($row = mysqli_fetch_array($result)) {
echo "<td><b><center>". $display. "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Voornaam'] . "</center></b></td>";
echo "<td><b><center>" . $row['Leeftijd'] . " Jaar</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Achternaam'] . "</center></b></td><br>";
echo "<td rowspan=4><b><center>" . $row['Opmerking'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Straat'] . " " . $row['Huisnummer'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Postcode'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Plaats'] . "</center></b></td>";
echo "</tr><tr>";
echo "</tr>";
}
echo "</table>";
}
else {
// no
// print status message
echo "No rows found!";
}
// free result set memory
mysqli_free_result($result);
?>
<p></p>
<div class="container">
<div class="btn-group-vertical">
<a class="btn btn-primary" href="" role="button">Terug naar de homepagina</a>
</div>
</div><?php
mysqli_close($con);
?>
if(isset($_GET['id']))
{
$id = intval($_GET['id']);
// getting info from db
}
error_reporting(E_ALL);
?> <title>Profiel - Adresboek</title>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</head>
<style>
td {height:30px;}
</style>
<h2>Profiel</h2>
<?php include 'config.php'?><?php
$display = include 'display_image.php';
// create query
$query = "SELECT * from gebruikers where id = $id";
// execute query
$result = mysqli_query($con,$query) or die ("Error in query: $query. ".mysqli_error());
// see if any rows were returned
if (mysqli_num_rows($result) > 0) {
// yes
// print them one after another
echo "<table border=1 height=100px width=500px>";
while($row = mysqli_fetch_array($result)) {
echo "<td><b><center>". $display. "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Voornaam'] . "</center></b></td>";
echo "<td><b><center>" . $row['Leeftijd'] . " Jaar</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Achternaam'] . "</center></b></td><br>";
echo "<td rowspan=4><b><center>" . $row['Opmerking'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Straat'] . " " . $row['Huisnummer'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Postcode'] . "</center></b></td>";
echo "</tr><tr>";
echo "<td><b><center>" . $row['Plaats'] . "</center></b></td>";
echo "</tr><tr>";
echo "</tr>";
}
echo "</table>";
}
else {
// no
// print status message
echo "No rows found!";
}
// free result set memory
mysqli_free_result($result);
?>
<p></p>
<div class="container">
<div class="btn-group-vertical">
<a class="btn btn-primary" href="" role="button">Terug naar de homepagina</a>
</div>
</div><?php
mysqli_close($con);
?>
Daar gaat het mis, aan het script te zien poept display_image.php gewoon een plaatje uit, waardoor je dit gewoon in eem img tag moet gebruiken, bijvoorbeeld als volgt:
<img src="display_image.php?id=1">
Dan nog komen er allemaal vage tekens, ipv de afbeelding.
Toevoeging op 24/06/2016 19:08:20:
De afbeelding staat er uiteindelijk wel, maar onder tientallen rijen met vage tekens..