Det jag inte kan lyckas klura ut är hur jag ska få in "AND" i satsen till detta på mest effektiva sätt.
Variablerna skall endast vara med i satsen om de har ett annat värde än null. ($cost har alltid ett värde, och $comment kommer alltid med, men antingen som &comment= eller &comment=kommentar&next_var)
Hoppas ni förstår hur jag menar och att någon har lust att vägleda mig mot lösningen. (Gärna genom ett enklare exempel. En färdig lösning vore förståss praktiskt, men det lär jag mig inget av).
$arr = array();
if (isset($_GET['active']))
{
$arr[] = "active = '{$_GET['active']}'";
}
//Likadant för resten sen också
$sqlbuild = implode(' AND ', $arr);
Borde ge dig lite idéer iallafall. Går att lösa snyggare, men då ska man ändra lite i hur du skickar datat.
Jag lyckades dock lösa det hela efter ett tag.. och upptäckte att AND ska förståss bytas ut mot ett komma.. så nu äntligen funkar det.. sen blir det nog till att läsa på lite mer om arrays.. :)
För det första. Glöm aldrig, aldrig, att städa det inkommande datat med mysql_real_escape_string eller på annat vis. Även om du bara förväntar dig nuffror i det fältet.
Jag utökade Gildebrands exempel så det blev lite mer generellt. (Mindre copy-paste om du vill lägga till fält att kolla efter.)
$ID = mysql_real_escape_string($_GET['ID']); // ID att använda för uppdatering av tabell ("WHERE ID='$ID'")
$cost = mysql_real_escape_string($_GET['cost']);
$comment = mysql_real_escape_string($_GET['comment']);
// Definiera sökbara kolumner
$check_columns=array('active', 'restrict', 'spam', 'admin');
// Array för att lagra deluttrycken
$arr = array();
// Gå igenom de definierade kolumnerna
foreach($check_columns as $column){
// Om namnet finns med i $_GET...
if (isset($_GET[$column])){
// Skrubba det rent och skapa ett deluttryck.
$value = mysql_real_escape_string($_GET[$column]);
$arr[] = "${column} = '${value}'";
}
}
// Slå ihop delarna
$set = implode(' AND ', $arr);
Lite snyggare det där ::)
Oavsett vilket exempel du går på, så måste du escapea din data. En grundläggande regel, all data som kommer från användaren ska escapeas.
Vart fundersam på följande bit:
${column}
Varför {} ?
Det använder man ju bara om det är ett array. Funkar det ens att skriva så där?
Varför {} ?
Det använder man ju bara om det är ett array. Funkar det ens att skriva så där?
Man kan alltid använda den formen. Just i detta fall är det inte nödvändigt, men jag har gjort det till en vana. Jag tycker också att koden blir mer läsbar på det viset. Sen är det inte bara när man ska hålla på med arrayer som den syntaxen krävs, utan även t ex om du vill ha alfanumeriska tecken direkt efter ett variabeluttryck (utan att behöva avsluta stränguttrycket då...) Annars kommer ju resten av tecknen att tolkas som en del av variabelnamnet, som då kommer peka till en variabel som troligen inte ens finns.
257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2