silfverMedlem sedan apr. 200312 679 inlägg Tja!
Jag har ett script som ser ut så här:
if(isset($_POST['spara'])) {
$datum = date("Y-m-d H:i:s");
require "connect.php";
mysql_query("INSERT INTO visitors (fornamn, efternamn, mobilnummer, epostadress, datum) VALUES ('$_POST[fornamn]','$_POST[efternamn]','$_POST[mobilnummer]','$_POST[epostadress]','$datum')") or die(mysql_error());
echo $_POST[fornamn] . ", du är registrerad.";
}
Hur ska jag enkelt göra en validering som kollar så att alla fälten är ifyllda, och ifall det saknas något så skall sql-frågan ignoreras?
Jag skulle också vilja ha lite hjälp med sql-injections. Hur ska jag i koden skydda mig enklast?
Tacksam för tips. :)
TulorkMedlem sedan aug. 2004903 inlägg
silfver skrev:
Tja!
Jag har ett script som ser ut så här:
if(isset($_POST['spara'])) {
$datum = date("Y-m-d H:i:s");
require "connect.php";
mysql_query("INSERT INTO visitors (fornamn, efternamn, mobilnummer, epostadress, datum) VALUES ('$_POST[fornamn]','$_POST[efternamn]','$_POST[mobilnummer]','$_POST[epostadress]','$datum')") or die(mysql_error());
echo $_POST[fornamn] . ", du är registrerad.";
}
Hur ska jag enkelt göra en validering som kollar så att alla fälten är ifyllda, och ifall det saknas något så skall sql-frågan ignoreras?
Jag skulle också vilja ha lite hjälp med sql-injections. Hur ska jag i koden skydda mig enklast?
Tacksam för tips. :)
nått sånt här kanske
if(isset($_POST['spara'])) {
$datum = date("Y-m-d H:i:s");
if (empty($_POST['fornamn']) || empty($_POST['efternamn']) ||
empty($_POST['mobilnummer']) ||
empty($_POST['epostadress']) {
die ("Du har inte fyllt i alla fält!!!");
}
require "connect.php";
mysql_query("INSERT INTO visitors
(fornamn, efternamn, mobilnummer, epostadress, datum) VALUES
('$_POST[fornamn]','$_POST[efternamn]','$_POST[mobilnummer]',
'$_POST[epostadress]','$datum')")
or die(mysql_error());
echo $_POST[fornamn] . ", du är registrerad.";
}
silfverMedlem sedan apr. 200312 679 inlägg Hm. Sidan blev helt blank när jag kör din kod, Turlok. :o Något som inte stämmer då med andra ord. Kan du se vad?
TulorkMedlem sedan aug. 2004903 inlägg if(isset($_POST['spara'])) {
$datum = date("Y-m-d H:i:s");
if (empty($_POST['fornamn']) || empty($_POST['efternamn']) ||
empty($_POST['mobilnummer']) ||
empty($_POST['epostadress'])) {
die ("Du har inte fyllt i alla fält!!!");
}
require "connect.php";
mysql_query("INSERT INTO visitors
(fornamn, efternamn, mobilnummer, epostadress, datum) VALUES
('$_POST[fornamn]','$_POST[efternamn]','$_POST[mobilnummer]',
'$_POST[epostadress]','$datum')")
or die(mysql_error());
echo $_POST[fornamn] . ", du är registrerad.";
}
Testa den, glömde en ) :)
silfverMedlem sedan apr. 200312 679 inlägg
Tulork skrev:
Testa den, glömde en ) :)
Fortfarande blankt. :e
r\ My bad. Du hade bara missat klistra in översta raden i koden. :)
colioneMedlem sedan juni 20014 421 inlägg Han är ju inte skyddad mot sql-injections nu. Silfver, kolla upp funktionen mysql_real_escape_string()
TulorkMedlem sedan aug. 2004903 inlägg nä, det e han inte. men jag adresserade bara problemet med tomma fält. sql injections skydd e jag kass på.
silfverMedlem sedan apr. 200312 679 inlägg
colione skrev:
Han är ju inte skyddad mot sql-injections nu. Silfver, kolla upp funktionen mysql_real_escape_string()
Tack för tipset. Jag spanade lite på php.net på mysql_real_escape_string() och har nu kommit hit:
$query = sprintf("INSERT INTO visitors (fornamn, efternamn, personnummer, mobilnummer, epostadress, datum) VALUES () )
mysql_real_escape_string($fornamn),
mysql_real_escape_string($efternamn),
mysql_real_escape_string($personnummer),
mysql_real_escape_string($mobilnummer),
mysql_real_escape_string($epostadress));
För det första vet jag inte ens ifall jag börjat rätt, men jag förstår inte hur jag ska skriva insättningen i tabellerna. Jag kan ju inte bara sätta in $fornamn i stället för $_POST[fornamn]?
Kan jag få en liten knuff i rätt riktning? :)
colioneMedlem sedan juni 20014 421 inlägg Kollade du på exempel 1378. A best practice?
Där kollar de först av om magic quotes är påslaget och tar bort evenutella slashar som funktionen har lagt dit (sker automatiskt om den är på). Och spara det nya värdet i en variabel. Exemeplvis: $fornamn
Om magic quotes inte är påslaget så sparar de den rena datan i samma variabal.
Därefter bygger de upp en parametiserad fråga med %s.
Därefter körs variablerna igenom escape-funktionen och frågan exekveras mha:
mysql_query($sql-frågan, $databas-connectionen)
silfverMedlem sedan apr. 200312 679 inlägg Jo, jag kollade på det också, men förstod inte hur jag skulle liksom använda det. T.ex. den här raden:
if (isset($_POST['product_name']) && isset($_POST['product_description']) && isset($_POST['user_id'])) {
Ska jag bara ersätta de där strängarna med mina formulärfält? I så fall är jag med, tror jag...
r\ Eller ska jag bara ersätta raden med min kod?
if(isset($_POST['spara']))
silfverMedlem sedan apr. 200312 679 inlägg Okay, nu har jag fifflat med koden lite. Den ser ut så här:
if(isset($_POST['spara'])) { //Fel?
// Connect
// Fixa in datumet
$datum = date("Y-m-d H:i:s");
$link = mysql_connect('localhost', 'daniel', 'morot');
if(!is_resource($link)) {
echo "Failed to connect to the server\n";
// ... log the error properly
} else {
// Reverse magic_quotes_gpc effects on those vars if ON.
if(get_magic_quotes_gpc()) {
$fornamn = stripslashes($_POST['fornamn']);
$efternamn = stripslashes($_POST['efternamn']);
$personnummer = stripslashes($_POST['personnummer']);
$mobilnummer = stripslashes($_POST['mobilnummer']);
$epostadress = stripslashes($_POST['epostadress']);
} else {
$fornamn = $_POST['fornamn'];
$efternamn = $_POST['efternamn'];
$personnummer = $_POST['personnummer'];
$mobilnummer = $_POST['mobilnummer'];
$epostadress = $_POST['epostadress'];
}
// Make a safe query
$query = sprintf("INSERT INTO visitors (`fornmn`, `efternamn`, `personnummer`, `mobilnummer`, `epostadress`, atum) VALUES ('%s', '%s', '%d')", //Hur ska jag veta vad som skall in här?
mysql_real_escape_string($fornamn, $link),
mysql_real_escape_string($efternamn, $link),
mysql_real_escape_string($personnummer, $link),
mysql_real_escape_string($mobilnummer, $link),
mysql_real_escape_string($epostadress, $link),
$_POST['user_id']); //Vad ska jag skriva här?
mysql_query($query, $link);
if (mysql_affected_rows($link) > 0) {
echo "Product inserted\n";
}
}
} else {
echo "Fill the form properly\n";
}
Som det ser ut nu så visas "Fill the form properly" så fort man kommer in på sidan.
Ska jag inte ange vilken databas jag ska logga in på? :o
Och det gör inget att ni ser mina inloggningsuppgifter, de är specialbyggda för wF samt körs bara lokalt. ;)
r\ Dessutom så spelar det ingen roll vad jag skriver för inloggningsuppgifter. "Failed to connect to the server" visas inte i alla fall. :(