Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Cookies jednocześnie po wysłaniu formularza
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Mam taki kod:
http://wklejto.pl/115650
i pytanie, jak zrobić, żeby wysłać ciastka i odczytać je od razu po naciśnięciu przycisku 'zapisz'?
Chodzi o to, że jak teraz ustawię zwyczajnie ciastka (niejednocześnie z nacisnieciem 'zapisz'), to wyśle ciastka, i dopiero po drugim wyslaniu tego samego formularza je odczyta. Jak zrobić to równocześnie?
gorden
javascript->ajax
Pcbecaw
a nie wystarczy umieszczone w odpowiednim miejscu przekierowanie (odswiezenie)? header location...
Tylko nie wiem gdzie to umieścić.
gorden
to po ustawieniu ciastka daj np echo z tagiem html który odświeży stronę, albo header("refresh:$timeout") ale to może być irytujące dla użytkowników
Pcbecaw
To może lepiej wybiorę dobre dane, a złe usunę i wyświetlę komunikat.
Btw. można kilka ifów opleść jednym i zrobić coś takiego, że jeśli w którymś ifie w środku wystąpiło 'else', to ma być określony komunikat np. 'dane nie zmienione', a jeśli wszystkie ify w srodku są prawidłowe, to 'dane zmienione'?
gorden
operator or, lub inaczej ||
Pcbecaw
Mógłbyś podać na małym przykładzie? bo nie bardzo rozumiem:
mam np. cos takiego:
  1. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $imie) && !empty($imie))
  2. {
  3. echo 'imie';
  4. }
  5. else
  6. {
  7. $zapytanie1 = 'UPDATE `test` SET `imie`="'.$imie.'" WHERE `id`="'.$id.'"';
  8. $idzapytania1 = mysql_query($zapytanie1) or die(mysql_error());
  9. }
  10.  
  11. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $nazwisko) && !empty($nazwisko))
  12. {
  13. echo 'nazwisko';
  14. }
  15. else
  16. {
  17. $zapytanie2 = 'UPDATE `test` SET `nazwisko`="'.$nazwisko.'" WHERE `id`="'.$id.'"';
  18. $idzapytania2 = mysql_query($zapytanie2) or die(mysql_error());
  19. }

i chciałbym to opleść w ifa, w którym sprawdzałoby, czy w którymś z ifów w środku wystąpiło else. Jeśli tak, odpowiedni komunikat, jesli nie, tez odpowiedni komunikat.
gorden
operator and (i) - &&
operator or (lub) - ||
analogicznie.

poza tym w tym kodzie masz błąd, bo zamiast and powinno być or.
  1. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $imie) || !empty($imie) || !preg_match('/^[a-ząćęłńóśźż]*$/ui', $nazwisko) || !empty($nazwisko)) {
  2. echo 'źle wypełnione dane';
  3. } else {
  4. $zapytanie1 = mysql_query('zapytanie');
  5. //...................................
  6. echo 'wykonano zapytania';
  7. }
Pcbecaw
Tak, tylko, że ja chcę pokazać co użytkownik źle wpisał, a nie tylko poinformować go 'coś zepsułeś, coś popraw'.
gorden
w takim razie użyj elseif
Pcbecaw
Chciałbym zrobić wszystkie warunki, a nie pokolei:
popraw pole1 - po poprawieniu - popraw pole 2.
Chciałbym od razu pokazać, co jest do poprawy, czyli:
"Popraw następujące pola: pole1, pole2"...
Jak to zrobić?
gorden
hmm... pierwsze co mi przyszło do głowy to stworzyć tablicę, gdzie będziesz dodawać pola.
  1. if(coś_źle_poszło) {
  2. $bledy[] = 'pole1';
  3. }
  4. //...........
  5. echo 'Błędy do poprawy: ';
  6. foreach($bledy as $blad) {
  7. echo $blad.', ';
  8. }

(użyj tego razem z else if)
Pcbecaw
w ogóle nie rozumiem co napisałeś. zupełnie...
jak mam w tym zagnieździć te elseify, nie rozumiem sciana.gif
gorden
linia 11, dodaj przed if - else.
linie 5-9 skasuj, zostaw jedynie zapytania, które dodasz do else w 15 linii
cała logika. odesłałem Cię do manuala elseifa więc powinieneś się z nim zapoznać i oszczędzić mi tych kilku linijek tłumaczenia... dalej to co napisałem - zamiast echo dodawaj elementy do tablicy. później foreach

Cytat
w ogóle nie rozumiem co napisałeś. zupełnie...

kurs php: tablice i pętle. myślałem, że jak bierzesz się za mysql (aby móc manipulować danymi, które zwraca baza po stronie php, musisz umieć posługiwać się tablicami i pętlami) to już masz takie proste rzeczy przyswojone.
Pcbecaw
elseify to rozumiem, ale nie wiem jak mam je zagnieździć w tablicach, które przykładowo napisałeś.
gorden
chyba odwrotnie. no ale ja już rozwiązanie dwukrotnie podałem.
  1. if(coś_źle_poszło) {
  2. $bledy[] = 'pole1';
  3. }

Cytat
zamiast echo dodawaj elementy do tablicy


ale i tak oboje wiemy do czego zmierzamy. teraz pokaż co sam masz.
Pcbecaw
nie, nie proszę o gotowca, jeśli to sugerujesz, chcę się nauczyć tego, a nie tylko wykonać jednorazowo.
Mam tak:
  1. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $imie) && !empty($imie))
  2. {
  3. echo 'imie';
  4. }
  5.  
  6. elseif(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $nazwisko) && !empty($nazwisko))
  7. {
  8. echo 'nazwisko';
  9. }
  10. else
  11. {
  12. $zapytanie2 = 'UPDATE `test` SET `imie`="'.$imie.'", `nazwisko`="'.$nazwisko.'" WHERE `id`="'.$id.'"';
  13. $idzapytania2 = mysql_query($zapytanie2) or die(mysql_error());
  14. }

Czytam to już piąty raz, ale nadal nie wiem jak dodawać te błędy do tablicy.
Przeczytałem to - http://php.net/manual/en/language.types.array.php jednak nie za bardzo jak zaimpletować to kod, który już mam.
gorden
hmm... zamiast echo (linie 3 i 8) daj $bledy[] =
$bledy[] = 'nazwisko';
$bledy[] = 'imie';

pod tymi warunkami zrób identyczny foreach jak z mojego przykładu.
ps. zapomniałeś o pierwszym zapytaniu
Pcbecaw
ale moment, bo zmierzamy do rzeczy, którą już miałem.
Mi chodzi o to, żeby prawidłowo wykonane pola dodawały się do bazy, a tylko te złe się wyświetlały (podczas gdy dobre już są do bazy dodane). Bo teraz dodając te elseify to tylko wyświetli błędy co złe, a nie doda poszczególnych rekordów, jeśli będą one dobre.
I to też już mam, tylko, że chcę dać komunikat:
'Wszystko poprawnie dodane' lub 'popraw następujące błędy'
wszystko, co mam:
  1. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $imie) && !empty($imie))
  2. {
  3. echo 'imie';
  4. }
  5. else
  6. {
  7. $zapytanie1 = 'UPDATE `test` SET `imie`="'.$imie.'" WHERE `id`="'.$id.'"';
  8. $idzapytania1 = mysql_query($zapytanie1) or die(mysql_error());
  9. }
  10.  
  11. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $nazwisko) && !empty($nazwisko))
  12. {
  13. echo 'nazwisko';
  14. }
  15. else
  16. {
  17. $zapytanie2 = 'UPDATE `test` SET `nazwisko`="'.$nazwisko.'" WHERE `id`="'.$id.'"';
  18. $idzapytania2 = mysql_query($zapytanie2) or die(mysql_error());
  19. }
  20.  
  21. if(!preg_match('/^[0-9]*$/ui', $telefon) && !empty($telefon))
  22. {
  23. echo 'telefon';
  24. }
  25. else
  26. {
  27. $zapytanie3 = 'UPDATE `test` SET `telefon`="'.$telefon.'" WHERE `id`="'.$id.'"';
  28. $idzapytania3 = mysql_query($zapytanie3) or die(mysql_error());
  29. }
  30.  
  31. if(!preg_match('/^[0-9]*$/ui', $gg) && !empty($gg))
  32. {
  33. echo 'gg';
  34. }
  35. else
  36. {
  37. $zapytanie4 = 'UPDATE `test` SET `gg`="'.$gg.'" WHERE `id`="'.$id.'"';
  38. $idzapytania4 = mysql_query($zapytanie4) or die(mysql_error());
  39. }
  40.  
  41. if(!preg_match('/^[a-ząćęłńóśźż]*$/ui', $miejscowosc) && !empty($miejscowosc))
  42. {
  43. echo 'miejscowosc';
  44. }
  45. else
  46. {
  47. $zapytanie5 = 'UPDATE `test` SET `miejscowosc`="'.$miejscowosc.'" WHERE `id`="'.$id.'"';
  48. $idzapytania5 = mysql_query($zapytanie5) or die(mysql_error());
  49. }
  50.  
  51. if(!preg_match('/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \?=.-]*)*\/?$/iu', $www) && !empty($www))
  52. {
  53. echo 'www';
  54. }
  55. else
  56. {
  57. $zapytanie6 = 'UPDATE `test` SET `www`="'.$www.'" WHERE `id`="'.$id.'"';
  58. $idzapytania6 = mysql_query($zapytanie6) or die(mysql_error());
  59. }
  60.  
  61. if(!empty($avatar)) {
  62. list($width, $height, $type, $attr) = @getimagesize($avatar);
  63.  
  64. if($type==1 || $type==2 || $type==3)
  65. {
  66. $zapytanie7 = 'UPDATE `test` SET `avatar`="'.$avatar.'" WHERE `id`="'.$id.'"';
  67. $idzapytania7 = mysql_query($zapytanie7) or die(mysql_error());
  68. }
  69. else
  70. {
  71. $zapytanie8 = 'UPDATE `test` SET `avatar`="'.$sciezka.'" WHERE `id`="'.$id.'"';
  72. $idzapytania8 = mysql_query($zapytanie8) or die(mysql_error());
  73. echo 'przypisz ścieżke domyślną i daj komunikat, że zepsuł ściezke avatara';
  74. }}
  75. else
  76. {
  77. $zapytanie9 = 'UPDATE `test` SET `avatar`="'.$sciezka.'" WHERE `id`="'.$id.'"';
  78. $idzapytania9 = mysql_query($zapytanie9) or die(mysql_error());
  79. }}

Teraz chciałbym to opleść w takiego jednego ifa, który poinformuje, że wszystko się dobrze zrobiło, lub coś jest do poprawki i wtedy wyświetlą się odpowiednie rzeczy do poprawki.
gorden
no to bez elseifa, czyli tak, jak jest teraz. tam gdzie echo dodajesz też elementy do tablicy $bledy[]. a żeby sprawdzić ilość błędów użyj count($bledy)
Pcbecaw
Ok, działa, ale mam jeszcze pytanie, jak do tego:
  1. $result = count($arr);
dodać taki komunikat w stylu:
Popraw następujące błedy:
//i tutaj wyświetlenie result (czyli błędów).

i analogicznie, jeśli błędy nie wystąpiły, to też odpowiedni komunikat. Może ifa w stylu
  1. if(!isset(result)){echo'błędy nie wystąpiły';}

a jeśli wystąpiły, to
  1. if(isset(result)){echo'popraw błędy:';count($arr);}

?

A ogólnie to dobrze dodaję to w miejsce echo?
  1. echo $arr['www'];

czy może tak?
  1. echo $arr['www']='www';


Ok, rozwiązałem wszystko tablicami (30min kursu, warto było poświęcić). Dzięki wszystkim za pomoc wink.gif
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.