Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klopot z czyms tak prostym, ze az wstyd.
Forum PHP.pl > Forum > PHP
Marusz
Witam grupowiczow.

Kiedy pisalem swoj pierwszy skrypt, nie przypuszczalem, ze najdzie mnie ochota go wykorzystac smile.gif

Postanowilem owy skrypt wykorzystac na jakiejs stronie internetowej. Stworzylem prosty plik HTML z trzema table'sami i po lewej stronie dodalem 3 linki a w srodku moj (includowany) skrypt news. Wyglada to mniej wiecej tak:
Kod
| l  |    N       |   |

| i  |     E      |   |

| n |     W     |   |

| k |     S      |   |

| i  |             |   |

I teraz. Kiedy klikne na "Dodaj komentarz" to ni jak nie udaje mi sie dostac do strony z formularzem. Kurcze, i wiem jaka przyczyna. Link w skrypcie newsowym wyglada tak:

<a href='$PHP_SELF?action=add_comments&id=$db_n[id]&inc_comments=yes'>

przegladarka widzi go jako: strona.php?action=more_news&id=90&inc_comments=yes

a skrypt newsowy jest includowany zas jego nazwa to news.php. Wiec nic dziwnego, ze on nie rozumie co sie do niego mowi. Mam nadzieje, ze nie namieszalem za mocno. Jak wybrnac z tego problemu? Co u licha zrobic teraz z tymi linkami. Jak zaczynalem pisac news.php to w ogole nie kumalem php. Obecnie skrypt zajmuje 20 kb, wiec szkoda by mi bylo go stracic... a i linkow jest tam sporo odwolujacych sie do $PHP_SELF. Pomocy!
PS. troche mi sie ASCIIart winksmiley.jpg rozjechal, ale mam nadzieje, ze cos widac.
spenalzo
Zamień przy pomocy dowolnego programu wszystkie $PHP_SELF na news.php - o to chodzi?
Marusz
no wlasnie nie smile.gif bo wtedy calkowicie znikaja mi stoly i strona pokazuje sie w czystym oknie, bez layoutu (probowalem to).
Omega
Sprawdź co jest w $PHP_SELF przy pomocy funkcji exho(). Może sprubój ze stałą __FILE__ ona może pomóc. Jak cos jest nie tak z $PHP_SELF przyczyny trzeba szukać gdzie indziej... :?
spenalzo
BTW:
Należy korzystać ze zmiennej $_SERVER["PHP_SELF"] - może w tym tkwi problem.
Marusz
Zmienna $PHP_SELF dziala poprawnie. Sluchajcie, ja wiem w czym tkwi blad, tylko nie zabardzo umiem to powiedziec. Kiedy skrypt news.php dzialal sobie sam na sam, wszystkie linki funkcjonowaly, a ich postac wygladala tak:

http://serwer.com/news.php?action=more_new...nc_comments=yes

kiedy skrypt news.php includowalem do strony index.php, link wyglada tak:

http://serwer.com/strona.php?action=more_n...nc_comments=yes

i on juz nie kuma o co chodzi - po kliknieciu pokazuje biala kartke. Podejrzewam, ze hint Omegi ze stala __FILE__ moze mi pomoc, tylko ze nie wiem jak to wykorzystac (zas sama stala gdzies juz w zyciu widzialem). Pomozcie prosze, za duzo sie napisalem news.php aby teraz sie zastrzelic i robic wszystko od nowa.
Omega
W manualu jest to ładnie opisane, chyba nawet po polsku. Przypisz zawartość __FILE__ do jakiejś zmiennej, albo nawet do $PHP_SELF i powinno zadziałać.
spenalzo
Cytat
__FILE__ (nieważna wielkość liter)
Nazwa pliku ze skryptem php, który jest aktualnie parsowany (przetwarzany); stała użyta w pliku, który został włączony (include) lub jest wymagany (require), zwraca nazwę tego właśnie pliku, a nie nazwę pliku głównego.

Tak jak napisał Omega spróbuj przypisać tą stałą do zmiennej $PHP_SELF, lub zamień wszystkie $PHP_SELF na tą stałą.
Marusz
Ale to mi daje dokladnie to samo, jakbym $PHP_SELF zmienil na artykuly.php - wtedy to dziala, ale po kliknieciu na jakikolwiek temat, trace w tym wypadku calkowicie layout strony. W tym jest wlasnie problem.

Z lewej ramki wyoluje do srodkowej (ramki stolu, gdyz robie to na tablesach a nie frames) plik artykuly php:
http://serwer.com/strona.php?pilot=art
w skrypcie to ma sie tak:
echo "<a href='$PHP_SELF?pilot=art'>odnosnik do artykulow</a><BR>";

w tym czasie skrypt wykonuje:

[php:1:35d86618c0]<?php
if($_GET["pilot"] == "art"){
include("artykuly.php");
}

?>[/php:1:35d86618c0]

i jest ok. Skrypt artykuly.php defaultowo wyrzuca tematy artykulow ktore siedza w bazie danych. Kazdy temat jest linkie do artykulu:

http://serwer.com/artykuly.php?art=show_art&id=1

a gdy plik artykuly.php jest includowany, to ten linki wygladaja tak:

http://serwer.com/strona.php?art=show_art&id=1 i wtedy nie dzialaja.

Jak przypisalem do zmiennej:
$module_name = __FILE__;
i wcisnalem w link:
<a href='$module_name?art=show_art&id=$db_art[id]'>$db_art[temat]</a>
to wprawdzie dzieki temu link wyglada inaczej:
http://serwer.com/artykuly.php?art=show_art&id=1
aczkolwiek kiedy sie na linka klika, tak on "zamyka" strone z layoutem i otwiera nowa, biala, czysta kartke z napisami.

Juz nie wiem jak to napisac inaczej winksmiley.jpg. Jak sobie z tym poradzic?
orson
witam smile.gif

mam propozycje ... nie wiem czy ona ci pomoze ale mozesz sprobowac ...
ale bez przerabiania lekkieg pliku sie chyba nie obejdzie ...
zreszta 20 kb ... na sam skrypt news ... wow
przerob lekko plik news.php i kazde zadanie podczep do funkcji [ np. news(); add_news(); edit_news(); del_news() itd.] potem zrob warunek na sprawdzanie czy np.:
[php:1:569d8a7bde]<?php
if ($_GET['mode'] =='news' ) {
/*konkretny news*/
if ($_GET['id'] != "all") {
include "modules/news.php";
news($_GET['id']);
}
}
?>[/php:1:569d8a7bde]
czyli spradzaj czy jest warunek w adresie i potem w dowolnym miejscu wywolujesz funkcje news();
[ tutaj pobiera newsa o okreslonym id ]
w miejscu z ktorego wywolasz ta funkcje [ news(); ] bedziesz mial to co chcesz wiec np. w srodkowej kolumnie tej tabeli z 1 postu ja wywolujesz i dziala ...
mam nadzieje ze pomoglem a nie namieszalem bardziej biggrin.gif

cya
Marusz
Kurcze, nie kumam. Napisze na szybko przyklad:

tworzymy plik na szybko strona.php:

Kod
<html><body>

<center><table border="1" width="750" bordercolor="#FF0000" cellspacing="1">

<tr><td width="241" valign="top">



        <p align="center"><b>LINKI</b></p>

<?



/* banda linkow */



echo "<a href='$PHP_SELF?pilot=newsy'>odnosnik do newsow</a><br><br>";

echo "<a href='$PHP_SELF?pilot=artykuly'>odnosnik do artykulow</a><BR><BR>";

echo "<a href='$PHP_SELF?pilot=duperele'>odnosnik do jeszcze czegos innego</a><Br><BR>";

?>      

        <BR><BR><BR><BR>

        

      <td width="402" valign="top">

        <p align="center"><b>MAIN</b></p>



<BR><BR>



<?



/* reakcja po kliknieciu na link */



if($_GET["pilot"] == "newsy"){

        include("newsy.php");

}



if($_GET["pilot"] == "art"){

        include("artykuly.php");

}



if($_GET["pilot"] == "duperele"){

        include("duperele.php");

}



?>



    <BR><BR>



<td width="85" valign="top"><BR></td></tr></table></center></body></html>


teraz tworzymy 3 pliki: newsy.php, artykuly.php i duperele.php. O tresc uzupelniamy tylko newsy.php (pokaze problem):

[php:1:d2952221de]<?php

if($_GET["action"] == "zawartosc_linka_1"){
zawartosc_linka_1();
}

if($_GET["action"] == "zawartosc_linka_2"){
zawartosc_linka_2();
}

echo "jestem w newsach.php";
echo "<br><br>";
echo "linki"."<BR><BR>"."<a href='$PHP_SELF?action=zawartosc_linka_1'>link 1</a>"."<BR>";
echo "<a href='$PHP_SELF?action=zawartosc_linka_2'>link 2</a>";

function zawartosc_linka_1() {echo "tutaj link 1";}
function zawartosc_linka_2() {echo "tutaj zas link 2";}

?>[/php:1:d2952221de]

I teraz. Po wczytaniu strona.php i kliknieciu na link 1 pokazuje sie nam plik newsy.php w srodkowej ramce. A linki klikane w newsy.php juz nie dzialaja (mimo, ze wczytany do przegladarki plik newsy.php nie sprawia problemu). Nie wiem jak sobie z tym wlasnie poradzic, stad ten dlugasny post. Prosze nadal o pomoc.
orson
witam

$PHP_SELF odnosi sie do aktualnie przetwarzanego pliku czyli wywolujac $PHP_SELF w pliku news.php nie mozesz sie odwolywac do niego tylko do pliku z ktorego includujesz news.php ...
czyli :
[php:1:0be4737cbc]<a href='$PHP_SELF?action=zawartosc_linka_1'>link 1</a>[/php:1:0be4737cbc]
zamieniasz na
[php:1:0be4737cbc]<a href='strona.php?action=zawartosc_linka_1'>link 1</a>[/php:1:0be4737cbc]
tak powinno dzialac

cya
Marusz
Robilem to sad.gif I tak jak pisalem wyzej, gdy klikniesz na tego typu link, to strona.php sie "chowa", jak i stoly, zas otwiera zupelnie nowa czysta kartka z zawartoscia linku...
orson
witam

hmm ... nie mam pojecia dlaczego to nie dziala ... hmm ...
a moze :
[php:1:ef5d5a184d]<?php
if($_GET["pilot"] == "newsy"){
include("newsy.php");
}

?>[/php:1:ef5d5a184d]
zamien na :
[php:1:ef5d5a184d]<?php
if($_GET["pilot"] == "newsy"){
include("newsy.php"); // to musisz zawsze includowac na poczatku
if ($_GET["pilot"] == "") {
/* tu wstaw wywolanie funkcji np news_all(); ktora pokazuje spis wszystkich newsow*/
}elseif ($_GET["action"] != ""){
if($_GET["action"] == "zawartosc_linka_1"){
zawartosc_linka_1(); /* a tu masz konkretnego newsa ... ale konstrukcja z news(n); [ za n dajesz nr newsa ] bedzie chyba lepsza */
}
}
}
?>[/php:1:ef5d5a184d]
hmm ... musisz kontrole na action robic w pliku glownym ... i z niego wywolywac wszystkie funkcje ...

cya
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.