Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] append i post - nie zczytuje
Forum PHP.pl > Forum > Po stronie przeglądarki
deha21
Mam w panelu ustawienia dodawanie nowych pozycji. Po kliknięciu jquery wywołuje append, który dodane do formularza nowe pole. Okazuje się, że mimo ze to nowe pole istnieje i jest prawidłowo zapisane w formularzu to później skrypt PHP go nieczyta - a konkretniej nawet nie wysyła nowych pól bo nie widać ich w przesłanym headerze. Jest na to jakiś sposób czy trzeba to zrobić inaczej?
nospor
Pokaż kod, bo nie widzimy czy ty w ogóle robisz to tak jak trzeba.
deha21
jQuery:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. var numb = 1;
  4.  
  5. $("#add_pos").live("click", function(){
  6.  
  7. numb=numb+1;
  8.  
  9. $("#pos").append('<tr><td style="border-top:1px solid #ccc; font-weight:bold; padding-top:10px; font-size:1.1em;">Pozycja '+numb+'</td></tr><td><input type="hidden" name="pos'+numb+'_id" value="'+numb+'"><input type="text" name="pos'+numb+'_title" size="45"></td></tr><tr><td><textarea name="pos'+numb+'_description" rows="4" style="width:350px"></textarea></td></tr><tr><td><input type="text" name="pos'+numb+'_image" id="pos'+numb+'_image" autocomplete="off"><a href="filesbrowser.php?directory=files/images/glosowania&target=pos'+numb+'_image&iframe" class="fbplus"></a></td></tr><tr><td style="padding-bottom:10px"><input type="text" name="pos'+numb+'_imagebig" id="pos'+numb+'_imagebig" autocomplete="off"><a href="filesbrowser.php?directory=files/images/glosowania&target=pos'+numb+'_imagebig&iframe" class="fbplus"></a></td></tr>');
  10. return false;
  11. });
  12.  
  13. });
[JAVASCRIPT] pobierz, plaintext


Skrypt:
  1. function dodawanie($atr,$idd) {
  2. $pos_title=filtr($_POST[$atr.'_title']);
  3. $pos_description=filtr($_POST[$atr.'_description']);
  4. $pos_image=filtr($_POST[$atr.'_image']);
  5. $pos_imagebig=filtr($_POST[$atr.'_imagebig']);
  6. //echo 'Zrobione',$atr,'<br>';
  7. mysql_query("INSERT INTO glosowanie values ('','$idd','$pos_title','$pos_description','$pos_image','$pos_imagebig','0')");
  8. }
  9.  
  10. if (isset($_POST['pos1_id'])) { dodawanie('pos1',$id); }
  11. if (isset($_POST['pos2_id'])) { dodawanie('pos2',$id); }
  12. if (isset($_POST['pos3_id'])) { dodawanie('pos3',$id); }
  13.  
nospor
No ale pokaż jak wygląda formularz. Co to jest te #pos?

print_r($_POST);
jesteś pewien że to nie wyświetla ci wszystkich danych przesłanych formem?
deha21
Tak, $_POST nie wykazuje danych z nowoutworzonych pól :/ Gdy dodaję nowe pola przez jQuery to tworzą się poprawne nazwy, czyli np. pos2_id, pos2_title itd.

#pos to jest ID tabeli.

Formularz:
  1. <form method="POST" action="dodaj.php">
  2. <fieldset><legend>Dodawanie głosowania</legend>
  3. <input type="hidden" name="type" value="add">
  4.  
  5. <table id="pos">
  6.  
  7. <tr><td style="border-top:1px solid #ccc; padding-top:10px; font-weight:bold; font-size:1.1em;">Pozycja 1</td></tr>
  8. <td><input type="hidden" name="pos'1_id" value="1">
  9. <input type="text" name="pos1_title" size="45"></td></tr>
  10. <tr><td><textarea name="pos1_description" rows="4" style="width:350px"></textarea></td></tr>
  11. <tr><td><input type="text" name="pos1_image" id="pos1_image" autocomplete="off"><a href="filesbrowser.php?directory=files/images/glosowania&target=pos1_image&iframe" class="fbplus"></a></td></tr>
  12. <tr><td style="padding-bottom:10px"><input type="text" name="pos1_imagebig" id="pos1_imagebig" autocomplete="off"><a href="filesbrowser.php?directory=files/images/glosowania&target=pos1_imagebig&iframe" class="fbplus"></a></td></tr>';
  13.  
  14.  
  15. </form>
nospor
Jakoś mi się nie chce wierzyć, że print_r($_POST); nie zwraca ci tych pól. Pokaż dokładnie co zwraca
print_r($_POST);

Twój kod na pierwszy rzut oka wydaje się być ok
deha21
Zwracam mi tylko pierwsze pole, czyli te które "już jest" (bo pierwsze jest wpisane na sztywno w htmlu).
  1. Array ( [type] => addglosowanie [title] => Test [date] => 12.12.2012 [dateto] => 19.12.2012 [image] => [description] => [pos1_id] => 1 [pos1_title] => Raz raz raz [pos1_description] => [pos1_image] => [pos1_imagebig] => ) pos1

Dodałem dwa dodatkowe pola, czyli łącznie powinno być 3 a jest tylko pos1
nospor
Masz to gdzieś wystawione?

numb=numb+1;
alert(numb);
wyświetla kolejne numerki?
deha21
Alert dobrze wyświetla. Wszystko się ładnie tworzy, sprawdzałem poprawność utworzonych nowych pół narzędziem z google chrome i jest wszystko ok. Mam tylko tylko swoim panelu admina wink.gif Postaram się przepisać gdzieś "dla świata" ale musiałbym to dodatkowo zabezpieczyć (lepiej dmuchać na zimne tongue.gif).
nospor
No ale w wystawionym kodzie nie musisz robić inserwów do bazy.
Wystarczy że zostawisz print_r($_POST);
smile.gif
deha21
Inserty moge zrobic, nie ma problemu ale moze jakiś nie powołany ktoś bedzie chciał przetestować formy ataków xss czy jakieś inne majeskuele indżekszony tongue.gif
nospor
Jak nie zrobisz insertów to ci zadnych XSS nie spróbuje.... chyba ze jedynie na sobie samym... tongue.gif
deha21
Cytat(nospor @ 12.12.2012, 13:41:33 ) *
Jak nie zrobisz insertów to ci zadnych XSS nie spróbuje.... chyba ze jedynie na sobie samym... tongue.gif

Racja! Ale jestem głupi hehe biggrin.gif Zaraz przygotuję i wkleję linka.

http://www.hbmedia.pl/test/dodaj.php?type=glosowanie
nospor
Przecież ta tabela jest poza formularzem to niby jakim cudem coś co jest poza formularzem ma się wysłać?

edit: a nie, nie jest poza formularzem tylko ty masz błędny kod HTML przez co wywala się wszystko.
FORM ma obejmować oba Twoje DIVy: left i right. Wówczas powinno być dobrze.
Ty teraz FORM otwierasz w div left a zamykasz w div RIGHT. Przecież to jest zły kod HTML. Ma byc tak:
<form>
left
right
</form>
deha21
Jesteś wielki! biggrin.gif Rzeczywiście tak było
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.