Avatar billede cmau Nybegynder
22. juli 2006 - 16:22 Der er 22 kommentarer og
1 løsning

Laves om itl funktion

HEjsa

Jeg har tidligere fået hjælp til at rette nedenstående kode til, så den kunne komme til at virke, men nu har jeg fået behov for denne på en anden måde.
Lige nu tjekker koden om alle felter i en form er udfyldt. Det jeg gerne vil have den til er at blive en funktion, som jeg kan includere i alle min forms, hvor jeg selv vælger hvilke felter den skal tjekke, så jeg fx kunne skrive:

include('functions');
formtjeck("navn,alder,køn");

Antallet af forskellige felter skal kunne variere.

Min nuværende kode:
<form action="<?php echo $PHP_SELF ?>" method="post">
    <input type="hidden" name="url" value="url">
    <input type="hidden" name="navn" value="">
    <input type="hidden" name="description" value="description">
    <input type="hidden" name="mobil" value="">
    <input type="hidden" name="by" value="0">
    <input type="submit" name="submit" value="Submit">
</form>

<?php
if(sizeof($_POST) > 0)
{
    foreach ( $_POST as $noegle => $vaerdi )
    {
        if($_POST[$noegle] == "")
        {
            $glemt[] = "<li><font color=\"FF0000\">" . $noegle . "!</font></li>";
        }
    }
}

if(sizeof($glemt) > 0)
{
    echo "Du mangler at udfølgende felter:<br>";
    echo "<ul>";
 
    for($i=0;$i<=sizeof($glemt);$i++)
    {
        echo $glemt[$i];
    }
 
    echo "</ul>";
}
?>
Avatar billede cmau Nybegynder
22. juli 2006 - 16:23 #1
Det er altså koden og ikke formen som skal i funktionen:


<?php
if(sizeof($_POST) > 0)
{
    foreach ( $_POST as $noegle => $vaerdi )
    {
        if($_POST[$noegle] == "")
        {
            $glemt[] = "<li><font color=\"FF0000\">" . $noegle . "!</font></li>";
        }
    }
}

if(sizeof($glemt) > 0)
{
    echo "Du mangler at udfølgende felter:<br>";
    echo "<ul>";

    for($i=0;$i<=sizeof($glemt);$i++)
    {
        echo $glemt[$i];
    }

    echo "</ul>";
}
?>
Avatar billede nielle Nybegynder
22. juli 2006 - 16:49 #2
Et bud:

function formtjeck($fieldsArr)
{
    $fields = explode(",", $fieldsArr);

    $glemt = array();
    foreach ($fields as $field)
    {
        if (isset($_POST[$field]) && trim($_POST[$field]) != "")
        {
            // Alt er i fineste orden :^)
        }
        else
        {
            $glemt[] = "<li><font color=\"FF0000\">" . $field . "!</font></li>";
        }
    }

    if (count($glemt) > 0)
    {
        echo "Du mangler at udfylde udfølgende felter:<br>";
        echo "<ul>";
        echo implode("\n", $glemt);
        echo "</ul>";
    }
}

formtjeck("navn,alder,køn");
Avatar billede cmau Nybegynder
22. juli 2006 - 17:24 #3
Hvordan gør jeg så sådan at hvis der ingen fejl sker, skal den have lov til at smide i database, logge ind eller hvad der nu skal ske?
Avatar billede nielle Nybegynder
22. juli 2006 - 17:28 #4
En mulighed er at lade funktionen returnere true, hvis felterene er udfyldt, og false ellers. Denne værdi kan du så tjekke på og gøre det der skal gøres:

function formtjeck($fieldsArr)
{
    $fields = explode(",", $fieldsArr);

    $glemt = array();
    foreach ($fields as $field)
    {
        if (isset($_POST[$field]) && trim($_POST[$field]) != "")
        {
            // Alt er i fineste orden :^)
        }
        else
        {
            $glemt[] = "<li><font color=\"FF0000\">" . $field . "!</font></li>";
        }
    }

    if (count($glemt) > 0)
    {
        echo "Du mangler at udfylde udfølgende felter:<br>";
        echo "<ul>";
        echo implode("\n", $glemt);
        echo "</ul>";

        return false;  // Funktionen returnere false hvis der mangler at blive udfyldt felter ...
    }
    else
        return true;  // ... og true hvis alt er i orden.
}

if (formtjeck("navn,alder,køn"))
{
    // Gem til databasen her
}
else
{
    // Gør noget andet her ...
}
Avatar billede cmau Nybegynder
22. juli 2006 - 17:30 #5
Men vil den så stadigvæk skrive hvilke felter jeg mangler?
Avatar billede nielle Nybegynder
22. juli 2006 - 17:31 #6
Ja :^)
Avatar billede cmau Nybegynder
22. juli 2006 - 17:41 #7
Hmm denne kode udskriver bare alt som html :S

<?
include('functions.php');
if (formtjeck("url,navn, description,mobil,by"))
{
echo 'Gemmer dumme';
}
else
{
echo 'Du så skod';
    // Gør noget andet her ...
}
?>
<form action="<?php echo $PHP_SELF ?>" method="post">
    <input type="text" name="url" value="url">
    <input type="text" name="navn" value="">
    <input type="text" name="description" value="description">
    <input type="text" name="mobil" value="">
    <input type="text" name="by" value="0">
    <input type="submit" name="submit" value="Submit">
</form>
Avatar billede nielle Nybegynder
22. juli 2006 - 17:49 #8
Koden skal indenfor i else-delen.

<?
include('functions.php');
if (formtjeck("url,navn, description,mobil,by"))
{
echo 'Gemmer dumme';
}
else
{
echo 'Du så skod';
    // Gør noget andet her ...
?>
<form action="<?php echo $PHP_SELF ?>" method="post">
    <input type="text" name="url" value="url">
    <input type="text" name="navn" value="">
    <input type="text" name="description" value="description">
    <input type="text" name="mobil" value="">
    <input type="text" name="by" value="0">
    <input type="submit" name="submit" value="Submit">
</form>
<?
}
Avatar billede cmau Nybegynder
22. juli 2006 - 17:51 #9
"Koden skal indenfor i else-delen."
Hvilken kode snakker du her om?
Avatar billede nielle Nybegynder
22. juli 2006 - 17:53 #10
Det har jeg jo vist :^)

Men det er altså FORM-koden som skal indenfor i else-delen.
Avatar billede cmau Nybegynder
22. juli 2006 - 17:57 #11
Nå ja, men kunne ikke lige se det :)

Den anden fejl jeg havdew lavet var at glemme <? og ?> i filen functions.

Men nu udskriver den dette:
http://kdp.users.whitehat.dk/sdasd.php
Avatar billede cmau Nybegynder
22. juli 2006 - 18:00 #12
Hov rettede lige en del fejl jeg har lavet, nu virkede den.
Avatar billede nielle Nybegynder
22. juli 2006 - 18:01 #13
Generelt synes jeg at det er en rigtig dårlig ide at svine sine bruger til med sådan noget som 'Du så skod'.

Men skal de forstås sådan at der skeal ske en ting første gang at man er på siden, og noget andet hvis man allered har været på siden og ikke har udfyldt felterne korrekt?
Avatar billede nielle Nybegynder
22. juli 2006 - 18:01 #14
Ahh :^)
Avatar billede cmau Nybegynder
22. juli 2006 - 18:06 #15
Det var bare lige noget jeg skrev hurtigt, hmm ved ikke lige hvorfor. Filerne ligger også bare på min computer, kun til test. Alt bliver gennemgået flere gange inden filerne lægges ud.
Avatar billede cmau Nybegynder
22. juli 2006 - 18:09 #16
Smider du svar?
Avatar billede nielle Nybegynder
22. juli 2006 - 18:10 #17
Svar :^)
Avatar billede cmau Nybegynder
22. juli 2006 - 18:12 #18
Tusind tak for den gode og hurtige hjælp.
Avatar billede cmau Nybegynder
22. juli 2006 - 18:30 #19
Håber du får en mail om dette, jeg glemte helt en lille ting i alt min iver.
Kan det lade sig gøre at jeg fx skrev:
    if (formtjeck("username 'Brugernavn',password 'Kodeord'")) {

På en eller anden måde, ved ikke om det er delt rigtigt osv., men hvad jeg gerne vil have er at den ikke skal skrive at man mangler at udfylde username, den skal skrive Brugernavn, men stadigvæk tjekke feltet username.
Avatar billede nielle Nybegynder
22. juli 2006 - 18:35 #20
Hvis du laver det på denne måde:

if (formtjeck("username,Brugernavn;password,Kodeord")) {

- altså med ;-tegn imellem posterne og ,-tegn imellem feltet og det brugerveldelige navn, så kan det klares sådan:


function formtjeck($fieldsArr)
{
    $fields = explode(";", $fieldsArr);

    $glemt = array();
    foreach ($fields as $field)
    {
        $subFields = explode(",", $field);

        if (isset($_POST[$subFields[0]]) && trim($_POST[$subFields[0]]) != "")
        {
            // Alt er i fineste orden :^)
        }
        else
        {
            $glemt[] = "<li><font color=\"FF0000\">" . $subFields[1] . "!</font></li>";
        }
    }

    if (count($glemt) > 0)
    {
        echo "Du mangler at udfylde udfølgende felter:<br>";
        echo "<ul>";
        echo implode("\n", $glemt);
        echo "</ul>";

        return false;  // Funktionen returnere false hvis der mangler at blive udfyldt felter ...
    }
    else
        return true;  // ... og true hvis alt er i orden.
}
Avatar billede cmau Nybegynder
22. juli 2006 - 18:40 #21
Så virker det også :D

Hvad ville der ske hvis jeg fx skrev en af disse:
if (formtjeck("username, ;password,Kodeord")) {
if (formtjeck("username,;password,Kodeord")) {
if (formtjeck("username;password,Kodeord")) {
Avatar billede nielle Nybegynder
22. juli 2006 - 18:43 #22
Funktionen kan jo sagtens laves om til at kunne tage højde for alle mulige variationer, men er det ikke lige så nemt bare at vedtage at du skal holde dig til et fast format?

if (formtjeck("username,Bruger navn;password,Kodeord")) {
Avatar billede cmau Nybegynder
22. juli 2006 - 18:55 #23
JA, jeg holder mig også til den :)
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