if statement met sql query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Ward van der Put
Moderator

Ward van der Put

23/06/2016 13:01:33
Quote Anchor link
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.
 
PHP hulp

PHP hulp

27/04/2024 21:44:35
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 13:04:17
Quote Anchor link
Ben nog niet helemaal wakker merk ik. De error is in ieder geval weg.

er zit een fout in de query volgens php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if(isset($_POST['Postcode'])) {
    $sql.= " WHERE Postcode = '".$conn->real_escape_string($_POST['Postcode'])."' ";
}
if(isset($_POST['Plaats'])) {
    $sql.= "WHERE Plaats = '".$conn->real_escape_string($_POST['Plaats'])."' ";
}
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 13:05:18
Quote Anchor link
De spatie voor de WHERE? Ik zou die spatie bij voorkeur aan het eind van je basis-query plaatsen.
Gewijzigd op 23/06/2016 13:05:35 door - Ariën -
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 13:05:20
Quote Anchor link
@Ward, opzich ook wel een goede, zie het bericht van je nu pas, maar ik denk dat ik er met deze vorm van het gebruik van ifs en query's ook voldoende uit kom.

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
 
Thomas van den Heuvel

Thomas van den Heuvel

23/06/2016 13:27:53
Quote Anchor link
In mijn voorbeeld staat maar op 1 plaats een WHERE. In bovenstaande code wordt de query-string opgebouwd met hierin elke keer een WHERE-clause. Dit levert een incorrect SELECT-statement op elke keer dat je met meer dan 1 argument zoekt...

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...
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 13:32:33
Quote Anchor link
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.

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.
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 13:51:07
Quote Anchor link
Thomas, ifs begrijp ik wel, het is meer de combi met een sql query.
Een allerlaatste punt:
Waarom pakt hij nu alleen Voornaam en de rest niet?
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
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)


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.
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 13:58:09
Quote Anchor link
Dat is dus wat ik zei in mijn vorige post. Je moet je query wel correct houden, want je kan maar één keer WHERE gebruiken, en daarna gebruik je steeds een AND.

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 -
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 14:05:34
Quote Anchor link
er is iets goed mis met de hele code. Als ik m aanpas naar get doet hij uberhaupt zowat niks.
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
<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();
}
?>


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
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 14:07:56
Quote Anchor link
Je gebruik GET in je method, maar je gebruikt nog wel de $_POST variabelen.
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 14:08:49
Quote Anchor link
Ik ben totaal niet wakker vandaag.
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.
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 14:13:15
Quote Anchor link
Afbeelding


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 -
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 14:14:28
Quote Anchor link
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)"
 
- Ariën  -
Beheerder

- Ariën -

23/06/2016 14:15:41
Quote Anchor link
Als je je $sql eens uitleest, dan weet je precies wat er fout gaat.
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 14:19:53
Quote Anchor link
SELECT Voornaam, Voorvoegsels, Achternaam, Straat, Huisnummer, Postcode, Plaats FROM gebruikers WHERE Voornaam = 'Bart'
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

23/06/2016 14:20:53
Quote Anchor link
^ what he said.

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
 
Bart de kinkelaar

bart de kinkelaar

23/06/2016 14:23:40
Quote Anchor link
Hmm.
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.
 
Bart de kinkelaar

bart de kinkelaar

24/06/2016 18:17:52
Quote Anchor link
Toch nog een vraag, maar een totaal andere.
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)
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
<?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';
 }

?>


De code van het formulier
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
    <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);
?>
 
Ben van Velzen

Ben van Velzen

24/06/2016 18:31:42
Quote Anchor link
$display = include 'display_image.php';
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">
 
Bart de kinkelaar

bart de kinkelaar

24/06/2016 19:06:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<td><b><center><img src='display_image.php?id=$id'></center></b></td>


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..
 

Pagina: « vorige 1 2 3 volgende »



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.