Ik ben bezig met een formulier, waarbij je op basis van gegevens uit de database naar een bepaalde pagina word gestuurd.
Staat er in de database dat je een Gebruiker bent, dan ga je naar gebruiker.php?...
ben je volgens de database een Medewerker, dan ga je naar admin.php

De volgende code heb ik geprobeerd met eerst alleen een check of je gebruiker bent, zonder succes:


<?php
session_start(); // Start a new session
if(isset($_GET['Medewerkerscode']))
{ 
  $ID = intval($_GET['Medewerkerscode']);
  // getting info from db
}
?>
<?php
if(isset($_GET['Gebruikersnaam']))
{ 
  $username = $_GET['Gebruikersnaam'];
  // getting info from db
}?><?php
                        
$con=mysqli_connect("-t");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
// Get the data passed from the form
$username = $_POST['Gebruikersnaam'];
$password = $_POST['Wachtwoord'];

// escape variables for security
$username = mysqli_real_escape_string($con, $_POST['Gebruikersnaam']);
$password = mysqli_real_escape_string($con, $_POST['Wachtwoord']); 
$ID = mysqli_real_escape_string($con, $_POST['Medewerkerscode']); 

$sql = "select * FROM gebruikers WHERE Gebruikersnaam = '$username' and id = '$ID' and Wachtwoord = '$password'";

$result = mysqli_query($con, $sql) or die ( mysql_error() );

$nrOfRows = mysqli_num_rows($result);
if ($nrOfRows > 0)
{
	if(mysqli_query("SELECT Functie FROM gebruikers WHERE Functie = 'Medewerker'")){
    $_SESSION['Inloggen'] = "true";
    header("Location:admin.php?id=" . $row['Medewerkerscode'] . "&&Gebruikersnaam=" . $row['Gebruikersnaam'] . "&&Wachtwoord=" . $row['Wachtwoord'] . "");
}
}
else
{
    echo "Het inloggen is mislukt.";
}
mysqli_close($con);
?></body></html>
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.

Ben nog niet helemaal wakker merk ik. De error is in ieder geval weg.

er zit een fout in de query volgens php:

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'])."' ";
}
De spatie voor de WHERE? Ik zou die spatie bij voorkeur aan het eind van je basis-query plaatsen.
@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.

[size=xsmall]Toevoeging op 23/06/2016 13:08:38:[/size]

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

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) 


[size=xsmall]Toevoeging op 23/06/2016 13:57:26:[/size]

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.
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.
er is iets goed mis met de hele code. Als ik m aanpas naar get doet hij uberhaupt zowat niks.

<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
Je gebruik GET in je method, maar je gebruikt nog wel de $_POST variabelen.

Reageren