Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP]AJAX + PHP Update formularza.
Forum PHP.pl > Forum > Przedszkole
casperii
Witam, mam kod:

  1. //update
  2. $(document).ready(function(){
  3. $('#upd_data_personal').submit(function(){
  4. //$('#info').hide();
  5. var form = $(this),
  6. formData = form.serialize(),
  7. formUrl = form.attr('action'),
  8. formMethod = form.attr('method'),
  9. responseMsg = $('#info_upd_data');
  10. responseMsg.hide()
  11. .addClass('response-waiting')
  12. .text('proszę czekać...')
  13. .fadeIn(200);
  14. //alert("Data: " + formData);
  15.  
  16. $.ajax({
  17. //type: "POST",
  18. type: formMethod,
  19. url: "/ajax/AjaxUpdateData.php",
  20. data: formData,
  21. processData: false,
  22. contentType: false,
  23. success: function(data){
  24.  
  25. var responseData = jQuery.parseJSON(data),
  26. klass = '';
  27. switch(responseData.status){
  28. case 'error':
  29. klass = 'response-error';
  30. break;
  31. case 'success':
  32. klass = 'response-success';
  33. break;
  34. }
  35.  
  36. responseMsg.fadeOut(200,function(){
  37. //$('#info').hide();
  38. $(this).removeClass('response-waiting')
  39. .addClass(klass)
  40. .text(responseData.message)
  41. .fadeIn(200,function(){
  42. setTimeout(function(){
  43. responseMsg.fadeOut(200,function(){
  44. $(this).removeClass(klass);
  45. //$('#info').show();
  46. });
  47. },3000);
  48. });
  49. });
  50. }
  51. });
  52. return false;
  53. });
  54. });
  55. //end update


oraz:

  1. <form id="upd_data_personal" action="/profil.html" method="GET">
  2. Imię: <input type="text" name="imie" value="<?=$row2['name'];?>">
  3. <input type="submit" id="submit-data" disabled="" name="upd_data_personal" value="zapisz" class="button">
  4. </form>


Jak to prześlę metodą GET wszystko jest ok i aktualizuje w bazie. Natomiast jak odbiorę form methodą post to tak jakby nie przesyłał tego.
A tak odbieram sobie w php dane.
  1. $name = $_GET['imie'];


Zatem pytanie brzmi co robią źle ? :-)
Mega_88
Dziś czas na strzał smile.gif

Może:

  1. $.ajax({
  2. type: "POST", ( usuń // )


Może zamiast:
  1. $name = $_GET['imie'];


To:
  1. $name = $_POST['imie'];
casperii
Cytat(Mega_88 @ 6.05.2015, 21:10:48 ) *
Dziś czas na strzał smile.gif

Może:

  1. $.ajax({
  2. type: "POST", ( usuń // )


Może zamiast:
  1. $name = $_GET['imie'];


To:
  1. $name = $_POST['imie'];


Kolego, Ty widzisz co ty piszesz ? //type:POST zostało zakomentowane, ponieważ mam type: formMethod czyli pobiera mi taką metodę jaką mam w formie. Nawet jak ustawie na sztywno type post to i tak nic to nie daje. Chyba masz mnie za kretyna , że zmieniając Ajax Type z GET na POST nie zmienił bym typu zmiennych z GET na POST. Obstawiam, że gdzieś problem tkwi w JS.
Mega_88
Cytat(casperii @ 6.05.2015, 21:15:41 ) *
Kolego, Ty widzisz co ty piszesz ? //type:POST zostało zakomentowane, ponieważ mam type: formMethod czyli pobiera mi taką metodę jaką mam w formie. Nawet jak ustawie na sztywno type post to i tak nic to nie daje. Chyba masz mnie za kretyna , że zmieniając Ajax Type z GET na POST nie zmienił bym typu zmiennych z GET na POST. Obstawiam, że gdzieś problem tkwi w JS.


Nie to żebym Ci spamował w temacie, ale piszesz w dziale przedszkole, różne osoby się przewijają z różnym poziomem wiedzy i nawet orły popełniają głupie błędy. Mój zakres wiedzy w tym temacie jest niski dlatego proste "PODPOWIEDZI" (strzały) z mojej strony, które rzuciły mi się w oczy ( typ zmiennych z GET na POST ). Widzę jednak, że ...

Nie, nie miałem Cię za kretyna facepalmxd.gif

P.S - może zmień rozszerzenie pliku z .html na .php facepalmxd.gif
IProSoft
Sprawdziłem Twój kod dla POST i działa poprawnie więc błąd masz pewnie gdzieś w odbiorze danych, sprawdź var_dump( $_POST ); w pliku php.

PS: nie rzucaj się na kogoś kto chce Ci pomóc, zachowaj troche kultury i odpisuj normalnie.
casperii
Cytat(IProSoft @ 6.05.2015, 22:09:28 ) *
Sprawdziłem Twój kod dla POST i działa poprawnie więc błąd masz pewnie gdzieś w odbiorze danych, sprawdź var_dump( $_POST ); w pliku php.

PS: nie rzucaj się na kogoś kto chce Ci pomóc, zachowaj troche kultury i odpisuj normalnie.


Odpisuje normalnie, ale jak ktoś nie wie o czym pisze i w ten sposób chce pomóc to chyba można się zirytować.

Nie wiem w jaki sposób Ci to działa, ale zobacz co daje to w php:

  1. if(isset($_POST['imie'])){
  2. $imie=$_POST['imie'];
  3. }else{
  4. $imie='nie ma';
  5. }
  6. $status = "success";
  7. $message = 'ok '.$imie.'';
  8.  
  9. $data = array(
  10. 'status' => $status,
  11. 'message' => $message
  12. );
  13.  
  14. echo json_encode($data);
  15. ?>


Za cholere PHP nie widzi tutaj przesłanego metodą post zmiennej.
IProSoft
Usuń contentType: false,
casperii
Cytat(IProSoft @ 6.05.2015, 23:22:08 ) *
Usuń contentType: false,


Super! pomogło :-) Wiedziałem, że to jest wina JS. Powiedz mi, dlaczego z $_GET to działało, ale z $_POST już nie?

Jeszcze mam pytanie, nad tym formem co wysyłam postem, mam w divie wartość imię wyciągane z bazy, czy da się w ten mój kod wstawić jakieś odświeżenie i pobranie nowej wartości tej nadpisanej z bazy? Chodzi mi bez przeładowywanie strony.

<div id="imie"><?= $row['imie'];?></div>

Panowie czy tylko jedynym rozwiązaniem będzie load(scieżka do pliku) ? lub rehresh strony?
Jeszcze raz napiszę co chcę osiągnąć.
Mam div potem form który updatuje się poprzez ajax. Czyli tak na szybko:

<script> ajax </script>

<div id="imie">Tu chcę aktualizować imię </div>
<form><input name="imie">
</form>

Czy ma ktoś jakiś pomysł ?
salfunglandyare
Nie musisz z bazy:
  1. //...
  2. case 'success':
  3. klass = 'response-success';
  4. jQuery('#imie').text(jQuery('input[name="imie"]').val());
  5. break;
  6. //...

ale jeśli koniecznie chcesz, dodaj
  1. $data = array(
  2. 'status' => $status,
  3. 'message' => $message,
  4. 'imie' => $imie_z_bazy
  5. );

i wtedy:
  1. jQuery('#imie').text(responseData.imie);
casperii
w sumie to mnie zadowoli:
jQuery('#imie').text(jQuery('input[name="imie"]').val());

tylko trochę po modyfikacji :

$('#loadName').text($('input[name="imie"]').val()); // tu chce dodać input[name="nazwisko"].val()

Dzięki, a jak zrobić kolego by w diva loadName dać dwie wartości oddzielony spacją?

salfunglandyare
Dodaj biggrin.gif
  1. $('#loadName').text($('input[name="imie"]').val()+' '+$('input[name="nazwisko"]').val());
viking
Odpowiadając na twoje pytanie dlaczego z POST nie działało. PHP przetwarza w POST dane pochodzące wyłącznie z application/x-www-form-urlencoded albo multipart/form-data. Wszystko inne zwróci pustą tablicę. Możesz ją odczytać przez
  1. file_get_contents('php://input')
casperii
@salfunglandyare a ja mam jeszcze takie dodatkowe pytanie, jak najlepiej rozwiązań problem jeśli chciałbym osiągnąć zapis drugiego forma (a w przyszłości 3 i 4 form), w praktyce coś takiego:

  1. <form name="id="upd_data_personal" method="POST">
  2. Imię: <input name="imie" value="">
  3. <br>
  4. Nazwisko: <input="nazwisko" value="">
  5. <br>
  6. <input type="submit" value="zapisz" id="submit-data" disabled="" name="upd_data_personal">
  7. </form>
  8.  
  9.  
  10. <form method="POST">
  11. Dodatkowe pole: <input name="pole" value="">
  12. <br>
  13. <input type="submit" value="zapisz">
  14. </form>


Teraz drugi <form> jakieś pole do zapisu np. płeć </form>
I czy teraz tworzyć dwa razy to tylko z innym ID ?

  1. $('#upd_data_personal').submit(function(){
  2. ...
  3. ...


A może dla dwóch formów te same ID ale ze zmienionym URL w ajaxie ?

  1. url: "/ajax/AjaxUpdateData?page=form1.php",
  2. url: "/ajax/AjaxUpdateData?page=form2.php",


Dlaczego nie mogę zrobić tego w 1 formie? Otóż mam kilka zakładek (tab) w których mam osobne dane do zaktualizowania.
viking
W HTML5 masz <input form="">. Do tego inputy mogą być poza form.
casperii
@viking , może i racja, ale to nie największe zmartwienie czy zrobie <form>zawartość </form> <form> druga zawartość</form> czy <input form> <input form>

Tylko jak to później sprawnie pogrupować w ajax ? Czy tworzyć scirpt pod scriptem czy uda się z jednego scriptu zrobić jakiś switch ?
viking
Zależy czym konkretnie są te dane. Jeżeli jeden form jak podałeś to imię, nazwisko a drugi płeć należy to wszystko do encji osoba (przykładowo). Logiczne zatem że powinno być wysyłane do /ajax/osoba/update (przykładowo wink.gif). Po co wtedy rozbijać? Po stronie PHPa wypełnij encję osoba danymi post.
casperii
Może rozwinę swoją myśl i sposób działania.

Jest lewa i prawa strona, prawa strona wczytywana bez przeładowywania (odświeżenie) strony po wybraniu z lewej strony linku.
Załóżmy że mamy w pierwszym linku dane osobowe (imię nazwisko), oraz drugi link dane szczegółowe (płeć, data ur.).
W każdej z tych załadowanych stron pojawia się odpowiednio form oraz input. Oczywiście na początku strony w head umieszczony AJAX.

No i teraz powstało pytanie, czy tworzyć 2 x AJAX z ID tych formów. Czy może jeden raz AJAX ze switchem {form 1 , form2} a może po prostu jeden AJAX i w tym pliku PHP zrobić jakiś warunek ? Bo przecież w tym pliku php raz będę update set imie=$imie, nazwisko=$nazwisko a drugim razem w tym drugim formie data urodzenia.

Bo przecież jak zrobię na sztywno UPDATE users SET `imie` = '$imie', `nazwisko` = '$nazwisko', `data_urodzenia` = '$data_urodzenia' a zmienne nie otrzymają wartości to pola te mi się nadpiszą z pustą wartością.

Hah no chyba , żeby robić warunki if(!empty($imie)){ $dodaj_imie = '`imie` = '.$imie.''; } ?

A później UPDATE users SET $dodaj_imie, $dodaj_nazwisko itd ?

Cytat(viking @ 8.05.2015, 13:14:01 ) *
Zależy czym konkretnie są te dane. Jeżeli jeden form jak podałeś to imię, nazwisko a drugi płeć należy to wszystko do encji osoba (przykładowo). Logiczne zatem że powinno być wysyłane do /ajax/osoba/update (przykładowo wink.gif). Po co wtedy rozbijać? Po stronie PHPa wypełnij encję osoba danymi post.



Możesz mi kolego dokładnie napisać, jakby to miało wyglądać w praktyce ?
viking
Gdybyś używał jakiś ORM było by najłatwiej wink.gif

Przykład z Propela - http://propelorm.org/documentation/referen...ive-record.html
  1. // Each ActiveRecord class offers the ability to dump to and populate from an array
  2. $properties = array(
  3. 'Title' => 'War and Peace',
  4. 'ISBN' => '067003469X',
  5. 'AuthorId' => 456745
  6. );
  7. $book = new Book();
  8. $book->fromArray($properties);
  9. echo $book->getTitle(); // 'War and Peace'
  10. print_r($book->toArray());


A tak niestety trzeba się bawić w warunki.
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.