Avatar billede noodrem Nybegynder
28. januar 2004 - 17:38 Der er 10 kommentarer og
1 løsning

Include variabler sat efter brugerens input

Hej

Jeg har et problem når jeg includer filer.

Jeg har lavet en side, hvor man på startsiden skal skrive sit navn og sin alder i en formular. Jeg har givet dem henholdsvis alder og navn i 'name' så jeg let kan tilkalde dem med PHP. Jeg har også skrevet følgende i formularen: 'action="side2"'. Derefter har jeg lavet en seperat fil, som jeg includer hvori der står:


<?php

$navn = $_REQUEST["navn"];
$alder = $_REQUEST["alder"];

echo "Hej $navn <p> på $alder";

?>

Det virker fint når jeg includer filen på side2, og der kan jeg sagtens include ovenstående fil og få brugerens alder og navn vist på siden, men straks når jeg går til side3, og includer akkorat de samme filer, kan jeg ikke længere include ovenstående php fil, og få noget resultat ud af det. Jeg går ud fra at det er fordi action i formularen er sat til side 2, men hvad kan jeg gøre for at få adgang til at bruge $navn og $alder på alle mine sider?

-Mikkel
Avatar billede phpwiz Nybegynder
28. januar 2004 - 17:43 #1
Avatar billede noodrem Nybegynder
28. januar 2004 - 19:41 #2
Jeg fatter overhovedet ikke at bruge manualen, eftersom kun 1% af det der står deri giver mening for mig. Vil det sige at jeg bare skal erstatte $_REQUEST med $_SESSION og så kan jeg bruge den værdi som brugeren indtaster ver hele siden?
Avatar billede tefcke Nybegynder
28. januar 2004 - 20:57 #3
Hvis du på en side har en form med 2 input felter, som hedder `navn` og `alder`, kan du på den side formen bliver sendt til gøre følgende:
<?php
// Starter session
session_start();

// Er både navn og alder udfyldt?
if ( isset($_POST['navn']) && isset($_POST['alder']) ) {
    // Registrerer sessions variabler
    $_SESSION['navn'] = $_POST['navn'];
    $_SESSION['alder'] = $_POST['alder'];
    // Udskriv hilsen
    echo "Hej {$_SESSION['navn']} <p> på {$_SESSION[alder']}";
} else {
    echo "Navn og/eller alder er ikke udfyldt";
}
?>

På alle de sider du vil gøre brug af de sessions variabler som før blev registreret ($_SESSION['navn'] og $_SESSION['alder']), skal du som det aller første skrive:

<?php
session_start();
?>
Avatar billede noodrem Nybegynder
28. januar 2004 - 21:43 #4
Ok, tak for svaret. Kan du kort fortælle hvad forskellen på $_REQUEST og $_POST er? Jeg er vant til at bruge $_REQUEST, så kan jeg bruge det i stedet for $_POST i eksemplet ovenfor?

-Mikkel
Avatar billede tefcke Nybegynder
28. januar 2004 - 22:05 #5
$_REQUEST arrayet er $_GET og $_POST i et og samme array.

Mao. er $_REQUEST foreningensmængeden af $_POST og $_GET.
Avatar billede noodrem Nybegynder
29. januar 2004 - 08:32 #6
Problemet er at jeg includer mine sider. Skal jeg så stadig skrive session_start(); på de sider jeg includer på, eller skal det bare stå på den includede side?
Avatar billede noodrem Nybegynder
29. januar 2004 - 08:55 #7
Jeg har nu indtastet følgende i den side som jeg includer, som indeholder $_SESSION["navn"] og $_SESSION["alder"] men jeg får følgende meddelelse der hvor jeg includer filen:

Warning: Cannot send session cookie - headers already sent by (output started at /home/mikkel/webs/side2.php:4) in /home/mikkel/webs/includes/navnogalder.php on line 4

Warning: Cannot send session cache limiter - headers already sent (output started at /home/mikkel/webs/side2.php:4) in /home/mikkel/webs/includes/navnogalder.php on line 4
Velkommen tilbage


Hvad kan det skyldes?

Hvis jeg skriver session_start() på den side hvor jeg includer siden med $_SESSION, modtager jeg i stedet følgende meddelelse

Warning: Cannot send session cookie - headers already sent by (output started at /home/mikkel/webs/side2.php:4) in /home/mikkel/webs/side2.php on line 39

Warning: Cannot send session cache limiter - headers already sent (output started at /home/mikkel/webs/side2.php:4) in /home/mikkel/webs/side2.php on line 39



side 2 er den side hvor jeg includer filen som indeholder SESSIONEN på $alder og $navn
Avatar billede tefcke Nybegynder
29. januar 2004 - 11:44 #8
1) session_start() skal kun stå på den side hvorfra alt andet bliver inkluderet.
2) Du må ikke lave output til browser før du kalder session_start():
Eksempler hvor det går galt:
-----------------------------------------------------------------------------------------
<html>
<head>
<title>Side1</title>
</head>
<?php
// Her går det galt, da der allerede er sendt html-tags til browseren
session_start();
?>
-----------------------------------------------------------------------------------------
<?php
// Her går det galt, da php har sendt data som skal udskrives før session_start() er kaldt
echo "Velkommen";
session_start();
?>
<html>
...
-----------------------------------------------------------------------------------------

<?php
// Her går det galt, da der er tomme linjer (i html koden). Det bliver ligeledes fortolket som browser output, pas på med det
-----------------------------------------------------------------------------------------
session_start();
?>
Avatar billede naquer Nybegynder
29. januar 2004 - 12:09 #9
Jeg har gjort det på følgende måde:

<html>
<head></head>
<body>
<div> </div>
<?php
  session_start();
?>

</body>
</html>

Er det imod de regler du listede ovenfor, og hvad bør jeg i stedet skrive?
Avatar billede tefcke Nybegynder
29. januar 2004 - 12:42 #10
Det var jo præcis en af de ting som man ikke måtte: html før kald til af session_start()

Du skal have session_start() før alt output:

<?php
session_start();
?>
<html>
<head></head>
<body>
<pre>
<?php
// Tjek hvad der ligger i $_SESSION arrayet!
var_dump( $_SESSION );
?>
</pre>
</body>
</html>
Avatar billede naquer Nybegynder
29. januar 2004 - 13:32 #11
Men det virker stadigvæk ikke. Du får lige et eksempel på hvordan mine sider er opbygget:

Jeg har først en side med mine formularer som ser sådan ud:

<div id="navnogalder">

<p>Skriv dit navn og din alder</p>

<form action="side2.php" method="post">

navn: <input type="text" name="navn" value=""><p>
password: <input type="password" name="password" value="" size="10">
<p>
<input type="submit" value="Login">
</form>

</div>

Derefter har jeg den PHP side, som skal behandle inputtet:

<div id="rightmenu">

<?php

$_SESSION["navn"] = $_REQUEST["navn"];
$_SESSION["password"] = $_REQUEST["password"];

if($_SESSION["navn"] == Mikkel && $_SESSION["password"] == mikkel) {
echo "Velkommen tilbage {$_SESSION["navn"]}";
} else {
echo "Brugernavn eller adgangskode er forkert";
}


?>

</div>


Det PHP script includer jeg så i side2.php, som formular dokumentet har 'action' på.
Og det virker perfekt på side 2. Men så snart jeg går fra side 2 til side 3 skriver den bare adgangskode eller brugernavn er forkert, fordi den slet ikke har fat i inputtet mere. Der er præcis det samme på side2 og side3 og begge har:

<?php
session_start();
?>

i toppen, hvad er det jeg gør forkert, eller mangler at gøre?
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