Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Sesja
Forum PHP.pl > Forum > Przedszkole
glass
Poniżej zamieściłem kod prosto z wiki books link tutaj, mam pytanie w związku z wywoływaniem sesji . . czy jeśli wstawię jeden warunek przed wywołaniem sesji chodzi o session_start(); to będzie dobrze czy automatycznie zainicjować sesje powyżej warunku..questionmark.gif

  1. <?php
  2.  
  3. session_start(); // 1
  4.  
  5. if(!isset($_SESSION['licznik'])) // 2
  6. {
  7. $_SESSION['licznik'] = 0;
  8. }
  9.  
  10. $_SESSION['licznik']++; // 3
  11.  
  12. echo 'Odwiedziłeś już '.$_SESSION['licznik'].' podstron!'; // 4
  13.  
  14. ?>


Niech szanowna komisja administracyjna da spokój z tymi ostrzeżeniami!
---@ociu
Szanowna komsja nie da sobie spokoju. Nie mam zamiaru z Tobą dyskutować, to jest Twój czwarty post w tym subforum, z Tobą samą treścią. Zamkneliśmy Ci pierwszy temat, bo nie było tagu, dostałeś wiadomość w temacie o przesłanie pw do opiekuna, który Ci zamknął temat, co źle zrobiłeś, Ty to olałeś, otworzyłęś dwa takie same tematy w odstepie czasowym 20 minut. Usunąłem je, wysłałem Ci pw, dodałem poziom ostrzeżenia za crossingpost, jednak wchodząc tu rano, nie myślałem, że założysz następny temat. Powinienem ten temat usunąć i czekac dalej na pw z poprawną formą tamtego tematu na pw.
artega
Żeby na czymś operować, trzeba wiedzieć czym to jest - tak, musisz użyć session_start przed odczytem/zapisem danych sesji ale to przecież nie trudno sprawdzić osobiście, prawda?
glass
no wiesz co? hmm powiem tak żeby odpowiedzieć na pytanie trzeba najpierw je przeczytać a później zrozumieć, tobie nie poszło dobrze z tym drugim .. dla przyszłego pokolenia dodam wzmiankę .. postaram się i dam przekład, to czym są sesje ogólnie rozumiem i jak się je otwiera też chodzi mi o czystą poprawność, więc wygląda to tak:

ten przykład jest najpewniej poprawny:

  1. <?php
  2.  
  3. session_start(); // 1
  4.  
  5. if(!isset($_SESSION['licznik'])) // 2
  6. {
  7. $_SESSION['licznik'] = 0;
  8. }
  9.  
  10. $_SESSION['licznik']++; // 3
  11.  
  12. echo 'Odwiedziłeś już '.$_SESSION['licznik'].' podstron!'; // 4
  13.  
  14. ?>


moje pytanie brzmi czy przykład który umieszczam poniżej jest również (nie równie) poprawny i będzie działał w każdych warunkach (chodzi o inne bardziej uwikłane zagnieżdżenia, nie o kolejne funkcje jak na przykładzie):

sprostowanie pytania, czy linijka session_start(); // 1 na podstawie przykładu poniżej jest umieszczona poprawnie i spełnia swoje zadanie, czy może trzeba ją umieścić na samej górze skryptu??

  1. <?php
  2. $adres=stripslashes($_POST['adres']); 
  3.  
  4. function ValidEmail($adres) {
  5.  if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$" , $adres)) {
  6. return false;
  7.  }
  8.  return true;
  9. }
  10.  
  11. if (ValidEmail("$adres"))
  12. {
  13. session_start(); // 1
  14.  
  15. if(!isset($_SESSION['licznik'])) // 2
  16. {
  17. $_SESSION['licznik'] = 0;
  18. }
  19.  
  20. $_SESSION['licznik']++; // 3
  21.  
  22. echo 'Odwiedziłeś już '.$_SESSION['licznik'].' podstron!'; // 4
  23. }
  24.  
  25. else {}
  26.  
  27. ?>


dodam że przykład powyżej jest wyrwany z kontekstu jednak jest to całkiem nieistotne, na pytanie można odpowiedzieć i bez tego!
dzięki!!
artega
Pierwsza wiadomość była troche dwuznaczna.
Cytat
sprostowanie pytania, czy linijka session_start(); // 1 na podstawie przykładu poniżej jest umieszczona poprawnie i spełnia swoje zadanie, czy może trzeba ją umieścić na samej górze skryptu??

session_start może być wywołane gdzie tylko zechcesz byle by była przed wywołaniami funkcji, które wysyłają właściwą treść. session_start ustawia ciasteczko w nagłówkach, dlatego zalecane jest by umieszczać ją na początku skryptu.
glass
no dobra to by była odpowiedź na moje pytanie, jednak to także oznacza że muszę szukać błędu gdzieś indziej ale tym już się zajmę osobiście .. dzięki exclamation.gif
-glass-
mam bug-a i z tego powodu kontynuuje temat, zabrałem sie za skrypt i czegoś się dowiedziałem ale potrzebuje potwierdzenia ..

mam taki kod poniżej: i zamieszczam go przed inicjacją sesji, a to chyba niedobrze o ile się nie mylę to chodzi o puste znaki, przez nie skrypt nie może wywołać sesji .. testowałem to kilka razy na kilka sposobów i na to wychodzi, proszę o odpowiedź czy jeśli pousuwam puste znaki to wszystko w tym temacie będzie dobrze??

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2. "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
  3.  
  4. <html>
  5.  
  6. <head>
  7. <title>Garden-center (wykaz polecen Html, Css)</title>
  8.  
  9. <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-2">
  10. <META NAME="language" CONTENT="pl">
  11. <META NAME="author" CONTENT="Marcin Malysa">
  12.  
  13. <style type="text/css">
  14.  
  15. body {
  16. background-color: #fff7e7;
  17. }
  18.  
  19. table.ramka {padding: 20px; color: white; font: normal 14pt verdana; padding: 11
    px;border: solid 1px silver; background-color: #b5d3f7}
  20. </style>
  21.  
  22. </head>
  23. <body>
  24. <?php
  25. echo "tu jest inicjacja sesji";
  26. ?>
artega
Jak wspomniałem wcześniej funkcja session_start ustawia ciastko dlatego musi zostać wywołana przed jakąkolwiek treścią, która nie jest nagłówkiem, czyli wstaw
  1. <?php session_start(); ?>

przed kodem HTML.
-glass-
o to chodziło artega nie myślałem że pomożesz mi jeszcze raz!!
acztery
albo buforować <? ob_start(); ?> na początku i po sprawie.
Crozin
@acztery: to jest obejście, a nie rozwiązanie problemu. Funkcje serii ob_* mają inne przeznaczenie.
Glukozamina
Już nie będę zakladał nowego tematu bo dopadłą mnie blachostka . Coś nie tak ze składnią  także sesji.

  1. <?php
  2.  
  3.  
  4.  
  5. if(isSet($_SESSION['zalogowany']));{
  6.  
  7. echo ("Nie jesteś zalogowany");
  8. }
  9. else{
  10.  echo("Witaj:".$_SESSION['zalogowany']);
  11. }
  12.  
  13. ?>

Jestem noobem php ogólnie chodzi o to ,ze mam skrypt logowania . I poprostu kiedy nie jestem zalogowany to pokazoje mi się nie jesteś zalogowany. A jak jestem to to else sie pokazuje Witaj xxx.
erix
isset" title="Zobacz w manualu PHP" target="_manual zwraca w tym przypadku true, a nie o to chodzi w warunku. ;]
-glass-
Być może chodzi o jeden średnik za dużo w linijce z warunkiem..
Glukozamina
Nie wiem , nie mogę tego ogarnąć próbowałem na kilka sposobów i zabardzo z tego powyższego linka nie mogę dostosować do mojego przykładu.
  1. <?php
  2.  
  3.  
  4. if(isSet($_SESSION['zalogowany']));
  5. {
  6. echo "This var is set so I will print.";
  7. }
  8. unset ($_SESSION);
  9.  
  10.  if(isSet($_SESSION['zalogowany']));{
  11.  echo("Witaj:");
  12. }
  13.  
  14. ?>


Nie wiem jak to zrobiłem ale teraz to mi wyświetla wszystko .
artega
@Glukozamina podstawy języka się kłaniają, jak słusznie glass zauważył wstawiasz o jeden średnik za dużo.
  1. <?php
  2. if (false);
  3. {
  4. // Ten kod zawsze sie wykona
  5. echo "foo";
  6. }
  7.  
  8. if (false)
  9. {
  10. // ale ten juz nigdy
  11. echo "bar";
  12. }
  13. ?>
Crozin
@artega chyba:
  1. <?php
  2. if(true){
  3. echo 'To się zawsze wykona';
  4. }
  5.  
  6. if(false){
  7. echo 'A to się nigdy nie wykona';
  8. }
  9. ?>
winksmiley.jpg

A co do problemu:
  1. <?php
  2.  
  3. if(!isset($_SESSION['zalogowany'])){
  4. //ten kod sie wykona w przypadku, gdy uzytkownik jest NIE zalogowany (! przed isset() odwraca zwracaną wartość (neguje dokładniej rzecz biorąc))
  5. }
  6.  
  7. if(isset($_SESSION['zalogowany'])){
  8. //a ten, gdy uzytkownik JEST zalogowany
  9. }
  10. ?>
artega
@Crozin celowo wpisałem false by pokazać istote rzeczy - średnik za warunkiem
  1. <?php
  2. if (false);
  3.  
  4. {
  5. // Ten blok kodu nie nalezy do warunku i zawsze sie wykona
  6. }
  7. ?>

przegapiłeś średnik winksmiley.jpg
Glukozamina
Pare lekcji z php opuściłem . Muszę wrócic do podstaw bo z tego co pamiętam to ruszylem z kopyta. A narazie nawet nie wiem do czego sluży średnik (wiem tyle że czesto się z niego korzysta haha.gif ). Przez rok z nooba stałem się większym noobem smile.gif.Czekam na dzień w którym to ja zaczne pomagać potrzebującym "przedszkolakom" .Dzięki za pomoc .
Crozin
Ablo za dużo dziś przed PC siedzę,
albo czcionka jaką mam kod PHP wypisany jest mało czytelna biggrin.gif
Glukozamina
Jeszcze jedno pytanko. Jak wygląda sprawa z ograniczaniem dostępu ,że tylko zalogowani mogą np. pisać w shoutboxie. Mam kod:
  1. <?php
  2.  
  3. if(!isset($_SESSION['zalogowany'])){
  4. echo "Nie jesteś zalogowany";
  5. include("rejestracja/form.php");
  6. }
  7.  
  8. if(isset($_SESSION['zalogowany'])){
  9.  echo "Witaj w twoim menu: ";
  10.  echo $_SESSION['zalogowany'];
  11.  echo "<center><br>";
  12.  echo "<a href='index.php?go=11'>Wylogowanie</a>";
  13.  echo "</center></br>";
  14. }
  15. ?>

I przypuśmy mam shoutboxa w ktorym tylko zalogowani mogą pisać to muszę zrobić tak jak by 2 pliki shoutboxa ? Że jeden kiedy będzie pokazywany napis nie jesteś zalogowany nie możesz pisać a gdy zalogowany to będzie includować input type text do wpisywania .

P.S dlaczego nie działają te znaczniki do kodu ? Muszę ręcznie wpisywać [php].
erix
Cytat
I przypuśmy mam shoutboxa w ktorym tylko zalogowani mogą pisać to muszę zrobić tak jak by 2 pliki shoutboxa ? Że jeden kiedy będzie pokazywany napis nie jesteś zalogowany nie możesz pisać a gdy zalogowany to będzie includować input type text do wpisywania .

Nie. Po prostu obejmij formularz dopisywania w warunek i dodatkowo po stronie serwera (przy zapisie danych shoutboksa) sprawdzaj, czy zalogowany. Prościej się chyba nie da. ;]

Cytat
Muszę ręcznie wpisywać [php].

A dlaczego tekst mi się nie pogrubia, gdy o tym pomyślę...?
Crozin
shoutbox.php
  1. <?php
  2.  
  3. if(isset($_SESSION['zalogowany'], $_POST['submit'])){
  4. //tutaj dodajesz nowy wpis do shoutboxa
  5. }
  6.  
  7. if(isset($_SESSION['zalogowany'])){
  8. ?>
  9. <form action="" method="post">
  10. Wiadomosc <input type="text" name="msg" />
  11. <input type="submit" name="submit" value="Wyslij" />
  12. </form> 
  13. <?php
  14. }
  15.  
  16. $res = mysql_query('SELECT * FROM shoutbox ORDER BY dataDodania DESC LIMIT 15;');
  17. while($r = mysql_fetch_array($res, MYSQL_ASSOC))
  18. echo $r['nick'] . ': ' . $r['msg'] . '<br />';
  19.  
  20. ?>
Glukozamina
Dużo rzeczy robie dziwnymi metodami . I zastanawiam się czy to sie mieści w standardach php smile.gif Mimo ,że mi działa to tak jak chcę zastanawia mnie czy tak można . Czy coś poźniej z czymś innym nie będzie się gryźć .

  1. <?php
  2. if(!isset($_SESSION['zalogowany'])){
  3. echo "Aby pisać musisz się zalogować ";
  4. }
  5.  
  6. if(isset($_SESSION['zalogowany'])){
  7.  echo "<form method='GET' action='index.php'> ";
  8.  echo "<input type='text' name='tresc' value='tresc' size='40'>";
  9.  echo "<input type='submit' value='Dodaj'>";
  10.  echo "</form>";
  11. }
  12. ?>
Jak możecie to luknijcie.
Berg
O ile ustawiasz $_SESSION['zalogowany'] przy prawidłowym logowaniu to będzie działało. Jedyne co zmieniłbym w kodzie to drugie if - zamiast ponownie sprawdzać czy zmienna istnieje lepiej wpisać else.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.