Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]komunikaty
Forum PHP.pl > Forum > Przedszkole
GranDi88
Witam,

problem mam banalny aczkolwiek strasznie pochłaniający mi czas.
Chciałbym zrobić 'coś' co w jednej zmiennej będzie wyświetlało rożne wartości w zależności od zdarzenia na stronie.
Prościej - przykład:
  1. $komunikat = "brak";
  2.  
  3. if($a =="a")
  4. {
  5. $komunikat = "A";
  6. }
  7. else if($b == "b")
  8. {
  9. $komunikat = "B";
  10. }
  11.  
  12. echo $komunikat;


Przykład jest tego co chce choć wiem że nie tak ten kod powinien wyglądać. Problem właśnie w tym że jego poprawnej formy nie potrafię 'odnaleźć' i tu prośba do Was.
Fifi209
Wszystko zależy od tego do czego konkretnie potrzebujesz taki kod.

P.S. Twój przykład powinien działać jak na moje oko.
GranDi88
Potrzebuje go do wyświetlania komunikatów zgodnie ze zdarzeniami w 'panelu administracyjnym' który piszę sobie w ramach 'autoszkolenia'.
Co to znaczy dokładnie? Dodawanie wpisu - po wykonaniu wpisu do bazy danych chcę aby zmienna komunikat przyjęła treść np "wpis wykonano poprawnie.
Dlaczego w taki sposób a nie porostu echo? No bo z tego co wiem echo działa w miejscu gdzie dany kod się dzieje a ja potrzebuje komunikat wyświetlić w innym miejscu. Jaśniej? Mam tabelkę dwa wiersze i dwie kolumny. W górnej lewej dzieje się akcja a w dolnej prawej chce wyświetlać komunikaty.
Moim zdaniem (popartym tylko własną logiką nie znajomością PHP) też powinno działać. Niestety - nie działa.
thek
Ja robię strukturę, która przechowuje komunikaty. To tablica, która przechowuje typ komunikatu i jego zawartość. Daje to mniej więcej formę:
  1. $komunikaty = array (
  2. array('type' => 'info', 'message' => 'Jakas informacyjna'),
  3. array('type' => 'error', 'message' => 'Jakiś błąd'),
  4. array('type' => 'ok', 'message' => 'Jakieś potwierdzenie')
  5. );

Jeśli trzeba sprawdzić poprawność, to liczę ile wpisów posiada "type" ustawione na error i wiem czy wszystko ok smile.gif A mogę dzięki temu przechowywać wiele komunikatów. Pomiędzy stronami przesyłam je w zmiennej sesyjnej, którą po wyświetleniu wszystkich niszczę/usuwam/zeruję, by mi się komunikaty nie powtórzyły.
GranDi88
dzięki thek. Zapewne Twoje rozwiązanie jest poprawne. Ja niestety, a może bardziej moja wiedza ogranicza się zaledwie do 'ifowania'. Cała reszta to już magia. W związku z tym proszę o opis działania taki "łopatologiczny". Chętnie przyswoję nowości.
sadistic_son
Tablica to coś w stylu wiele zmiennych w jednej. Dla Twojego przykładu można to zrobić tak:
  1. $error[0]='a';
  2. $error[1]='b';
  3. $error[2]='c';
  4. //itd...
  5. //Teraz tablica $error zawiera 3 elementy, kolejno a,b i c.
  6. //Aby wyświetlić wszystkie elementy tablicy można użyć echo w pętli foreach() albo np. print_r:
  7. foreach($error as $e){
  8. echo "$e <br />";
  9. }
  10. //lub:
  11. print_r($error);
  12. //możena też użyć if dla sprawdzenia czy w tablicy $error znajdują się szukane elementy:
  13. if(in_array('a',$error)){
  14. echo 'Komunikat A';
  15. }
  16. if(in_array('b',$error)){
  17. echo 'Komunikat B';
  18. }
  19. if(in_array('c',$error)){
  20. echo 'Komunikat C';
  21. }
  22.  
  23. if(in_array('a',$error) || in_array('b',$error) || in_array('c',$error)){
  24. echo 'Komunikat a, b lub c';
  25. }else{
  26. echo 'nieznany komunikat';
  27. }

Tworzenie tablicy z komunikatami może być np. takie:
  1. // jakies dzialanie powodujace powstanie pierwszego komunikatu:
  2. $i=0;
  3. $error[$i]='komunikat 1';
  4. //nastepne dzialanie tworzace kolejny komunikat:
  5. $i++;
  6. $error[$i]='komunikat 2';
  7. //itd. dla dowolnej liczby komunikatow
  8. //pamietac tylko nalezy aby przy dodaniu kolejnego elementu tablicy (kolejnego komunikatu) zwiekszac wartosc indexu ( czyli w tym wypadku $i) aby nie nadpisac juz istniejacych wartosci.
  9. //wyswietlasz je teraz za pomoca petli foreach() tak jak pokazalem powyzej.
GranDi88
To wyjaśnione jest w miarę dla mnie jasne, nie powiem. Jednak nie działa to tak, jak ja bym chciał (mniemam że z mojej winy). Poniżej kod którego używam.

miejsce w któ®ym chce, aby komunikaty się wyświetlały zależnie od zdarzenia
  1.  
  2. if(in_array('dodanie',$error))
  3. {
  4. echo "<p class='info_text'>wpis został poprawnie dodany</p>";
  5. }
  6. else if(in_array('wyszukanie',$error))
  7. {
  8. echo "<p class='info_text'>wyniki wyszukiwania znajdują się poniżej</p>";
  9. }
  10. else if(in_array('poprawienie',$error))
  11. {
  12. echo "<p class='info_text'>wpis został poprawnie poprawiony</p>";
  13. }
  14. else if(in_array('usuniecie',$error))
  15. {
  16. echo "<p class='info_text'>wpis został poprawnie usunięty</p>";
  17. }
  18. else
  19. {
  20. echo "<p class='info_text'>jesteś zalogowany i możesz w pełni korzystać z systemu</p>";
  21. }

powyższy fragment zwraca mi błąd:
Warning: in_array() [function.in-array]: Wrong datatype for second argument in... (tyle razy ile ifów jest)

i miejsce w który po wykonaniu odpowiedniego warunku (ifa) generuje się komunikat
  1. $i=0; // pierwszy
  2. $i++; // każdy kolejny
  3. $error[$i]='usuniecie';
CuteOne
  1.  
  2. $error = 'usuniecie';
  3.  
  4. switch($error) {
  5.  
  6. case 'usuniecie':
  7. echo "<p class='info_text'>wpis został poprawnie usunięty</p>";
  8. break;
  9.  
  10. case 'dodanie':
  11. echo "<p class='info_text'>wpis został poprawnie dodany</p>";
  12. break;
  13. // itd...
  14. }
GranDi88
Dokładnie tak wygląda u mnie całość. Czy jest OK?

  1. <form name="form1" method="post" action="">
  2. <input type="submit" name="komuniakt" id="komuniakt" value="dodanie">
  3. </label>
  4. <input type="submit" name="komunikat" id="komunikat" value="wyszukanie">
  5. <input type="submit" name="komunikat" id="komunikat" value="poprawienie">
  6. <input type="submit" name="komunikat" id="komunikat" value="usuniecie">
  7. </form>

  1. $komuniakt = $_POST['komuniakt'];
  2.  
  3. $komunikat = "logowanie";
  4.  
  5. switch($komunikat) {
  6. case "usuniecie":
  7. echo "<p class='info_text'>wpis został poprawnie usunięty</p>";
  8. break;
  9.  
  10. case 'dodanie':
  11. echo "<p class='info_text'>wpis został poprawnie dodany</p>";
  12. break;
  13.  
  14. case 'wyszukanie':
  15. echo "<p class='info_text'>wyniki wyszukiwania znajdują się poniżej</p>";
  16. break;
  17.  
  18. case 'poprawienie':
  19. echo "<p class='info_text'>wpis został poprawiony</p>";
  20. break;
  21.  
  22. case "logowanie";
  23. echo "<p class='info_text'>jesteś zalogowany</p>";
  24. break;
  25. }


Bo nie działa niestety...
Kamil Pietrzak
1. W 3 wierszu nadpisujesz zmienna. Czyli nie ma wartosci $_POST['komunikat'], tylko 'logowanie'
2. masz literowke w pierwszym wierszu - zobacz co wpisales w $_POST['']
3. w ostatnim case masz srednik, a nie dwukropek

tak poza tym
zle uzywasz " i '
podwojny cudzyslow uruchamia specjalny mechanizm PHP, ktory wyszukuje w nim zmiennych, wyrazen regularnych etc.
czyli tam gdzie nie trzeba, nie uzywa sie podwojnego, tylko pojedynczego

zle:
  1. echo "<p class='info_text'>wyniki wyszukiwania znajdują się poniżej</p>";


dobrze:
  1. echo '<p class="info_text">wyniki wyszukiwania znajdują się poniżej</p>';


tym bardziej, ze w HTML'u teraz bedziesz mial dobre cudzyslowy

popraw jeszcze cudzyslowy w case "logowanie" etc.
choc tam jakos dziwnie tego uzywales - na zmiane:D

Do tego dobrym nawykiem jest robic wciecia w kodzie
tak:
  1. $komuniakt = $_POST['komuniakt'];
  2.  
  3. $komunikat = "logowanie";
  4.  
  5. switch($komunikat)
  6. {
  7. case "usuniecie":
  8. echo "<p class='info_text'>wpis został poprawnie usunięty</p>";
  9. break;
  10.  
  11. case 'dodanie':
  12. echo "<p class='info_text'>wpis został poprawnie dodany</p>";
  13. break;
  14.  
  15. case 'wyszukanie':
  16. echo "<p class='info_text'>wyniki wyszukiwania znajdują się poniżej</p>";
  17. break;
  18.  
  19. case 'poprawienie':
  20. echo "<p class='info_text'>wpis został poprawiony</p>";
  21. break;
  22.  
  23. case "logowanie";
  24. echo "<p class='info_text'>jesteś zalogowany</p>";
  25. break;
  26. }


Oczywiscie nie robi sie tego walac w spacje, tylko poprzez rozne funkcje edytorow tekstu
do windowsa dobry jest np. KED
GranDi88
Cytat(Kamil Pietrzak @ 5.11.2010, 07:24:20 ) *
1. W 3 wierszu nadpisujesz zmienna. Czyli nie ma wartosci $_POST['komunikat'], tylko 'logowanie'
2. masz literowke w pierwszym wierszu - zobacz co wpisales w $_POST['']
3. w ostatnim case masz srednik, a nie dwukropek

1. Fakt, nie wpadłem na to.
2. tyle razy to sprawdzałem i jeszcze przeoczyłem - efekty zabawy po nocach (zamiast spać).
3. też niedopatrzenie

Cytat(Kamil Pietrzak @ 5.11.2010, 07:24:20 ) *
tak poza tym
zle uzywasz " i '
podwojny cudzyslow uruchamia specjalny mechanizm PHP, ktory wyszukuje w nim zmiennych, wyrazen regularnych etc.
czyli tam gdzie nie trzeba, nie uzywa sie podwojnego, tylko pojedynczego

Dzięki za info. Znowu coś nowego. Zawsze "na oślep" wpisywałem i sprawdzałem - działa nie działa?

Cytat(Kamil Pietrzak @ 5.11.2010, 07:24:20 ) *
Oczywiscie nie robi sie tego walac w spacje, tylko poprzez rozne funkcje edytorow tekstu
do windowsa dobry jest np. KED


Używam maca i nie mam żadnego fajnego programiku. Dreamweaver ale czy taką opcje posiada? Nie spotkałem nigdzie tongue.gif

Dzięki za pomoc - teraz działa.
Mephistofeles
Taba na macu nie ma? A jak nie tongue.gif to chociaż 2 spacje wstawiaj.
Kamil Pietrzak
To nawet lepiej, ze maca.

Na bank cos jest - tabulatory, kolorowanie skladni itd. to rzecz powszechna
zobacz to: http://pl.wikipedia.org/wiki/Por%C3%B3wnan...r%C3%B3w_tekstu
GranDi88
"rożne funkcje edytorów tekstu" - takie padło hasło. TAB nie jest funkcją edytora teksu. A skoro napisano że nie spacje to uznałem że i nie TABY (choć ich właśnie używam). Myślałem że jest w programach opcja która układa poprawnie kod sama. Jak np we flashu.
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.