Door
bart de kinkelaar
op 20-06-2016 09:20
gewijzigd op 20-06-2016 09:21
20.070 views
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>
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.
@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...
@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.
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.
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