---
title: "Validering av formulär"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/158562-validering-av-formulär"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "silfver"
published: "2007-03-25T10:51:56.000Z"
updated: "2007-03-25T18:14:18.000Z"
replies: 10
views: 385
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/158562-validering-av-formulär"
---

# Validering av formulär

## #1 — silfver, 2007-03-25T10:51Z

Tja!

Jag har ett script som ser ut så här: 

```php
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. :)

Permalänk: https://www.webforum.nu/p/158562

## #2 — Tulork, 2007-03-25T11:27Z

> **silfver skrev:**
>
> Tja!
> 
> Jag har ett script som ser ut så här: 
>
> ```php
> 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

```php
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."; 
}
```

Permalänk: https://www.webforum.nu/p/1950890

## #3 — silfver, 2007-03-25T11:31Z

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?

Permalänk: https://www.webforum.nu/p/1950892

## #4 — Tulork, 2007-03-25T11:42Z

```php
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 ) :)

Permalänk: https://www.webforum.nu/p/1950900

## #5 — silfver, 2007-03-25T11:52Z

> **Tulork skrev:**
>
> Testa den, glömde en ) :)

Fortfarande blankt. :e

**r\\** My bad. Du hade bara missat klistra in översta raden i koden. :)

Permalänk: https://www.webforum.nu/p/1950905

## #6 — colione, 2007-03-25T11:54Z

Han är ju inte skyddad mot sql-injections nu. Silfver, kolla upp funktionen mysql_real_escape_string()

Permalänk: https://www.webforum.nu/p/1950908

## #7 — Tulork, 2007-03-25T12:05Z

nä, det e han inte. men jag adresserade bara problemet med tomma fält. sql injections skydd e jag kass på.

Permalänk: https://www.webforum.nu/p/1950909

## #8 — silfver, 2007-03-25T12:12Z

> **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()](http://se2.php.net/manual/en/function.mysql-real-escape-string.php) 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? :)

Permalänk: https://www.webforum.nu/p/1950910

## #9 — colione, 2007-03-25T12:27Z

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)

Permalänk: https://www.webforum.nu/p/1950916

## #10 — silfver, 2007-03-25T17:52Z

Jo, jag kollade på det också, men förstod inte hur jag skulle liksom använda det. T.ex. den här raden: 

```php
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? 

```php
if(isset($_POST['spara']))
```

Permalänk: https://www.webforum.nu/p/1951027

## #11 — silfver, 2007-03-25T18:14Z

Okay, nu har jag fifflat med koden lite. Den ser ut så här: 

```php
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. :(

Permalänk: https://www.webforum.nu/p/1951035

---

Tråden på webben: https://www.webforum.nu/amne/php/158562-validering-av-formulär
