Avatar billede oergaard Nybegynder
23. april 2008 - 09:45 Der er 24 kommentarer og
2 løsninger

Problemer med sessions

Jeg er lige konverteret fra ASP til PHP.

Når jeg lavede en form i ASP ridirectede jeg siden efter SUBMIT, for at brugeren efterfølgende kan opdatere siden uden at få en dialogboks frem på skærmen.

Dette forsøger jeg nu også at lave i php, men synes ikke at kunne få det til at virke.

Min kode er som følgende:

<?php session_start(); ?>
<html>
  <head>
    <title>PHP og form</title>
  </head>
  <body>
    <?php
      if(isset($_POST["navn"])) {
        $_SESSION["navn"] = $_POST["navn"];
        header("location:http://localhost/php/index.php"); }
     
      if(isset($_SESSION["navn"])) {
        echo $_SESSION["navn"]; }
      else {
    ?>   
    <form action="index.php" method="post">
      <input type="text" name="navn" /> <br />
      <input type="submit" value="Send" />
    </form>
    <?php } ?>
  </body>
</html>

Men $_SESSION["navn"] udskrives ikke på skærmen?!?
Avatar billede w13 Novice
23. april 2008 - 09:52 #1
Så formen vises altså stadig uden at Sessionen udskrives?
Avatar billede g1mzee Nybegynder
23. april 2008 - 10:07 #2
for mig virker det lidt forkert at den linker tilbage til den samme side. det du kan gør er at fjerne den Header("location:http://localhost/php/index.php");
for det der sker er at den bare sender brugeren tilbage til den samme side.
hvis du sletter headeren, så går den bare ned til $_session['navn'] og udskriver den. da den lige er blevet sat inden.
og hvis det er første gang man er inde, altså skal udfylde det der, så bliver han sendt til samme side og vola. det virker.
Det skulle det meget gerne.

håber det var til hjælp.
Avatar billede bitmatic Nybegynder
23. april 2008 - 10:18 #3
Du kan ikke bruge header("location:http://localhost/php/index.php"); efter du har haft output. Det kan være det er det der får scriptet til at stoppe.

Prøv det her i stedet:


<?php session_start();
if(isset($_POST["navn"])) {
        $_SESSION["navn"] = $_POST["navn"];
        header("location:http://localhost/php/index.php"); }
?>
<html>
  <head>
    <title>PHP og form</title>
  </head>
  <body>
    <?php
      if(isset($_SESSION["navn"])) {
        echo $_SESSION["navn"]; }
      else {
    ?> 
    <form action="index.php" method="post">
      <input type="text" name="navn" /> <br />
      <input type="submit" value="Send" />
    </form>
    <?php } ?>
  </body>
</html>
Avatar billede g1mzee Nybegynder
23. april 2008 - 10:19 #4
bitmatic. han har heller ingen output inden, han sætter blot en variable.
Avatar billede g1mzee Nybegynder
23. april 2008 - 10:26 #5
min fejl, med title. men det tror jeg ikke har nogen indflydelse. da han ikke får en fejl med noget header noget. som man normalt gør. :)
Avatar billede oergaard Nybegynder
23. april 2008 - 10:54 #6
g1mzee> Jeg linker til samme side, for at brugeren kan benytter opdater - F5 uden at browseren skal sende data endnu engang.

bitmatic> Jeg har forsøgt med din rettelse, men det giver samme resultat.

Det virker som om $_SESSION["navn"] nulstilles ved brug af header.
Avatar billede dkfire Nybegynder
23. april 2008 - 11:29 #7
I stedet for at lave en redirekt til en global side, så på at lav en redirekt til en lokal side.

Ret:
header("location:http://localhost/php/index.php");
til:
header("location: /index.php");

Og ja det er rigtig som bitmatic skriver, for at kunne bruge header() funktionen må du IKKE have skrevet noget til browseren, dvs intet html eller andet som modtages af browseren.
Og lige en ting, husk at slå fejlbeskeder til, så længe du tester.
Avatar billede bitmatic Nybegynder
23. april 2008 - 11:38 #8
Har prøvet at lave en side til at teste det på min test-server der hedder session.php

Hele filen ser sådan her ud:

<?php session_start();
if(isset($_POST["navn"])) {
        $_SESSION["navn"] = $_POST["navn"];
        header("location:session.php"); }
?>
<html>
  <head>
    <title>PHP og form</title>
  </head>
  <body>
    <?php
      if(isset($_SESSION["navn"])) {
        echo $_SESSION["navn"]; }
      else {
    ?>
    <form action="session.php" method="post">
      <input type="text" name="navn" /> <br />
      <input type="submit" value="Send" />
    </form>
    <?php } ?>
  </body>
</html>


Det virker som forventet tor jeg... I kan prøve at lege med det på promode.dk/session.php
Avatar billede tfswebguy Nybegynder
23. april 2008 - 11:41 #9
PHP skal skrives rigtigt..
Og denne kode burde faktisk virke: (Sat det lidt anderledes op for syns skyld)
(Bemærk eks: $_POST["navn"] rettet til $_POST['navn'] >> " til ')

<?php
session_start();

if(isset($_POST['navn'])) {
        $_SESSION['navn'] = $_POST['navn'];
        header("location: index.php");
}
?>
<html>
  <head>
    <title>PHP og form</title>
  </head>
  <body>
    <?php
      if(isset($_SESSION['navn'])) {
        echo $_SESSION['navn'];
      } else {
    ?> 
    <form action="index.php" method="post">
      <input type="text" name="navn" /> <br />
      <input type="submit" value="Send" />
    </form>
    <?php
  }
  ?>
  </body>
</html>
Avatar billede oergaard Nybegynder
23. april 2008 - 12:50 #10
bitmatic> Det er jo samme kode som min ?!?!? Nu er jeg forvirret...

Kan det være PHP der er sat forkert op???
Avatar billede bitmatic Nybegynder
23. april 2008 - 13:29 #11
Ja, det er samme kode som din. Har blot ændret filnavnene.

Du kan tjekke din php-opsætning imod min ved at lave en php-fil med linien:

<?php phpinfo(); ?>

Og sammenligne den med promode.dk/phpinfo.php

Prøv specielt at kigge efter om der er forskelle i Session sektionen.
Avatar billede bitmatic Nybegynder
23. april 2008 - 13:31 #12
I øvrigt kører min php på en windows server. Din kører måske på en unix/linux....

Prøv evt. at ændre alle " til ' og se om det gør en forskel.
Avatar billede oergaard Nybegynder
23. april 2008 - 14:04 #13
Min kører også på en Windows server (IIS 7)

Jeg har også forsøgt mig på mit eget webhotel, hvor det også virker perfekt.

På min lokale PC er min Server API = ISAPI
På mit webhotel er Server API = CGI/FastCGI
På promode.dk/phpinfo.php er Server APi = CGI/FastCGI

Kan det være det?
Avatar billede g1mzee Nybegynder
23. april 2008 - 14:56 #14
oergaard, angående det jeg havde skrevet. ja, du linker til den samme, men uden grund. den skulle bare have lov til at kører scriptet igennem.
Avatar billede g1mzee Nybegynder
23. april 2008 - 15:04 #15
<?php
session_start();
?>
<html>
  <head>
    <title>PHP og form</title>
  </head>
  <body>
    <?php
      if(isset($_POST["navn"])) {
        $_SESSION["navn"] = $_POST["navn"];
       
      }
   
      if(isset($_SESSION["navn"])) {
        echo $_SESSION["navn"];
      }
      else {
    ?> 
    <form action="index.php" method="post">
      <input type="text" name="navn" /> <br />
      <input type="submit" value="Send" />
    </form>
    <?php
      }
?>
  </body>
</html>


har kørt denne kode på min, og den virker rigtig. det jeg skriver kommer op på næste side.
Avatar billede bitmatic Nybegynder
23. april 2008 - 15:26 #16
Hvis Server API'en er den eneste forskel på din lokale og dir webhotel, så prøv da at skifte den til FastCGI.

http://mvolo.com/blogs/serverside/archive/2007/10/09/IIS-FastCGI-and-PHP_3A00_-What-you-absolutely-need-to-know-to-host-PHP-applications-on-IIS-6-and-IIS-7.aspx
Avatar billede bitmatic Nybegynder
23. april 2008 - 15:41 #17
Men det ville da i øvrigt undre mig, om det gør nogen forskel.
Avatar billede oergaard Nybegynder
25. april 2008 - 08:59 #18
Har stået uden PC de sidste par dage. Jeg forsøger med ovenstående d.d. og vender så tilbage. :-)
Avatar billede oergaard Nybegynder
25. april 2008 - 16:01 #19
Et eller andet gjorde det, for nu får jeg følgende fejl:
PHP Warning: session_start() [function.session-start]: open(C:\Users\ADMINI~1\AppData\Local\Temp\php\session\sess_kj409k5i6817f0q3e4u6aofuf1, O_RDWR) failed: Permission denied (13) in D:\Documents\Websteder\php\index.php on line 1
Avatar billede oergaard Nybegynder
25. april 2008 - 16:16 #20
session.save_path: C:\Users\ADMINI~1\AppData\Local\Temp\php\session

Men denne mappe findes ikke - Jeg har forsøgt, at oprette mappen, men det hjælper ikke noget - her kommer følgende fejl:
PHP Warning: session_start() [function.session-start]: open(C:\Users\ADMINI~1\AppData\Local\Temp\php\session\sess_qel8jecqoatimf9lpr020gjb90, O_RDWR) failed: Permission denied (13) in D:\Documents\Websteder\php\index.php on line 1
Avatar billede dkfire Nybegynder
25. april 2008 - 18:56 #21
Du skal sørge for at php og din wedserver har skrivrettigheder til den mappe.
Avatar billede oergaard Nybegynder
27. april 2008 - 08:25 #22
Ok og hvordan ændre jeg det?

Vil det evt. være smartere at ændre mappens fysiske placering?
Avatar billede oergaard Nybegynder
07. maj 2008 - 09:50 #23
Jeg fandt for øvrigt ud af at ændre stien til ”..\sessions”, hvorefter det virkede perfekt. :-)

Kan I ikke hver i sær smide et svar, så kan I dele pointene, som tak for deltagelsen. :-)
Avatar billede bitmatic Nybegynder
07. maj 2008 - 10:45 #24
ok
Avatar billede dkfire Nybegynder
07. maj 2008 - 11:12 #25
svar
Avatar billede oergaard Nybegynder
09. maj 2008 - 06:55 #26
En stor tak for deltagelsen. :-)

g1mzee> Da du ikke har svaret antager jeg at du ikke vil have nogle point.
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