PHP - presmerovanie na login a potom spat na povodnu stranku

Programovacie jazyky, rady, poradňa...
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

Problem je asi dost jasny. Dajme tomu, ze anonymny uzivatel chce ist na stranku, kde maju povleny vstup len prihlaseni uzivatelia. Tam dokazem dat oznamenie, co sa deje s tym, ze o par sekund bude presmerovany na login page a ak nie, nech si klikne sam.
Pouzivam funkciu header v takomto tvare

Kód: Vybrať všetko

 header('Refresh: 5; URL=index.php?pageId=login
No v tomto presmerovani sa docela stracam, v knihe na to idu dost z ostra a nejako zabudaju vysvetlovat podrobnosti, v kode sa sem tam vyskytne nieco taketo:

Kód: Vybrať všetko

    '<a href="index.php?pageId=login&redirect=' . $_SERVER['PHP_SELF'] .
Mne ide hlavne o to, aby som po uspesnom prihlaseni uzivatela dokazal presmerovat naspat na stranku, ktoru povodne chcel a nie len vzdy na index.php.

Vedel by mi niekto jednoducho a vysvetlit problematiku presmerovania, pripadne ma odkazat na text, kde je to co najmenej komplikovane vysvetlene?
Gepid
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1006
Registrovaný: 15 júl 2008, 16:54
Bydlisko: Trnava
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Gepid »

Neviem či som to presne pochopil, ale neišlo by to cez JS?
Takto nejak: <a href="javascript:history.go(-1)">Predchádzajúca strana</a>
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

Ak sa nemylym ten scrript urobi to iste, co browser, ked kliknes na sipku spat. Tie skripty, ktorych sa drzim maju robene presmerovanie cez premennu $redirect nasledovnym sposobom

Kód: Vybrať všetko

    header('Refresh: 5; URL=index.php?pageId=login&redirect=' . $_SERVER['PHP_SELF']);
Ten princip v podstate chapem, no problem u mna je, ze $_SERVER['PHP_SELF'] tam vrati vzdy iba index.php a moje URL vzdy vyzeraju takto: .../index.php?pageId=nazov_stranky
Da sa to nejak rozbehat aj s tymto systemom?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa audiotrack »

k $_SERVER['PHP_SELF'] ktoré ti vráti názov súboru pridaj ešte $_SERVER['REQUEST_URI'] ktoré ti vráti celý reťazec parametrov
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

Tak nakoniec nie pridat, ale nahradit a funguje to perfetkne. Teda aspon na webovom serveri. S tym suvisia aj moje dalsie otazky:

V manuale a aj v knihe som cital, ze funkcia header funguje spravne iba vtedy, ak je odoslana ako uplne prva vec, teda musi byt uplne na zaciatku stranky, este pred tagom html. No ja vkladam vsetky skripty v podstate az do jadra stranky, preto nerozumiem, ako to moze fungovat na serveri.

Opacny dej je na localhoste - tam presmerovanie nefunguje. Chapal by som to, ako chybne umiestnenie funkcie header, ale kedze inde to funguje, tak chyba bude asi inde.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa audiotrack »

keďže inde to funguje, bude chyba v zlom nastavení servera tam inde
(ak je teda chyba skutočne v tom čo si myslíš. Bolo by dobre napísať chybu akú ti píše alebo objasniť čo znamená výraz ide/nejde)
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

chybu nepise, len sa na localhoste proste nic nestane - nepride k automatickemu presmerovaniu
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa audiotrack »

nemáš v php.ini nastavené potláčanie warningov?
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

Prikladam odesk error handling z php.ini. Moc som sa v tomto nehrabal, raz som skusil odstranit bodkociarku z pred riadku

; E_ALL - All errors and warnings (doesn't include E_STRICT)

a nesla mi mysql :)

Kód: Vybrať všetko

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; error_reporting is a bit-field.  Or each number up to get desired error
; reporting level
; E_ALL             - All errors and warnings (doesn't include E_STRICT)
; E_ERROR           - fatal run-time errors
; E_RECOVERABLE_ERROR  - almost fatal run-time errors
; E_WARNING         - run-time warnings (non-fatal errors)
; E_PARSE           - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;                     from a bug in your code, but it's possible that it was
;                     intentional (e.g., using an uninitialized variable and
;                     relying on the fact it's automatically initialized to an
;                     empty string)
; E_STRICT          - run-time notices, enable to have PHP suggest changes
;                     to your code which will ensure the best interoperability
;                     and forward compatibility of your code
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;                     initial startup
; E_COMPILE_ERROR   - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE     - user-generated notice message
;
; Examples:
;
;   - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
;   - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
;   - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
;
;   - Show all errors, except coding standards warnings
;
error_reporting = E_ALL

; Print out errors (as a part of the output).  For production web sites,
; you're strongly encouraged to turn this feature off, and use error logging
; instead (see below).  Keeping display_errors enabled on a production web site
; may reveal security information to end users, such as file paths on your Web
; server, your database schema or other information.
;
; possible values for display_errors:
;
; Off          - Do not display any errors 
; stderr       - Display errors to STDERR (affects only CGI/CLI binaries!)   
; On or stdout - Display errors to STDOUT (default)
;  
; To output errors to STDERR with CGI/CLI:              
;display_errors = "stderr"
;
; Default
;
display_errors = Off

; Even when display_errors is on, errors that occur during PHP's startup
; sequence are not displayed.  It's strongly recommended to keep
; display_startup_errors off, except for when debugging.
display_startup_errors = Off

; Log errors into a log file (server-specific log, stderr, or error_log (below))
; As stated above, you're strongly advised to use error logging in place of
; error displaying on production web sites.
log_errors = On

; Set maximum length of log_errors. In error_log information about the source is
; added. The default is 1024 and 0 allows to not apply any maximum length at all.
log_errors_max_len = 1024

; Do not log repeated messages. Repeated errors must occur in same file on same
; line unless ignore_repeated_source is set true.
ignore_repeated_errors = Off

; Ignore source of message when ignoring repeated messages. When this setting
; is On you will not log errors with repeated messages from different files or
; source lines.
ignore_repeated_source = Off

; If this parameter is set to Off, then memory leaks will not be shown (on
; stdout or in the log). This has only effect in a debug compile, and if
; error reporting includes E_WARNING in the allowed list
report_memleaks = On

;report_zend_debug = 0

; Store the last error/warning message in $php_errormsg (boolean).
track_errors = Off

; Turn off normal error reporting and emit XML-RPC error XML
;xmlrpc_errors = 0
; An XML-RPC faultCode
;xmlrpc_error_number = 0

; Disable the inclusion of HTML tags in error messages.
; Note: Never use this feature for production boxes.
;html_errors = Off

; If html_errors is set On PHP produces clickable error messages that direct
; to a page describing the error or function causing the error in detail.
; You can download a copy of the PHP manual from http://www.php.net/docs.php
; and change docref_root to the base URL of your local copy including the
; leading '/'. You must also specify the file extension being used including
; the dot.
; Note: Never use this feature for production boxes.
;docref_root = "/phpmanual/"
;docref_ext = .html

; String to output before an error message.
;error_prepend_string = "<font color=#ff0000>"

; String to output after an error message.
;error_append_string = "</font>"

; Log errors to specified file.
;error_log = filename

; Log errors to syslog (Event Log on NT, not valid in Windows 95).
;error_log = syslog
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa chrono »

Daj On do riadku:

Kód: Vybrať všetko

display_errors = Off
Holubar
Darca
Darca
Používateľov profilový obrázok
Príspevky: 3894
Registrovaný: 24 feb 2005, 21:26
Bydlisko: Senec
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa Holubar »

Pomohlo. Teraz nachadzam vselijake nedostatky v scriptoch. :) A s tymto to je, ako som myslel - headers already sent

Ale teraz neviem, ako dalej - ci hladat sposob, ako to urobit, aby to bolo principialne spravne, alebo zmenit nejake nastavenie na localhoste tak, aby to fungovalo, ako na webovom serveri.

Kedze by som ale pisal kod tak, aby bolo vsetko v poriadku, rad by som teda hladal moznost, ako to zakomponovat do mojho usporiadania. A tu narazam na problem - dalsia vec, co si tiez pyta miesto uplne na zaciatku kodu je prikaz session_start, tak, ako to spravit ked pride stranka, ktora potrebuje presmerovat uzivatela a zaroven aj udrzat udaje v session?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: PHP - presmerovanie na login a potom spat na povodnu stranku

Príspevok od používateľa audiotrack »

header nemôžeš meniť po výstupe na monitor. To ale neznamená že to musí byť prvý príkaz vôbec. Ak potrebuješ aj udržať session aj presmerovať, tak nastav session a potom daj header
Napísať odpoveď