En fråga om php if-statement
4 inlägg
• Sida 1 av 1
En fråga om php if-statement
Jag sitter och knåpar lite lätt på ett php skript för skojs skull och har en fråga om if statements.
Kan man köra följande:
Kan man köra följande:
- Kod: Markera allt
if (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) == TRUE
En fråga om php if-statement
Jag kan inte PHP, men är helt övertygad om att koden ovan innehåller ett syntax-fel då parenteserna är inte balanserade. Vidare är det sannolikt helt meningslöst och förvirrande att jämföra med TRUE - om uttrycket på vänster sida redan är ett logiskt värde är jämförelsen överflödig och om det inte är det så innebär jämförelsen ett typ-fel...
Vi får väl läsa referensmanualen:
Vi får väl läsa referensmanualen:
tolkar jag som att att jämförelsen aldrig kan bli sann, men jag kan som sagt inte PHP... kan den konvertera godtyckliga strängar (för det är väl vad filter_var ska operera på och därmed returnera i det första fallet) till logiska sanningsvärden?http://php.net/manual/en/function.filter-var.php skrev:Return Values
Returns the filtered data, or FALSE if the filter fails.
En fråga om php if-statement
Helt rätt! Det är ett syntaxfel, då det ska vara
Jag vill gärna av säkerhetsskäl kontrollera att en variabel utan problem faktiskt kan filtreras, istället för att utgå ifrån att filtreringen sker och att det sedan kan finnas tecken som kan orsaka SQL injektion.
if (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) == TRUE)
Jag vill gärna av säkerhetsskäl kontrollera att en variabel utan problem faktiskt kan filtreras, istället för att utgå ifrån att filtreringen sker och att det sedan kan finnas tecken som kan orsaka SQL injektion.
En fråga om php if-statement
nallen skrev:Jag kan inte PHP, men är helt övertygad om att koden ovan innehåller ett syntax-fel då parenteserna är inte balanserade. Vidare är det sannolikt helt meningslöst och förvirrande att jämföra med TRUE - om uttrycket på vänster sida redan är ett logiskt värde är jämförelsen överflödig och om det inte är det så innebär jämförelsen ett typ-fel...
Vi får väl läsa referensmanualen:tolkar jag som att att jämförelsen aldrig kan bli sann, men jag kan som sagt inte PHP... kan den konvertera godtyckliga strängar (för det är väl vad filter_var ska operera på och därmed returnera i det första fallet) till logiska sanningsvärden?http://php.net/manual/en/function.filter-var.php skrev:Return Values
Returns the filtered data, or FALSE if the filter fails.
Du har rätt
- Kod: Markera allt
if (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) )
Eftersom du inte kan PHP så är det svårt att förstå sig på all magi som händer i PHP Alla strängar == true, till och med "false" == true är true. Men "string" === true är false. Men det finns ett undantag! "0" == true är false
artifex skrev:Helt rätt! Det är ett syntaxfel, då det ska varaif (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) == TRUE)
Jag vill gärna av säkerhetsskäl kontrollera att en variabel utan problem faktiskt kan filtreras, istället för att utgå ifrån att filtreringen sker och att det sedan kan finnas tecken som kan orsaka SQL injektion.
Det är dock ett väldigt dåligt sätt att hantera mailadresser på. Du bör använda FILTER_VALIDATE_EMAIL och ge användaren ett felmeddelande istället för FILTER_SANITIZE_EMAIL som ofta kommer leda till att du får en felaktiga mailadresser lagrande eftersom att den modifierar adresserna.
Om du gör vad jag tror du gör så är det något liknande:
- Kod: Markera allt
if (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) == TRUE) {
...
INSERT INTO stuff(mail) VALUES($array_variabel[0])
...
}
Vilket inte gör ett skit eftersom att $array_variable[0] fortfarande kan innehålla precis vad som helst. Ska det bli någorlunda rätt måste du köra med
- Kod: Markera allt
if (filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL) == TRUE) {
...
$sanitizedMail = filter_var($array_variabel[0],FILTER_SANITIZE_EMAIL);
INSERT INTO stuff(mail) VALUES($sanitizedMail)
...
}
Men ska du göra det på ett vettigt sätt är det mer i den här stilen du bör göra
- Kod: Markera allt
if (filter_var($array_variabel[0], FILTER_VALIDATE_EMAIL)) {
...
INSERT INTO stuff(mail) VALUES($array_variabel[0])
...
}
else {
echo "Ogiltig mail";
}
Sen när det gäller SQL injections så kan du göra dig själv en tjänst och lär dig att jobba med PDO. Jobbar du med PDO och ALLTID använder prepared statements så kommer du aldrig få något problem med SQL injections, även om du klantar dig och glömmer att validera/filtrera något så är du ändå skyddad från katastrof.
http://net.tutsplus.com/tutorials/php/w ... se-access/