Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]nie potrafię zidagnozować błędu złej interpretacji ścieżki
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Niezbędny jest cały kod:
http://wklejto.pl/115574
Chodzi mi o to, że jeśli w bazie ścieżka avatara='sciezka', to pole value ma przyjmować wartość '';, czyli nic. I to działa. Jednak jeśli ktoś wpisze poprawną ścieżkę obrazka = nie bierze tego pod uwagę i nie aktualizuje ścieżki. Przed wprowadzeniem ifa ze ścieżką '';, wszystko działało. Jak to naprawić?
Kshyhoo
Przypisujesz:
  1. if($r['avatar']='sciezka'){

A gdzie deklarujesz?
Pcbecaw
wyżej (zamiast id, to błąd przy kopiowaniu)
  1. $ccc = $r['avatar'];


co w tym może być nie tak? Próbowałem wstawiać ten kod w różne miejsca, ale nic. Może wstawić jakiś osobny kod do samego value? Np. include w value? Ale to chyba będzie to samo :/
Kshyhoo
Podajesz kod do poprawki, który jest błędny - nic dziwnego, że nie ogarniasz. Wklej kod, przed poprawkami i napisz, co chcesz osiągnąć.
Pcbecaw
Działający kod - http://wklejto.pl/115582
Chciałbym zrobić tak, że jeśli w bazie ścieżka avatara = 'sciezka', to value pola avatar będzie puste. A jeśli ścieżka jest inna (poprawna), to ścieżka avatara = poprawna ścieżka avatara w value.

Szukałem przykładu takiego czegoś, ale w necie coś pusto (czyt. na bank źle szukałem). Próbuje to zrobić już od 3h i nic...
Kshyhoo
Np.:
  1. // tu pobierasz dane z bazy
  2. while($r = mysql_fetch_assoc($wynik)) {
  3. $id = $r['id'];
  4. }
  5. }
  6.  
  7. // sprawdzasz, czy $r['avatar'] to "sciezka"
  8. if($r['avatar'] = 'sciezka') {
Pcbecaw
http://wklejto.pl/115592
Jeśli usunę wszystkie deklaracje zmiennej $avatar, to ZAWSZE wyświetla się w value 'nic' i na dodatek nie działa sprawdzanie wprowadzonej ścieżki, a jeśli nie usunę wszystkich deklaracji zmiennej $avatar, to w ogóle nie działa.
Co z tym jest nie tak?
wujek2009
drobna uwaga;
  1. if($r['avatar']='sciezka'){


ten warunek ma służyć porównaniu, zgadza się?
porwónujemy za pomocą == za pomocą jednego = przypisujemy wartości wink.gif
Pcbecaw
wiem wiem, próbowałem na różne sposoby, z podwójnym == też. Wciąż to samo. Coś z tym musi chyba kolidować.
wujek2009
pod;
  1. if($r['avatar'] = 'sciezka') {$avatar='nic';}

daj
  1. var_dump($r, $has1, $avatar);


sprawdź czy w ogóle $r cokolwiek zwraca - moim zdaniem ta pętla while jest kompletnie zbędna - skoro pobierasz tylko JEDEN rekord
to zapis;
  1. $r = mysql_fetch_assoc($wynik);

zupełnie wystarczy

wklej tutaj wyniki z tego var dumpa co wyżej podałem


poza tym ma być == i tyle - tutaj nie ma co kombinować - porównujesz wartości więc ==
Pcbecaw
bool(false) int(1) string(16) "sciezkaasdasdasd"

to "sciezkaasdasdasd", jest po wpisaniu błędnej ścieżki.

kawałek kodu:
  1. if($r['avatar'] == 'sciezka') {$avatar='nic';}
  2. var_dump($r, $has1, $avatar);
wujek2009
$r zwraca false więc właściwie ten warunek wygląda następująco;
  1. if ( false == 'sciezka' ) $avatar = 'nic'


krótko mówiąc warunek się nie sprawdza więc nie wyświetla komunikatu "nic"
weź tą pętle while zmień na to co pisałem post wyżej
  1. $r = mysql_fetch_assoc($wynik);
Pcbecaw
  1. $wynik = mysql_query("SELECT * FROM test WHERE nick='{$_SESSION['nick']}'")
  2. or die('Błąd zapytania');
  3. $has1 = mysql_num_rows($wynik);
  4. if($has1 > 0) {
  5. $r = mysql_fetch_assoc($wynik);
  6. $id = $r['id'];
  7. }
  8. if($r['avatar'] == 'sciezka') {$avatar='nic';}
  9. var_dump($r, $has1, $avatar);

jak to się zrobi poprawnie, to zamienie pobieranie wszystkich, na pobieranie tylko tego pola 'avatar', ale póki co:
Cytat
array(15) { ["id"]=> string(2) "14" ["data"]=> string(19) "2012-01-24 21:55:24" ["nick"]=> string(4) "test" ["haslo"]=> string(128) "305c8c9adff888078b0433cf23a5ab7172851447a4c9edb18abbc854afce3daba27c5760d2d
cf324bea43633fe853e5fbb3f3c8c73eb2804fb2ea9ff5323a6e5" ["email"]=> string(12) "test@test.pl" ["ip"]=> string(9) "127.0.0.1" ["imie"]=> string(9) "dsadadsgs" ["nazwisko"]=> string(0) "" ["telefon"]=> string(0) "" ["gg"]=> string(0) "" ["skype"]=> string(0) "" ["miejscowosc"]=> string(0) "" ["www"]=> string(0) "" ["avatar"]=> string(7) "sciezka" ["kod"]=> string(31) "P36Z2G3CDHBM977RL7B3ZKZB8YTWWC7" } int(1) string(3) "nic"

i nie działa
wujek2009
zmieniasz dane, które chcesz porównać (w warunku IF) oraz zmieniasz dane, ktore pobiera zapytanie - teraz właściwie nie wiem jaki efekt ma być końcowy...

bo widzę, że zapytanie zwraca Ci jakieś rekordy - i widzę, że dla kolumny "avatar" jest "sciezka" więc warunek powinien się sprawdzić i pod zmienną $avatar powinno pojawić się "nic"
Pcbecaw
http://wklejto.pl/115597
Tak wygląda ten cały kod. Koliduje to z tymi innymi zmiennymi zdefiniowanymi niżej ($avatar). Po ich usunięciu w value znajduje się nic, ale wtedy już olewa sprawdzanie ścieżki i zawsze pokazuje 'nic'.
Chciałbym zrobić tak, że jeśli w bazie ścieżka avatara = 'sciezka', to value pola avatar będzie puste. A jeśli ścieżka jest inna (poprawna), to ścieżka avatara = poprawna ścieżka avatara w value.

a moment, nie. Teraz zauważyłem, że w tablicy zmienia się ścieżka i zapewne chodzi tutaj o dodanie odpowiedniego else do podanego wyżej warunku. jednak
  1. if($r['avatar'] == 'sciezka') {$avatarr='nic';}else{$avatarr='cos';}
sprawia, że non stop pojawia się 'nic'.

avataRR dlatego, że zmieniłem, żeby nie kolidowało. Teraz już prawie jesteśmy przy końcu, tylko potrzeba odpowiedniego else zapewne.
wujek2009
czyli co właściwie pozostało do zrobienia? na który kod mam patrzeć - gdzie else trzeba dodać i co ma robić te "else"?
Pcbecaw
http://wklejto.pl/115601
To jest cały kod, z błędną końcówką. Bo jeśli wpisze sie dobra sciezke - aktualizuje ja do bazy, ale w dalszym ciagu w value widnieje 'nic'. jesli wpisze sie błędną, to nie aktualizuje sciezki i to jest dobre. Teraz trzeba zrobic, żeby po wpisaniu dobrej ścieżki pokazywało tą dobrą ścieżke z bazy.

cholera, jeszcze coś nie tak. bo zauwazylem, ze zeby efekt był widoczny, trzeba 2x wyslac taki sam formularz...
o co tu chodzi sad.gif
potreb
Po zapisie do bazy zrób przekierowanie header('location: plik.php');
lub
Jeżeli poprawnie zapisano pobieraj dane z posta do form zamiast z db
Pcbecaw
nie rozumiem.
Btw. dlaczego tak się dzieje? Przecież do tej pory wszystko było elegancko, tylko teraz jakieś problemy.
untorched
Dzieje się tak, ponieważ najpierw pobierasz dane, a później je zmieniasz. Musiałbyś po zaktualizowaniu znów odczytać z bazy.. : )
Pcbecaw
Teraz to mam w głowie totalny whiskas... Totalnie się wypaliłem po analizowaniu tego od 3h...
Przed tym co mi się zachciało w tym temacie, wszystko było ok. Czyli aktualizowało nabieżąco. W tym co teraz wprowadziliśmy musi tkwić błąd, tylko jaki?

Może spasuję i zostawię wyświetlanie domyślnej ścieżki? sad.gif
Nie będzie to chyba taka najgorsza opcja?

Btw... jestem idiota, naprawdę...
Bez wszystkiego, co tutaj robilismy
http://wklejto.pl/115612
wystarczyło przypisać do zmiennej $sciezka='';...
Tyle zawracania głowy moją głupotą... Przepraszam za moje durne niedopatrzenie.

... jednak znowu sie pomyliłem. pieprzyć to, rezygnuje...
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.