Avatar billede optur Novice
18. april 2010 - 18:49 Der er 15 kommentarer og
1 løsning

tjek om felt er blevet udfyldt inden der indsættes i DB

Jeg sidder og prøver at lave en IF struktur som tjekker om felter fra form er tomme.

hvordan skal sådan en struktur se ud? mest hvordan man tjekker om et felt er blank.
Avatar billede hrole Mester
18. april 2010 - 19:12 #1
Hej,

Hvis du blot vil tjekke om feltet er tomt:
if (empty($_POST['felt'];)) {
echo 'Feltet er tomt'; }
Avatar billede showsource Seniormester
18. april 2010 - 19:19 #2
empty returnerer sand hvis der f.eks. kun er mellem og eller linieskift.

trim() fjerner space og linieskift før og efter en var

if(trim($_POST["felt"]) == "") {
feltet er tomt

Og du kan bruge:

foreach($_POST as $key => value) {
    if(trim($value) == "") {
    $errors[] = $key;
    }
}

if(!empty($errors)) {
et eller andet
}
Avatar billede hrole Mester
18. april 2010 - 19:29 #3
#2 det er jeg enig i. Men nu var spørgsmålet om feltet var tomt. Hvis det indeholder fx et mellemrum er det vel ikke tomt :)
Avatar billede optur Novice
18. april 2010 - 19:33 #4
Her er et eksempel af min kode:

if (empty($_POST['title']=="" and $_POST['content']=="")) {
    header("location:admin.php?idx=7");
} else {
//Fanger vores variabler send fra "admin.php"
$overskrift = $_POST['title'];
$tekstfelt = $_POST['content'];

//"date"-funktionen tilskrives her variablen "dato"
$date = date("l, dS \of F, Y");

$insert="insert into news values (id,'$date','$overskrift','$tekstfelt')" or die("Connection to table failed : " . mysql_error());
// Erstatter æ ø å med korrekt html
$search  = array('æ','ø','å','Æ','Ø','Å');
$replace = array('æ','ø','å','Æ','Ø','Å');
$insert = str_replace($search, $replace, $insert);

mysql_query($insert);

header("location:admin.php?idx=5");
}
Avatar billede optur Novice
18. april 2010 - 21:27 #5
mit problem er at hvis jeg kun skriver i et af felterne så godkender den det i stedet for at komme med en fejlbesked
Avatar billede olebole Juniormester
18. april 2010 - 21:40 #6
<ole>

Mon ikke du mener:

if (empty($_POST['title']) && empty($_POST['content'])) {
    header("location:admin.php?idx=7");
}


/mvh
</bole>
Avatar billede olebole Juniormester
18. april 2010 - 21:42 #7
- og husk altid exit, når du har brugt en Location header:

if (empty($_POST['title']) && empty($_POST['content'])) {
    header("location:admin.php?idx=7");
    exit();
}

- og husk i øvrigt, at feltnavnene i en HTTP header er case sensitive, og Location derfor skal staves med stort L  ;o)
Avatar billede optur Novice
18. april 2010 - 22:10 #8
fantastisk... tusind tak =)
Avatar billede showsource Seniormester
18. april 2010 - 22:15 #9
Det skal nu være "eller"
OR eller ||

if (trim($_POST['title']) == "" || trim($_POST['content']) == "") {
    header("Location:admin.php?idx=7");
    exit();
}

Derudover bør man bruge http:// i en header ifølge manualen.
( Eller den protokol som nu skal bruges )

og du bør nok tænke lidt på sikkerhed, og som min. bruge mysql_real_escape_string()

Derudover, synes jeg du bør gemme de rå data i db, og først ved udtræk ændre på indhold.
Avatar billede olebole Juniormester
18. april 2010 - 22:29 #10
showsource >> Ja, naturligvis bør det være OR  ;o)

Jeg er enig i, man bør tænke på sikkerheden. Derfor bør man glemme alt om PHP's gamle pseudo-sikre løsninger som mysql_real_escape_string. I stedet bør man bruge mysqli:
    http://dk2.php.net/manual/en/book.mysqli.php

- og ikke mindst prepared statements:
    http://dk2.php.net/manual/en/mysqli.prepare.php
Avatar billede optur Novice
18. april 2010 - 22:49 #11
Wow cool takker...

som i nok har bemærket er jeg rimelig ny inden for php... tidligere asp mand, så der går tit rod i syntaxen..

Men tusind tak for jeres råd og hjælp =)
Avatar billede optur Novice
18. april 2010 - 23:02 #12
http://dk2.php.net/manual/en/mysqli.real-escape-string.php

Er det her ikke en "nyere" version af den som Showsource nævner?
Avatar billede olebole Juniormester
18. april 2010 - 23:51 #13
Jo, men hvis du parametriserer dine kald (bruger prepared statements), tager databasen sig af at sikre sig mod f.eks. sql-injection - og så er den overflødig. Det kender du formodentligt fra mssql  =)
Avatar billede showsource Seniormester
19. april 2010 - 02:12 #14
Du har ret i at prepared statements er langt bedre.
Her er f.eks. pdo et godt bud:
http://dk.php.net/manual/en/book.pdo.php

Mest fordi, ( synes jeg ), man kan lave kode som virker på div. databaser, bl.a mssql.
Avatar billede olebole Juniormester
19. april 2010 - 09:10 #15
Øv ... kan vi da ikke bare være uenige om et eller andet?  :D

Portabiliteten er naturligvis langt bedre med PDO  ;o)
Avatar billede optur Novice
25. februar 2011 - 07:51 #16
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester