Avatar billede Slettet bruger
18. maj 2004 - 18:58 Der er 7 kommentarer og
1 løsning

Visning af fejlmeddelse ved validering af form

Jeg har en form, hvori man kan indtaste forskellige medlemsoplysninger.

Jeg har bevist fravalgt java-script som validering, da jeg foretrækker at bruge PHP (kender nada til JS).

Mit valideringsscript ser indtil videre således ud:

$art    = $_GET['art'];
$status = $_POST['status'];

if (($art == "medlem") && (($status == "ny") || ($status == "edit")))
  {
    $form['firmanavn']    = $_POST['firmanavn'];
    $form['kontaktperson'] = $_POST['kontaktperson'];
    $form['adresse']      = $_POST['adresse'];
    $form['husnr']        = $_POST['husnr'];
    $form['postnr']        = $_POST['postnr'];
    $form['by']            = $_POST['by'];
    $form['telefon']      = $_POST['telefon'];
    $form['kategori']      = $_POST['kategori'];
    $form['hjemmeside']    = $_POST['hjemmeside'];
    $form['medlemstype']  = $_POST['medlemstype'];
    $form['vishjemmeside'] = $_POST['vishjemmeside'];
    $form['bemaerkninger'] = $_POST['bemaerkninger'];
    $form['medlemsnr']    = $_POST['medlemsnr'];

    if ($form['firmanavn']    == "") {$fejl = ("Firmanavn ikke indtastet.<br>");}
    if ($form['adresse']      == "") {$fejl = ($fejl."Adresse ikke indtastet.<br>");}
    if ($form['postnr']        == "") {$fejl = ($fejl."Postnr ikke indtastet.<br>");}
    if ($form['by']            == "") {$fejl = ($fejl."By ikke indtastet.<br>");}
    if ($form['kategori']      == "") {$fejl = ($fejl."Kategori ikke valgt.<br>");}
    if ($form['medlemstype']  == "") {$fejl = ($fejl."Medlemstype ikke valgt.<br>");}
    if ($form['vishjemmeside'] == "") {$fejl = ($fejl."Vis på hjemmeside er ikke valgt.<br>");}

    if ($fejl != "")
      {
        $indhold = ("
          <span class=\"admin_broedtekst\">
            <b>Du har lavet følgende fejl:</b><br>
            $fejl
          </span>
        ");
      }
  }

Det fungerer som det skal, men jeg har rodet en del med at få de allerede indtastede data retur i formen.

Sidst jeg lavede noget alá dette her gjorde jeg følgende:
1. Oprettede en form, hvor alle værdierne var blanke såfremt (?do=new).

2. Valideringen gemte alle variablerne fra formen i session-variabler og brugte header til at komme retur, nu med (?do=new&&status=fejl).

3. Formen kunne nu se at der var fejl, og viste fejlbeskeden, samt hentede alle de tidligere indtastede værdier fra session-variablerne.

Jeg kan ikke gennemskue om præcis hvad der er mest hensigtsmæssigt.

Nogle med gode forslag til hvordan sådan noget bygges op, uden at kvæle mig i arbejde ;o) ???

Mine sider bliver dannet på følgende måde på nuværende tidspunkt (meget forenklet):

mainpage.php:
function mainpage($title, $indhold)
  {
    $mainpage = ("
      <html>
        <head>
          <title>$title</title>
        </head>

        <body>
          $menu
          $indhold
        </body>
      </html>
    ");

    echo $mainpage;
  }

forside.php:
$title = ("Administratormenu");
include 'mainpage.php';

$indhold = ("Her er så mit indhold");
mainpage($title, $indhold);
Avatar billede riversen Nybegynder
18. maj 2004 - 19:24 #1
lav en funktion på form siden, som returnerer værdien til hvert felt

noget ala
function getValue( $field )
{
  return isset( $_SESSION[$field] ) ? $_SESSION[$field] : "";
}

i value for felterne skriver du så

value="<?= echo getValue( "navnetpåfeltet" ); ?>"

der skal så være samspil mellem session navnene og navnene på feltet, hvis det skal være nemmest at "læse" i koden

dvs. postnr hedder $_SESSION["postnr"] og du får værdien til postnr. feltet ved at sige getValue( "postnr" )

er det det du ønskede hjælp til?
Avatar billede riversen Nybegynder
18. maj 2004 - 19:32 #2
jeg vil nok sige

if( $fejl != "" )
{
  // gem alle variabler i session... også $fejl
  // viderestil til forrige sige, som tjekker om $_SESSION["fejl"] er sat og udskriver fejlen... husk at slette session variabler igen på denne side
}
Avatar billede Slettet bruger
18. maj 2004 - 19:38 #3
riversen...> Noget i den stil...
Jeg plejer dog at have html'en for sig, og php'en for sig. Noget alá:
$form_postnr = $_SESSION['postnr'];
$indhold = (" value=\"$form_postnr\" ");

Jeg har læst og læst og læst, og har aldrig rigtig fundet ud af om det er hensigtsmæssigt, eller om det giver masser af ekstra arbejde.
Det gør i hvertfald jeg kan holde styr på min kode, samt at jeg ikke får alt for meget bøvl med "' og lignenden ;o)

Lige nu sad jeg og overvejede om jeg bare skulle bruge en simpel IF-sætning på formens egen side, der checker om formens indhold er blevet valideret. Er den ikke det, valideres den.

Så skal der selvfølgelig også være en IF-sætning der viser de fundne fejl, samt henter de oplysninger der blev indtastet.

Når siden så "loades" for sidste gang, skulle der gerne valideres igen, ingen fejl findes, og dermed gemmes data, og brugeren sendes videre til en side der fortæller at det hele var fjong.
Avatar billede Slettet bruger
18. maj 2004 - 19:39 #4
riversen...> He, der var jo nærmest som du lige skrev.
Avatar billede Slettet bruger
18. maj 2004 - 19:42 #5
Puha, er helt bombet lige nu af og sidde og stirre i min kode...

Tror jeg venter med det kodningsmæssige til weekenden, og ser hvad der ellers dukker op af spændende betragtninger.

Point skal nok blive uddelt i løbet af weekenden :o)
Avatar billede riversen Nybegynder
18. maj 2004 - 19:43 #6
gratis herfra
Avatar billede sukos Juniormester
19. maj 2004 - 08:41 #7
lavede engang noget lign.

<?php
session_start();

$message = "Feltet er ikke udfyldt!";

function tjekform($var) {
global $message;
if(isset($_SESSION[$var])) {
    if($_SESSION[$var] == $message) {
    echo" * <font color=\"red\" size=-1\">". $_SESSION[$var] ."</font>";
    }else{
    echo" value=\"". $_SESSION[$var] ."\"";
        }
unset($_SESSION[$var]);
    }
}

if(isset($_POST["formsubmit"])) {
$_SESSION["fejlnr"] = 0;
$_SESSION["antal"] = 0;

    foreach($_POST as $key=>$value) {
    $_SESSION["fejlnr"]++;
        if(trim($value) == "") {
        $_SESSION["antal"]++;
        $_SESSION[$key. $_SESSION["fejlnr"]] = $message;
        }else{
        $_SESSION[$key] = $value;
        }
    }
header("Location:". $_SERVER["PHP_SELF"] ."");
exit;
}
?>
<html>

<head>
<title>Tjek formfelter</title>
</head>

<body>
<center>

<?php
if(isset($_SESSION["antal"]) && $_SESSION["antal"] != 0) {
echo"<b>Du mangler at udfylde ". $_SESSION["antal"] ." felter!</b><p>";
unset($_SESSION["antal"]);
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<input type="hidden" name="formsubmit" value="true">

Tjek formfelter:<br>

<table><tr>
    <td>Navn</td>
    <td><input type="text" name="navn"<?php tjekform("navn"); ?>><?php tjekform("navn2"); ?></td>
</tr><tr>
    <td>Adresse</td>
    <td><input type="text" name="adresse"<?php tjekform("adresse"); ?>><?php tjekform("adresse3"); ?></td>
</tr><tr>
    <td>Postnr.</td>
    <td><input type="text" name="postnr" size="5"<?php tjekform("postnr"); ?>><?php tjekform("postnr4"); ?></td>
</tr><tr>
    <td>By.</td>
    <td><input type="text" name="city"<?php tjekform("city"); ?>><?php tjekform("city5"); ?></td>
</tr><tr>
    <td>Telefon</td>
    <td><input type="text" name="tlf"<?php tjekform("tlf"); ?>><?php tjekform("tlf6"); ?></td>
</tr><tr>
    <td>E-Mail</td>
    <td><input type="text" name="email"<?php tjekform("email"); ?>><?php tjekform("email7"); ?></td>
</tr>
</table>
<input type="submit" value="Tjek form">
</form>
</center>
</body>

</html>
Avatar billede Slettet bruger
07. juni 2004 - 11:35 #8
Svar
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