Autor Zpráva
DJ
Profil *
Ahoj,
mám takový problém se session, procházela jsem diskusi a nepodařilo se mi ho vyřešit. Mám stránku, kde si přihlášený uživatel může změnit kontaktní údaje a ve formuláři bych potřebovala, aby tam byly předvyplněny staré údaje. Po přihlášení se v levém horním rohu objeví text "přihlášen jako: Jméno-uživatele" (tedy session fungují), avšak ve formuláři níže se ono jméno nevyplní - zůstane to prázdné. Ta stránka je řešena includováním několika stránek, první php příkaz je session_start();

Tento kód
if (isset($_SESSION['user-logged-in']) and $_SESSION['user-logged-in'] == 1)
    {
      echo "<span class=\"provedeno\"><br />Přihlašení bylo úspěšné</span>";
      echo "<br />Jste přihlášen jako:<br />";
      echo $_SESSION['user-name'];
      echo "<br /><a href=\"\">nastavení účtu</a>";
      echo "<br /><a href=\"../index.php?logout=1&amp;token=".$_SESSION['user-token']."\">Odhlasit</a>";
    }
    else ...


funguje bez problémů, ale níže, ve formuláři
<input type="text" name="name" value="<?php echo $_SESSION["user-name"]); ?>" />

se neobjeví nic. Přiznám se, že co se týče session jsem spíše začátečník, tak opravdu nevím a budu vděčná za každou radu. Děkuji
motik
Profil
DJ:
zkus odstranit ) u toho echa...
<?php echo $_SESSION["user-name"]; ?>
Tori
Profil
<input type="text" name="name" value="<?php echo $_SESSION["user-name"]); ?>" />
To jste se překlepla teď, nebo to je ta chyba? (Mělo by to myslím hlásit syntax error, máte zapnuté zobrazování chyb?)
DJ
Profil *
motik:
omlouvám se za chybku, jen špatně zkopírovaný, v tomhle problém nebyl
motik
Profil
DJ:
jen špatně zkopírovaný
nechceš sem hodit celej kód?

jestli né, tak zkus vypisovat
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
a zjisti kde ti mizí.. víc ti asi bez kódu nepomůžeme..
DJ
Profil *
motik:
index.php, začátek:
<!-- Start the session -->
<?php session_start(); ?>
<!-- Include the file with functions -->
<?php include 'util/functions.php'; ?>
<!-- Connection to the database -->
<?php connect_db(); ?>
<!-- Language, page, cookies, ... -->
<?php include 'util/basic_setting.php'; ?>

basic_setting.php
<?php
  $lang = "cs";
  if(!empty($_GET["lang"]))
    $lang = $_GET["lang"];
  
  $page = "home";
  if(!empty($_GET["page"]))
    $page = $_GET["page"];

  if(isset($_POST['login']))
    if($_POST['login'] == 1)
      if((isset($_SESSION['user-logged-in']) and $_SESSION['user-logged-in'] != 1) or !(isset($_SESSION['user-logged-in'])))
        $logged_in = user_login($_POST['email'],$_POST['pass']);
  
  if(isset($_GET['logout']))
    if($_GET['logout'] == 1 and $_SESSION['user-logged-in'] == 1 and $_SESSION['user-token'] == $_GET['token'])
      user_logout(1);
?>

login.php, (informace o přihlášení)
<?php
  if(isset($logged_in) && $logged_in == -1)
  {
    echo "<br />";
    print_translation_short("user_does_not_exist");
    echo "&nbsp;&nbsp;";
    echo '<a href ="../index.php?lang='.$lang.'&amp;page='.$page.'">';
    print_translation_short("back");
    echo "</a>";
  }
  else
  {
    if (isset($_SESSION['user-logged-in']) and $_SESSION['user-logged-in'] == 1)
    {
      echo "<span class=\"provedeno\"><br />Přihlašení bylo úspěšné</span>";
      echo "<br />Jste přihlášen jako:<br />";
      echo $_SESSION['user-name'];
      echo "<br /><a href=\"\">nastavení účtu</a>";
      echo "<br /><a href=\"../index.php?logout=1&amp;token=".$_SESSION['user-token']."\">Odhlasit</a>";
    }
    else
    {
      echo "<form action='../index.php?lang=$lang&amp;page=$page' method='post'>";
      echo "<input type='hidden' name='login' value='1' />";
      echo "<table>";
      echo "<tr><td>E-mail:</td><td>";
      echo "<input type='text' name='email' size='15' maxlength='64' value='' class='input' />";
      echo "</td><td>";
      if($lang == "cs")
        echo "Heslo:";
      else
        echo "Password:";
      echo "</td><td>";
      echo "<input type='password' name='pass' size='15' maxlength='64' value='' class='input' />";
      echo "</td><td>";
      if($lang == "cs")
        echo "<input type='submit' name='submit' value='Vstoupit' class='button' />";
      else
        echo "<input type='submit' name='submit' value='Enter' class='button' />";
      echo "</td></tr><tr><td colspan='2'>";
      
      if($lang == "cs")
        echo "Přihlásit trvale ";
      else
        echo "Login permanently";
      echo "<input type='checkbox' name='set_cookie' />";
      echo "</td><td colspan='3'>";
      
      if($lang == "cs")
        echo "Nemáte ještě účet?";
      else
        echo "Do not have an account yet?";
      echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
      
      echo "<a href='index.php?page=register&amp;lang=$lang'>";
      if($lang == 'cs')
        echo "Registrace";
      else
        echo "Register";
      echo "</a></td></tr>";
      echo "<tr><td colspan='2'></td><td colspan='3'><a href='index.php?page=new-password&amp;lang=$lang'>";
      if($lang == "cs")
        echo "Zapomenuté heslo?\n";
      else 
        echo "Forgotten password?\n";            
      echo "</a></td></tr></table></form>";
    }
  }
?>

edit-user.php (stránka s tím formulářem), tady je důležitý jen tento řádek:
<input type="text" name="name" value="<?php echo $_SESSION["user-name"]; ?>" />

tak snad je to dostačující :))
motik
Profil
DJ:
proč takovou hrůzu?
<!-- Start the session -->
<?php session_start(); ?>
<!-- Include the file with functions -->
<?php include 'util/functions.php'; ?>
<!-- Connection to the database -->
<?php connect_db(); ?>
<!-- Language, page, cookies, ... -->
<?php include 'util/basic_setting.php'; ?>

proč to nezapíšeš:
<?php
session_start();
include 'util/functions.php';
... 
?>

pokud se ti nahoře vypíše, že ten uživatel je přihlášen: uživatel, tak bych řekl, že chyba bude někde v edit-user.php.. zkus ještě prohodit ty uvozovky, ale to by na to nemělo mít vliv... a zkus si vypsat obsah celé proměné $_SESSION
DJ
Profil *
motik:
proč takovou hrůzu?
nevím, v tomhle stavu jsem stránky převzala :)

změna uvozovek nic neřeší, obsah proměnný je prázdný
motik
Profil
DJ:
a máš v tom souboru edit-user.php nastarovaný session?
DJ
Profil *
motik:
a máš v tom souboru edit-user.php nastarovaný session?
ne, nemám, ale to by snad nemělo vadit? edit-user.php je vložen dovnitř stránky index.php a tam to je na začátku...
zkusila jsem přesto vložit na začátek
<?php session_start(); ?>
a nic :(
motik
Profil
DJ
pokud je to vložený, tak to nic... já jen kdyby náhodou (radši se blbě zeptat).. a procházelas ten kód a vypisovala sis tu session - měla bys tím zjistit, kde ti mizí a tím pádem i odhalíš problém

jinak ten jazyk bych raději řešil:
if ($lang == 'cs')
  {
    // česká verze
    define('HESLO', 'Zadejte heslo');
    define('REGISTRACE', 'Registrace');
  } else
    {
      // anglická verze
      define('HESLO', 'Pass');
      define('REGISTRACE', 'Registr');
    }
nebo nějak obdobně, ale ptát se pokaždý co je to za jazyk mi příjde dost vnášení nepřehlednosti a navíc se to nedá jednoduše rozšířit na víc jazyků.. (ale ten kód je vlastně přebraný)
DJ
Profil *
motik:
tak jsem zjistila, kde se to ztrácí.
stránka index.php
...
<div class="art-contentLayout">
          <?php 
           //tady to ještě je
            if($page == 'register')
              include 'users/register.php';
            else if($page == 'new-password')
              include 'users/new-password.php';
            else if($page == 'edit-menu') // tady se to ztratí
              include 'users/edit-user.php';
            else
              include $page.'.php'; 
              //tady už to zase je
          ?>
        </div>
...

takže chyba musí být někde v tom edit-user.php, hodím sen ten kód raději celý
<!-- Side bar -->
<div class="art-sidebar">
  <?php                                  
    include 'home/home-menu.php';
  ?>
</div>

<!-- Main page -->
<div class="art-content">
  <h1>Změna kontaktních údajů uživatele</h1>
    <?php
    echo "<form action=\"../index.php?lang=$lang&amp;page=edit-user&amp;sent=true\" method=\"post\">";
  ?>
  <table cols = 2 rows = 7>
      <tr height = 50px>
        <td>
          <?php
          print_translation_short("name:");
          ?>
        </td>
        <td>
          <input type="text" name="name" value="<?php echo $_SESSION['user-name']; ?>" /> 
        </td>
      </tr>
      <tr height = 50px>
        <td>
          <?php
            echo "E-mail:";
          ?>
        </td>
        <td>
          <input type="text" name="email" value="<?php /*find_info("email",$_SESSION["user-name"]);*/?>" />
        </td>
      </tr>
      <tr>
        <td>
        <?php
          print_translation_short("password:");
          ?>
        </td>
        <td>
          <input type="password" name="password1" />
        </td>
      </tr>
      <tr>
        <td>
        <?php
          print_translation_short("retype_password:");
          ?>
        </td>
        <td>
          <input type="password" name="password2" />
        </td>
      </tr>
      <tr height = 50px>
        <td>
        <?php
          print_translation_short("phone:");
          ?>
        </td>
        <td>
          <input type="text" name="phone" value="<?php /*find_info("phone",$_SESSION["user-name"]);*/?>" />
        </td>
      </tr>
      <tr height = 50px>
        <td>
        <?php
          print_translation_short("focus:");
        ?>
        </td>
        <td>
          <input type="text" name="focus" value="<?php /*find_info("focus",$_SESSION["user-name"]);*/?>" />
        </td>
      </tr>
      <tr height = 50px>
        <td>
        <?php
          print_translation_short("public_contact_info:");
          ?>
        </td>
        <td>
          <input type="checkbox" name="show_info" />
        </td>
      </tr>
    </table>
    <br />
    <?php
      print_translation_short("custom_field:");
    ?>
    <br />
    <br />
    <textarea rows = 10 cols = 58 name="message" wrap = soft><?php /*find_info("notes",$_SESSION["user-name"]);*/?></textarea><br />
    <br />
    
    <?php
      echo "<input type='submit' value='";
      print_translation_short("submit");
      echo "'/>"
    ?>
  </form>  
</div>
DJ
Profil *
ještě jsem zkoušela utvořit si ten samý soubor se stejným kódem, akorát, že jsem nepoužila include, ale dala jsem tam celý ten kód... a tohle funguje.. proč to tedy neběží, když do index.php includuju edit-user.php?
Michel
Profil
DJ:
proč to tedy neběží, když do index.php includuju edit-user.php?
Máš i v tom souboru edit-user.php vloženo na začátku session_start();? Bez toho mi to taky neběhalo.
DJ
Profil *
Michel:
Máš i v tom souboru edit-user.php vloženo na začátku session_start();? Bez toho mi to taky neběhalo.
neměla jsem, vložila, a stejně nic.
třeba v tom souboru login.php to session_start(); taky nemám a tam to funguje.
DJ
Profil *
No hurá. Najednou to začlo fungovat. To je mi ale záhada, proč... :)
Děkuji všem, co se snažili mi pomoct.
DJ
Profil *
a narážím na další problém - opravdu tomu nerozumím, proč se to tak chová... na tom jednom místě to funguje, pokud vypíšu
echo $_SESSION['user-name'];

kdekoliv jinde na stránce edit-user.php, tak se nevypíše nic :(
YoSarin
Profil
DJ:
Zkus to hned na začátku přiřadit do nějaké proměnné a tu pak používat místo toho...
Michel
Profil
DJ:
Vymaž paměť prohlížeče. Zřejmě má ty stránky v paměti.
DJ
Profil *
Michel:
díky, zřejmě to bylo příčinou problému ...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0