[PHP][Problem] Błąd składni w dziwnym miejscu

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
VieriX
Nowy
Nowy
Posty: 22
Rejestracja: wt maja 10, 2005 5:26 pm
Lokalizacja: Polska
Kontakt:

[PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: VieriX »

[php]
<?php
if(file_exist("c:/temp/sn_cookieA.sn"))
{
$plikA=fopen("c:/temp/sn_cookieA.sn", "r+");
$iloscA=fgets($plikA, "1");
fclose($plikA);
if($iloscA=0)
{
//WYSWIETL BANNER A i
echo 'BANNER A';
$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "1");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "0");
fclose($plikBB);
}
else
{
$plikB=fopen("c:/temp/sn_cookieB.sn", "r+");
$iloscB=fgets($plikB, "1");
fclose($plikA);
if($iloscB=0)
{
//WYSWIETL BANNER B i
echo 'BANNER B';

$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "0");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "1");
fclose($plikBB);
}
else
{
$plik_utworz=fopen("c:/temp/sn_cookieA.sn", "w");
$plik_utworz2=fopen("c:/temp/sn_cookieB.sn", "w");
echo 'Funkcja zostanie wyświetlona przy kolejnych odwiedzinach. Dziękujemy!';
fclose($plik_utworz);
fclose($plik_utworz2);
}
?>
[/php]

Blad skladni w wierszu 46. Czy ktoś potrafiłby mi pomóc?? Oznaczyłem specjalnie wiersze, aby nie było kłopotu.

//edit
Zresza niepotrzebnie bo wiersze oznacza

Kod: Zaznacz cały

[php][/php]
8)

Z góry dziekuje
Pozdrawiam
Vieri
Hawk
Przelotem
Przelotem
Posty: 209
Rejestracja: ndz gru 22, 2002 9:34 pm

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: Hawk »

Nie do konca rozumiem ten kod ale moze chodzic o brak klamerki } przed else w linii 37 (albo inaczej mowiac niezamkniety if z linii 2).

Dodatkowo w zly sposob sprawdzasz warunki. Zapis typu $iloscA=0 spowoduje przypisanie do $iloscA wartosci 0. Sprawdzania rownosci dokonuje sie za pomoca ==. Mysle, ze w tym wypadku moglbys rowniez uzyc konstrukcji if($iloscA) - dla wartosci 0 $iloscA bedzie postrzegana jako falsz co spowoduje ominiecie tej instrukcji, natomiast kazda inna wartosc spowoduje jej wykonanie.
VieriX
Nowy
Nowy
Posty: 22
Rejestracja: wt maja 10, 2005 5:26 pm
Lokalizacja: Polska
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: VieriX »

Ok, dziekuje sprawdze. O wynikach poinformuje :-D

Pozdrawiam
Vieri

//edit

No to sprawa wyglada tak:
Dodałem klamerkę i bład przeskoczył na linijkę 38, dalej problem ze skladnia.
W if'ach zmienilem = na ==, choc wydaje mi sie, ze jedno = wystarcza (w roznych innych skryptach tak to jest notowane).

Moze troche o zalorzeniu skryptu:
Skrypt ma wyświetlać na przemian bannerB i bannerB. Na przemian tzn. za jednym zaladowaniem strony widac bannerA a za drugim (lub po odswiezeniu) bannerB. Nie kozystam z bazy mysql bo to zbyt duzy stopien wtajemniczenia dla mnie, a pozatym mam strasznie malo czasu (ambitny jestem, moze za rok bym to zrobil). Przyzwyczajenia w kodzie mam z Basica, w ktorym programowanie wiadomo jak wygladalo, stad to ulozenie kodu takie "nastepujace po sobie".

Aha. Kod wyglada teraz tak: (duzo sie nie zmieniło :P )

[php]<?php
<?php
if(file_exist("c:/temp/sn_cookieA.sn"))
{
$plikA=fopen("c:/temp/sn_cookieA.sn", "r+");
$iloscA=fgets($plikA, "1");
fclose($plikA);
if($iloscA==0)
{
//WYSWIETL BANNER A i
echo 'BANNER A';
$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "1");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "0");
fclose($plikBB);
}
else
{
$plikB=fopen("c:/temp/sn_cookieB.sn", "r+");
$iloscB=fgets($plikB, "1");
fclose($plikA);
if($iloscB==0)
{
//WYSWIETL BANNER B i
echo 'BANNER B';

$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "0");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "1");
fclose($plikBB);
}
}
else
{
$plik_utworz=fopen("c:/temp/sn_cookieA.sn", "w");
$plik_utworz2=fopen("c:/temp/sn_cookieB.sn", "w");
echo 'Funkcja zostanie wyświetlona przy kolejnych odwiedzinach. Dziękujemy!';
fclose($plik_utworz);
fclose($plik_utworz2);
}
?>

?>[/php]
Hawk
Przelotem
Przelotem
Posty: 209
Rejestracja: ndz gru 22, 2002 9:34 pm

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: Hawk »

[php]<?php
if(file_exists("c:/temp/sn_cookieA.sn")) {
$plikA=fopen("c:/temp/sn_cookieA.sn", "r+");
$iloscA=fgets($plikA, "1");
fclose($plikA);
if($iloscA==0) {
//WYSWIETL BANNER A i
echo 'BANNER A';
$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "1");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "0");
fclose($plikBB);
} else {
$plikB=fopen("c:/temp/sn_cookieB.sn", "r+");
$iloscB=fgets($plikB, "1");
fclose($plikA);
}
if($iloscB==0) {
//WYSWIETL BANNER B i
echo 'BANNER B';
$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "0");
fclose($plikAA);

$plikBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBB, "1");
fclose($plikBB);
}
} else {
$plik_utworz=fopen("c:/temp/sn_cookieA.sn", "w");
$plik_utworz2=fopen("c:/temp/sn_cookieB.sn", "w");
echo 'Funkcja zostanie wyświetlona przy kolejnych odwiedzinach. Dziękujemy!';
fclose($plik_utworz);
fclose($plik_utworz2);
}
?>[/php]

Teraz juz dziala, a przynajmniej nie wyrzuca bledow skladni :). Miales jeszcze jeden blad na poczatku - nie ma funkcji file_exist, powinno byc file_exists. Co do operatorow rownosci - http://www.leon.w-wa.pl/texts/kurs/operatory.php.
rafcio8405
Nowy
Nowy
Posty: 43
Rejestracja: śr gru 14, 2005 12:47 pm
Lokalizacja: Warszawa
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: rafcio8405 »

Jest różnica między = a ==

Jeden znak równania oznacza przypisanie wartości, a dwa znaki równania oznaczają równość. Jest to częsty błąd :!:
VieriX
Nowy
Nowy
Posty: 22
Rejestracja: wt maja 10, 2005 5:26 pm
Lokalizacja: Polska
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: VieriX »

Super. Ślicznie dziekuje. Dalej mecze sie sam. Jak bede mial problemy jeszcze jakies - napisze. Chyba mi nie odmowicie :lol:

Pozdrawiam
Vieri
VieriX
Nowy
Nowy
Posty: 22
Rejestracja: wt maja 10, 2005 5:26 pm
Lokalizacja: Polska
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: VieriX »

Plik doprowadzilem do takiej postaci:

[php]
<?php
if(file_exists("c:/temp/sn_cookieA.sn")) {
$plikA=fopen("c:/temp/sn_cookieA.sn", "r+");
$iloscA=fgets($plikA, "1");
fclose($plikA);
if($iloscA==0) {
//WYSWIETL BANNER A i
echo 'BANNER A';
$plikAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAA, "1");
fclose($plikAA);
$plikBB=fopen("c:/temp/sn_cookieB.sn", "w");
fwrite($plikBB, "0");
fclose($plikBB);
} else {
//WYSWIETL BANNER B i
echo 'BANNER B';
$plikAAA=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikAAA, "0");
fclose($plikAAA);
$plikBBB=fopen("c:/temp/sn_cookieA.sn", "w");
fwrite($plikBBB, "1");
fclose($plikBBB);
}
} else {
$plik_utworz=fopen("c:/temp/sn_cookieA.sn", "w");
$plik_utworz2=fopen("c:/temp/sn_cookieB.sn", "w");
echo 'Funkcja zostanie wyświetlona przy kolejnych odwiedzinach. Dziękujemy!';
fclose($plik_utworz);
fclose($plik_utworz2);
}
?>
[/php]

I taka zasada:
Otwierany jest plik sn_cookieA.sn. Jesli w pliku jest 0 wykonuje sie czesc kodu odpowiedzialna za wyswietlenie banneraA. Jesli jednak jest cos innego (w moim przypadku moze to byc tylko 1), to wykonuje sie czesc alternatywna (po else), odpowiedzialna za wyswietlenie sie banneraB. I teraz najciekawsze.

Po pierwszym wykonaniu kodu:

Tworza sie dwa pliki sn_cookieA.sn i sn_cookieB.sn. Czyli wszystko zgodnie z założeniami

Po drugim uruchomieniu wykonuje sie kod BanneraA i do plikow dopisywane sa wartosci (odpowiednio do sn_cookieA.sn wartosc 1 [czyli ten banner juz sie wyswietlil] oraz sn_cookieB.sn wartosc 0 [czyli teraz czas na banner B].
Wszystko w porzadku. Dziala wszystko zgodnie z zalozeniami.

I teraz najciekawsze
Po trzecim uruchomieniu (i kazdym nastepnym) wykonuje sie czesc BanneraA, mimo ze w pliku sn_cookieA.sn jest wartosc 1(!) i kod nie ma prawa sie wykonac!!!

Poradzcie bo wpadne w depresje :-D
Vieri
viraptor
Zaczyna działać
Zaczyna działać
Posty: 633
Rejestracja: pn cze 28, 2004 12:58 pm
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: viraptor »

Nie sądzisz, że
[php]<?php
if(rand(0,1))
echo 'banner a';
else
echo 'banner b';
?>[/php]
Załatwia sprawę typowej rotacji 2 banerów? ;)
No i nie rozumiem po co piszsz do 2 plików 1/0 jak możesz do tego celu tylko 1 użyć...
VieriX
Nowy
Nowy
Posty: 22
Rejestracja: wt maja 10, 2005 5:26 pm
Lokalizacja: Polska
Kontakt:

Re: [PHP][Problem] Błąd składni w dziwnym miejscu

Post autor: VieriX »

Hahaha jakie smieszne :-D
Ja tu sie prezentuje z moim super ekstra kodem na 50 linijek a Ty mi takie cos wystawiasz z 4 ledwo. Tak serio to dzieki :wink:

Pozdrawiam serdecznie
Vieri
ODPOWIEDZ