Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaznaczanie i dodawanie kilku rekordów jednocześnie
Forum PHP.pl > Forum > PHP
qoqo
Witam. Dane pobieram w formacie rss z innej strony


Wyświetlam sobie w ten sposób w moim grabberze:



ID newsa | Tytuł | treść

teraz tak: zrobiłem sobie checkbox z value ID newsa

Czyli wyświetlam sobie 10 newsów z innej strony i chcę załóżmy wybrane zaimportować

robię coś takiego:

  1. <?PHP //
  2.  
  3. if(isset($_POST['import']))
  4. {
  5. $cnt=array();
  6. $cnt=count($_POST['id_newsa']);
  7.  
  8.  
  9. for($i=0;$i<$cnt;$i++)
  10. {
  11. $id_newsa=$_POST['id_newsa'][$i];
  12.  
  13.  
  14. }
  15.  
  16.  
  17. }

Zaznaczone ID przenoszą się bezproblemowo. Teraz pytanie: jak przenieść pozostałe dane?

Chcę połączyć to później z mechanizmem dodawania do bazy danych.. jednak póki co chce sobie te dane przenosić.

Załóżmy tytuł newsa robię tak:

  1. <input name=\"tytul_newsa[]\" type=\"hidden\" value=\"{$tytul_newsa}\">


Chodzi mi o to, że chcę uzyskać efekt: pobiera mi te dane RSS, mam przypisane je do zmiennych i po zaznaczeniu checboxem wybranych newsów chcę je zaimportować do bazy danych a dopiero później wyedytować (mam zrobioną tzw. poczekalnię wpisów)


W jaki sposób to zrobić, bo nie wiem czy idę dobrą drogą?
andrew654
Cytat(qoqo @ 17.11.2015, 17:59:59 ) *
Witam. Dane pobieram w formacie rss z innej strony


Wyświetlam sobie w ten sposób w moim grabberze:



ID newsa | Tytuł | treść

teraz tak: zrobiłem sobie checkbox z value ID newsa

Czyli wyświetlam sobie 10 newsów z innej strony i chcę załóżmy wybrane zaimportować

robię coś takiego:

  1. <?PHP //
  2.  
  3. if(isset($_POST['import']))
  4. {
  5. $cnt=array();
  6. $cnt=count($_POST['id_newsa']);
  7.  
  8.  
  9. for($i=0;$i<$cnt;$i++)
  10. {
  11. $id_newsa=$_POST['id_newsa'][$i];
  12.  
  13.  
  14. }
  15.  
  16.  
  17. }

Zaznaczone ID przenoszą się bezproblemowo. Teraz pytanie: jak przenieść pozostałe dane?

Chcę połączyć to później z mechanizmem dodawania do bazy danych.. jednak póki co chce sobie te dane przenosić.

Załóżmy tytuł newsa robię tak:

  1. <input name=\"tytul_newsa[]\" type=\"hidden\" value=\"{$tytul_newsa}\">


Chodzi mi o to, że chcę uzyskać efekt: pobiera mi te dane RSS, mam przypisane je do zmiennych i po zaznaczeniu checboxem wybranych newsów chcę je zaimportować do bazy danych a dopiero później wyedytować (mam zrobioną tzw. poczekalnię wpisów)


W jaki sposób to zrobić, bo nie wiem czy idę dobrą drogą?


Nie sprawdzałem jak to będzie wyglądało w html/php, ale coś takiego powinno Ci pomóc

  1. <input name=\"tytul_newsa[id_newsa]\" type=\"hidden\" value=\"{$tytul_newsa}\">

qoqo
niestety już próbowałem. Ewidentnie w php czegoś mi brakuje, co by to ruszyło..
andrew654
Tak naprawdę, jak podstawisz w zmienną tytul_newsa[id_newsa] (to musisz już w html podstawić) to nie muszisz oddzielnie przesyłać id_newsa i sprawdzać tabilcy countem.

  1. <input name=\"tytul_newsa[id_newsa]\" type=\"hidden\" value=\"{$tytul_newsa}\">


Najlepiej po odebraniu $_POST['tytul_newsa'] zrób sobie print_r i zobacz jak wygląda. Wtedy taką tablicę nie przeszukujesz pętlą for, tylko foreach:

  1. <?PHP //
  2.  
  3. if(isset($_POST['import']))
  4. {
  5. $tytul_newsa=$_POST['tytul_newsa'];
  6.  
  7.  
  8. foreach ($tytul_newsa as $k=>$v)
  9. {
  10. $id_newsa=$k;
  11. $tytul_newsa = $v;
  12.  
  13. }
  14.  
  15.  
  16. }


Pisane bez testowania, więc mogą być błędy. Mam nadzieję, że pomogłem smile.gif
qoqo
Może jeszcze raz napisze jaki chce efekt uzyskać, bo się sam pogubiłem trochę.

A więc mam grabber RSS.

Pobiera: ID newsów, tytuł newsa, obrazek newsa oraz treść newsa. Wszystko robię w pętli.

Przypisuję sobie go w ten sposób do zmiennej:

  1. $id_newsa, $tytul_newsa $obrazek_newsa oraz $tresc_newsa


Chcę teraz zrobić tak:

pobieram newsy, następnie chce je zaznaczyć checkboxem, które chcę dodać do bazy danych

Więc zrobiłem tak:


  1. <form action="admin.php?get=dodaj" method="post">
  2.  
  3. <tr class=\"odd\">
  4. <td><input name=\"id_newsa[]\" type=\"checkbox\" value=\"{$id_newsa}\"></td> <-- tutaj checbox do zaznaczenia, który chce wybrać
  5. <td>{$id_newsa}</td>
  6. <td>{$tytul_newsa}</td>
  7.  
  8. <td>{$tresc_newsa}</td>
  9. <td><img src='{$obrazek}' width='100px;'></td>
  10.  
  11.  
  12. <input name=\"tytul_newsa[]\" type=\"hidden\" value=\"{$tytul_newsa}\">
  13. <input name=\"obrazek_newsa[]\" type=\"hidden\" value=\"{$obrazek_newsa}\">
  14. </form>
  15.  
  16. <input type="submit" name="import" class="button" value="importuj do bazy"/>
  17.  



Powyżej wyświetlam sobie w td tak abym widział jaka treść, później ukryta jest ona w input type hidden

A więc: Zaznaczam w checkbox załóżmy:

Marysia ma kota
Gabrysia ma psa

i chcę aby te dwa zostały przeniesione metodą _POST do bazy danych


Jeżeli zaznacze jeden - to dodaje tylko zaznaczony;

jeżeli zaznaczę więcej - to dodaje wiadomo również te tylko zaznaczone...
andrew654
Nie przeczytałeś tego co Ci napisałem

  1. <form action="admin.php?get=dodaj" method="post">
  2.  
  3. <tr class=\"odd\">
  4. <td><input name=\"tytul_newsa[{$id_newsa}]\" type=\"checkbox\" value=\"{$tytul_newsa}\"></td> <-- tutaj checbox do zaznaczenia, który chce wybrać (od razu możesz w nim wysłać treść newsa i id)
  5. <td>{$id_newsa}</td>
  6. <td>{$tytul_newsa}</td>
  7.  
  8. <td>{$tresc_newsa}</td>
  9. <td><img src='{$obrazek}' width='100px;'></td>
  10.  
  11.  
  12.  
  13. <input name=\"obrazek_newsa[]\" type=\"hidden\" value=\"{$obrazek_newsa}\">
  14. </form>
  15.  
  16. <input type="submit" name="import" class="button" value="importuj do bazy"/>

Najlepiej zrób sobie print_r tablicy $_POST i zobaczysz co otrzymasz po wysłaniu zaznaczonych checkboxów
qoqo
dzięki!

Zrobiłem tak jak napisałeś, jednak gdy pobieram treść, zaznaczam którykolwiek checkbox zawsze pobiera mi ostatni..
Czyli załóżmy: 10 newsów..

I pobiera mi tylko ostatni.

Pytanie: czy dla każdego pobranego newsa w pętli zrobić <form action="admin.php?get=dodaj" method="post"> ?

Bo obecnie jest to dla wsyztskich pobranych..
andrew654
  1. <form action="admin.php?get=dodaj" method="post"> Tutaj tabelka z newsami </form>
ma być tylko raz dla wszystkich. Sprawdź, czy w tym miejscu: <input name=\"tytul_newsa[{$id_newsa}]\" podstawia Ci różne id_newsa. Może masz tylko jeden id w tej zmiennej
qoqo
ID każdego newsa mam inne; teraz jest tak, że pobiera mi wszystkie a nie te, które zaznaczam.

tutaj przykładowy pobrany w źródle html:


  1.  
  2. <tr class="odd">
  3. <td><input name="id_newsa[]" type="checkbox" value="1364635"></td>
  4.  
  5. <td>1364635</td>
  6. <input name="tytul_newsa[1364635]" type="hidden" value="Najnowsze informacje dotyczące zamachu">
  7.  
  8.  
  9. </tr>
  10.  
andrew654
Z kodu który masz wynika, że wyśle Ci wszystkie pola hidden <input name="tytul_newsa[1364635]" type="hidden" value="Najnowsze informacje dotyczące zamachu">. Wtedy musisz wybrać z tych pól tytuły i treści, które zgadzają się z przesłanym z checkboxa id_newsa

Robiłeś print_r tablicy Post żeby sprawdzić jak wyglądają przesłane dane?

  1. <pre>
  2. <?php print_r($_POST); ?>
  3. </pre>


qoqo
Robiłem. pokazuje mi coś ttakiego:


  1.  
  2. (
  3. [tytul_newsa] => Array
  4. (
  5. [1364] => wiadomość 1
  6. [1365] => wiadomość 2
  7. [1366] => wiadomość 3
  8.  
  9. )
  10.  
  11. [id_newsa] => Array
  12. (
  13. [0] => 1366
  14. )
  15.  
  16. [dodaj] => importuj


jak zaznaczam np wiadomość 1 i wiadomość 2 to pokazuje mi w id_newsa 1364 i 1365.


Czyli jak zrozumiałem, mam wybrać z tablicy tytul_newsa treść, która przypisana w tym przypadku jest np do 1366.

jakim sposobem to zrobić?
andrew654
Teraz wystarczy coś takiego:
  1. foreach ($_POST['id_newsa'] as $k=>$v){
  2. $tytul_newsa = $_POST['tytul_newsa'][$v];
  3. }

W zmiennej $tytul_newsa masz kolejne tytuły
qoqo
działa i pobiera wszystko smile.gif dzięki wielkie smile.gif
andrew654
Cieszę się, że się udało smile.gif Działaj dalej
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.