Avatar billede cmol Nybegynder
17. oktober 2005 - 20:29 Der er 22 kommentarer

Header i php!

Hej!..

Har lavet et script til at tjekke om en bruger har udfyldt alle felter i en form, og derefter indsætte dataen i en database, eller sende brugeren tilbage...

Mit problem er, at i stedet for at endten insætte data eller at sende tilbage, så sender den vidre til en side som står som header i bunden til hvis alt bliver udført rigtigt!..

Alt det ser såæedes ud:

Min function - checkform.php:
(mode 1 og 2 er til form siden)

<?PHP

function chekform($mode, $value, $valuename, $msg)
{
    if($mode == 1)
    {
        if(isset($_SESSION['$valuename']))
        {
            echo $_SESSION['$valuename'];
        }
    }
   
    elseif($mode == 2)
    {
        if(isset($_SESSION['missing']))
        {
            $pos = strpos($_SESSION['missing'], $valuename);
            if($pos !== false)
            {
                echo $msg;
            }
        }
    }

   
    elseif($mode == 3)
    {
        $strlen = strlen($value);
        if($strlen <= 1)
        {
            if(!isset($missing))
            {
                $_SESSION['missing'] = $valuename;
            }
            else
            {
                $_SESSION['missing'] .= $valuename;
            }
        }
    }
    elseif($mode == 4)
    {
        if(isset($_SESSION['missing']))
        {
            $valok = 0;
            header("Location:$scriptname");           
        }
        else
        {
            $valok = 1;
        }
    }
}
?>

Og den bliver aktiveret - temp.nyhed.gem.php:

<?PHP
session_start();
$access = 4;
require('req/top.req.php');
if($val == ok)
{


echo chekform(3, $_POST['title'], "title", "");
echo chekform(3, $_POST['name'], "name", "");
echo chekform(3, $_POST['text'], "text", "");
echo chekform(4, "", "", "");


if($valok == 1)
{
$time = time();

mysql_query("INSERT INTO elver_nyt (title, name, date, text) VALUES ('$title', '$name', '$time', '$text')") OR DIE (mysql_error());
mysql_close;
header("Location: index.php");
}
}
require('req/bund.req.php');

?>


Kan i hjælpe?..

Hygge
Claus :-)
Avatar billede jakobdo Ekspert
17. oktober 2005 - 20:37 #1
Det som jeg ser som et problem er du laver: $valok = 1 osv...
Du burde bruger funktionens return værdi, f.eks.
elseif($mode == 4)
    {
        if(isset($_SESSION['missing']))
        {
            $valok = 0;
            header("Location:$scriptname");         
        }
        else
        {
            return 1;
        }
    }

og så længere nede tjekke:
if(chekform(4, "", "", "") == 1)
{
$time = time();
...
Avatar billede cmol Nybegynder
17. oktober 2005 - 20:46 #2
Hmm... Prøvede!.. Det gjorde ingen forskæl!..
Avatar billede jakobdo Ekspert
17. oktober 2005 - 20:49 #3
Prøv efter dine header() at skriv: exit();
altså:
header("Location:$scriptname");
exit();
Avatar billede cmol Nybegynder
17. oktober 2005 - 20:51 #4
Hmm... Gjorde heller intet!..
Avatar billede jakobdo Ekspert
17. oktober 2005 - 21:03 #5
Jeg synes desværre din kode er svær at forstå.
Hvad er det helt præcist du gerne vil opnå?
Avatar billede cmol Nybegynder
17. oktober 2005 - 21:07 #6
At hvis en bruger på "side 1" udfylder en form, så skal "side 2" kontrollere om alle felterne er udfyldt,

og hvis de er, så skal data sættes i en database,

og hvis de ikke er, så skal brugere sendes tilbage til formen, men de inputs som han/hun HAR udfyldt, skal ha de rigtige informationer.
Avatar billede jakobdo Ekspert
17. oktober 2005 - 21:13 #7
Jeg kunne evt anbefale dig at lave det hele på en og samme side!
Så kan du nemlig bedre lave output og lign!
Jeg brugte:
<input type="text" name="test" value="<? $_POST["test"] ?>">
osv...
Så får de variabel at se hvis ikke den er korrekt.
Forstår du?
Avatar billede cmol Nybegynder
17. oktober 2005 - 21:17 #8
Ja!.. Men ser ikke fordelen!.. Jeg har allerede gjord sådan her:

<form name"Form" method="post" action="temp.nyhed.gem.php?mode=function">
<input type="hidden" name"scriptname" value="';

echo 'http://';
echo $_SERVER['HTTP_HOST'];
echo $_SERVER['REQUEST_URI'];
echo '">
            <input type="hidden" name="mode" value="function">
            <p class="medium">Overskrift<br>
              <input class="input" value="';
              echo chekform(1, "", title, "");
              echo '" name="title">';
              echo chekform(2, "", title, "<p class=\"alert\">Du skal skrive en titel!<p>");
            echo '</p>
             
            <p class="medium">Navn:<br>
             
    <input class="input" maxlength="19" value="';
    echo chekform(1, "", name, "");
    echo '" name="name">';
    echo chekform(2, "", title, "<p class=\"alert\">Du skal skrive dit navn!<p>");
  echo '</p>




  <p class="medium">Nyheden:<br>
           
              <textarea class="input" name="text" value="';
              echo chekform(1, "", text, "");
              echo '" cols="50" rows="10" wrap="VIRTUAL"></textarea>
              <br>';
              echo chekform(2, "", title, "<p class=\"alert\">Du skal skrive en nyhed!<p>");
              echo '<br>
              <input type="Submit" class="input" value="Opret nyhed!">
            </p><br>
          </form>


Så jeg har allerede en besked om at der mangler felter!..
Avatar billede cmol Nybegynder
17. oktober 2005 - 21:33 #9
Men hvis du har et forslag, eller et gammelt script, eller et eller andet,
så jeg da med glæde prøve det ad!..
Avatar billede jakobdo Ekspert
17. oktober 2005 - 21:41 #10
Når jeg nu ser din form, så tror jeg nu ellers det er ok!
Kan du ikke lige bøje det i pap, hvad du ønsker der skal ske, når du submitter med checkform(3 og 4)
Avatar billede cmol Nybegynder
17. oktober 2005 - 21:48 #11
Altså Checkform 3, kontrollere om variablen $value er sat, og hvis den ikke er, så tilføjer den $valuename til den session der hedder $_SESSION['missing'].. Som så kan blive tjekket i checkform 2...

Og chekform 4 sender brugeren tilbage hvis $_SESSION['missing'] er blevet sat...


Var det det du skulle bruge?..
Avatar billede jakobdo Ekspert
17. oktober 2005 - 21:52 #12
Jep!
Men dine header()
Du har f.eks. en som hedder header("location: " . $scriptname);
Hvor kommer scriptname fra?
Er du sikker på dine header() bliver skudt af?
Prøv at fjern dem (udkommenter dem)
Og lav noget debug i nærheden af dem!
F.eks.
echo "Jeg er her...";
echo "nu er jeg lidt længere";
osv...
Avatar billede cmol Nybegynder
17. oktober 2005 - 22:00 #13
Ok!.. Den blev udført... Men skød en blank afsted... Har prøvet at skrive den som din... Men den udføre igen en blank header...
Avatar billede jakobdo Ekspert
17. oktober 2005 - 22:13 #14
Prøv at udskriv:
$scriptname
Altså ikke i header.
Men echo $scriptname
Indeholder den noget?
Avatar billede cmol Nybegynder
17. oktober 2005 - 22:23 #15
Hmm... Den indeholder ikke noget!..

Men alligevel er den i et hidden field i html'en på siden før!..

http://www.cmol.dk/elver/temp.createnews.php
Avatar billede jakobdo Ekspert
17. oktober 2005 - 22:31 #16
Se her: <input type="hidden" name"scriptname" value="';
der mangler =
name="scriptname"
Avatar billede cmol Nybegynder
17. oktober 2005 - 22:53 #17
Ok!.. Nu kom jeg da et skridt vidre!.. Nu sender den tilbage!.. Men åbenbart... Så kan man ikke lave: $_SESSION['$valuename'], For der er kun 1 variabel!.. Nogen idéer?..
Avatar billede taskmgr Nybegynder
17. oktober 2005 - 23:30 #18
Du kan ikke bruge single-quotes når du vil bruge en variabels værdi.
Så prøv med $_SESSION[$valuename]
Avatar billede cmol Nybegynder
18. oktober 2005 - 00:04 #19
Det virker!..

Men jeg kommer stadigt ikke vidre når jeg har udfyldt alle felter!.. Hmm..
Avatar billede jakobdo Ekspert
18. oktober 2005 - 07:52 #20
Det som jeg ser som et problem du bør løse, er for det første $valok
Den bruger du som global variabel.
Globale varibler skal generelt undgåes.
Prøv heller i din funktion af benyt: return $valok;
Som jeg var inde på tidligere.
Avatar billede cmol Nybegynder
18. oktober 2005 - 13:12 #21
Det vil sige at jeg skal noget allá:

$valok = 1;
return $valok;


Eller hva?..
Avatar billede jakobdo Ekspert
18. oktober 2005 - 19:48 #22
ja, eller simplethen bare return 1;

Lad mig prøve at lave en hel funktion til dig:

function chekform($mode, $value, $valuename, $msg)
{
    $valok = 1;
    switch($mode)
    {
        case 1:
            if(isset($_SESSION[$valuename]))
            {
                echo $_SESSION[$valuename];
            }
            break;
       
        case 2:
            if(isset($_SESSION['missing']))
            {
                $pos = strpos($_SESSION["missing"], $valuename);
                if($pos !== false)
                {
                    echo $msg;
                }
            }
            break;
 
    case 3:
            $strlen = strlen($value);
            if($strlen <= 1)
            {
                if(!isset($_SESSION["missing"]))
                {
                    $_SESSION["missing"] = $valuename;
                }
                else
                {
                    $_SESSION["missing"] .= $valuename;
                }
            }
            break;
       
    case 4:
            if(isset($_SESSION["missing"]))
            {
                header("Location: " . $_POST["scriptname"]);
            }
            break;
       
        default:
            //Her bør vi ikke komme, men vi sender en evt bruger til forsiden...
            header("location: index.php");
    }
    return $valok;
}

og så laver du:

echo chekform(3, $_POST['title'], "title", "");
echo chekform(3, $_POST['name'], "name", "");
echo chekform(3, $_POST['text'], "text", "");
$valok = chekform(4, "", "", "");
if($valok == 1)
{
blabla...
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