Hallo,
In onderstaande wordt een rij wel of niet getoond met show = Ja/Nee
als ik echter een plaats kies worden ook de rijen met show = Nee getoond,
kan ik een soort van prioriteit (priority?) geven aan WHERE `show` = 'Ja'
$query = $mysqli->query("
SELECT *
FROM $db
WHERE (`show` = 'Ja' )
AND YEAR(`datum`) = '".addslashes($year)."'
OR `plaats` = '".addslashes($plaats)."'
ORDER BY id DESC
");
backtics , schijnen meningen ook verdeeld over te verschillen.
Maar kan goed zijn dat ze hier niet nodig zijn.
Is ergens een goede tut te vinden hierover ,, veiligheid enz..
Ik ben benieuwd naar de tut waar je het over hebt. Deze backtics worden doorgaans copy/paste meegenomen uit phpadmin, helaas. Je kan er inderdaad reserved words zoals SHOW gaan misbruiken in attributen en tabellen maar of het verstandig is betwijfel ik. Kan alleen maar verwarring over ontstaan. Gewoon niet doen.
Backtics , Het kan goed zijn dat ze hier niet nodig zijn.
Ik heb ooit eens een probleem gehad , en iemand adviseerde me de backtics te gebruiken,
had iets te maken met tekst in een record precies weet ik het niet meer , maar werkte wel.
Ben ze dus blijven gebruiken.
Show verander ik in Display, advies heb ik hier al eens in het verleden gekregen.
Wat tut betreft bedoelde ik een goede tutorial over toepassen van veiligheid , juist toepassen van mysqli_escape_string enz.
$query = $mysqli->query("
SELECT *
FROM $db
WHERE (`show` = 'Ja' )
AND YEAR(`datum`) = '".addslashes($year)."'
OR `plaats` = '".addslashes($plaats)."'
ORDER BY id DESC
");
Dit is slechte naamgeving. $db is namelijk geen database maar een tabel. En inderdaad, maak van een boolean kolom ook echt een BOOL (of TINYINT of wat dan ook). Alsjeblieft geen ENUM, dat is echt bagger because reasons. Vermijd het gebruik van een mix van engelse en nederlandse woorden door elkaar. Dit is gewoon terribly verwarrend.
Daarnaast zou je het gereserveerde-woorden-dilemma kunnen omzeilen door kolommen een vaste prefix te geven (hiermee voorkom je ook alias-issues indien je een query hebt waarin je verschillende tabellen joined waarin kolommen met eenzelfde naam zitten, door een prefix worden alle kolomnamen uniek). Als je bijvoorbeeld te maken hebt met een tabel van artikelen zou je de kolom art_show kunnen noemen (prefix art_). Zelden tot nooit meer problemen met gereserveerde woorden.
En tot slot. Introduceer eens wat abstractie in een databaselaag. Maak een eenvoudige database-klasse die je werk uit handen neemt. Zo zou je bijvoorbeeld een methode "escape" kunnen introduceren, met als eerste implementatie:
<?php
class MyDb
{
protected $db; // refers to db-object
// ...
public function escape($in) {
return addslashes($in);
}
}
?>
En dan, als je later beseft dat deze beveiliging toch een wassen neus is verander je deze in:
<?php
class MyDb
{
protected $db; // refers to db-object
// ...
public function escape($in) {
return $db->real_escape_string($in);
}
}
?>
De toegevoegde waarde is onder andere dat je voor een andere implementatie geen letter code tijdens communicatie met je database hoeft aan te passen. Dit was voorheen $myDb->escape($whatever) (waarbij $myDb een object van de klasse MyDb is) en is na de aanpassing nog steeds $myDb->escape($whatever), ongeacht de implementatie. Dat lijkt mij beter dan in je code addslashes()-instanties te search-and-replacen... of in het algemeen, elke keer zo'n operatie uitvoeren als je een slimmere/veiligere implementatie verzint.