Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dodawanie WIELU rekordów z formularza
Forum PHP.pl > Forum > Przedszkole
Andrzej1002
Próbowałem wg wielu schematów omawianych na różnych forach ale nie są tym czego potrzebuję. W ktorejś z podpowiedzi znalazłem prosty i ciekawy kod który podobno działał. U mnie owszem, również działa ale dodaje tulko JEDEN, ostatni (3), rekord.


  1. <?php
  2.  
  3. mysql_connect ("127.0.0.1", "root", "rootek") or
  4. die ("Nie można poł&plusmn;czyć się z MySQL");
  5. mysql_select_db ("bazzamoja") or
  6. die ("Nie można poł&plusmn;czyć się z baz&plusmn; DANYCH");
  7.  
  8.  
  9. if ($co == 'dodaj') { // dodawanie rekordu
  10. $query = "INSERT INTO `probkaxx` (`PRid`, `PRpierwszy`, `PRdrugi`, `PRtrzeci`) VALUES ('', '$PRpierwszy', '$PRdrugi', '$PRtrzeci'), ('', '$PRpierwszy', '$PRdrugi', '$PRtrzeci'), ('', '$PRpierwszy', '$PRdrugi', '$PRtrzeci')";
  11. $wynik = mysql_query ($query);
  12. } elseif ($co == 'skasuj') { // kasowanie
  13. $wynik = mysql_query
  14. ("DELETE FROM klient WHERE PRid = '$id';");
  15. }
  16.  
  17. $wynik = mysql_query ("SELECT * FROM probka ORDER BY PRid;") or
  18. die ("bł&plusmn;d w pytaniu");
  19.  
  20.  
  21.  
  22.  
  23. print '<FORM METHOD="POST">Dodawanie <b><u>noweych DANYCH</u></b>:<br><br>';
  24. print '<INPUT TYPE="hidden" NAME="co" VALUE="dodaj"><TABLE border=0>';
  25.  
  26. print '<TR><TD>111</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 111aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>111bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333aaa</TD></TR>';
  27. print '<TR><TD>222</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 222aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>222bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333bbb</TD></TR>';
  28. print '<TR><TD>333</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 333aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>333bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333ccc</TD></TR>';
  29.  
  30. print '</TABLE>';
  31. print '<INPUT TYPE="submit" VALUE="Dodaj"></FORM>';
  32. print "<TABLE CELLSPACING=0 CELLPADDING=1 BORDER=1 WIDTH=98% class=sss>\n";
  33.  
  34. print "<TR><TD>IDD</TD><TD>Pierwszy</TD><TD>Drugi</TD><TD>Trzeci</TD></TR>";
  35.  
  36.  
  37. while ($rekord = mysql_fetch_array ($wynik)) {
  38.  
  39. $id = $rekord[0];
  40. $PRpierwszy = $rekord[1];
  41. $PRdrugi = $rekord[2];
  42. $PRtrzeci = $rekord[3];
  43.  
  44. print "<TR><TD>$PRid</TD><TD>$PRpierwszy</TD><TD>$PRdrugi</TD><TD>$PRtrzeci</TD></TR>\n";
  45. }
  46. print "</TABLE>";
  47.  
  48. .......
  49. .......
  50. ?>


Dłuuugie kody pisałem tymczasowo specjajnie aby można bylo manipulować...
Po kropkach mam dalej o kasowaniu - ale to wszystko działa.




Potrzebuję PROSTE rozwiązanie dodające jednocześnie wiele rekordów ale z FORMULARZA wg tego schematu:

---PRid---PRpierwszy--PRdrugi-------PRtrzeci---
---XXX---7482---------opis1----------opisA------
---XXX---7445---------opis2----------opisB------
---XXX---7433---------opis3----------opisC------
---XXX---7888---------opis4----------opisD------

DODAJ WSZYSTKIE
ziqzaq
Masz taki input:
  1. <INPUT TYPE="text" NAME="PRtrzeci">

Jesli go potroisz w formularzu bez zmiany atrybutu "name" to wartości się nadpiszą, czyli zostanie tylko ostatnia wartość.
To tak jakbyś chciał zrobić coś takiego
  1. $moja_zmienna = 'a';
  2. $moja_zmienna = 'b';
  3. $moja_zmienna = 'c';
  4. echo $moja_zmienna;

i dziwił się, że zmienna ma wartość 'c'.
Przykładowe rozwiązanie:
  1. <input type="text" name="nazwy[]" value="" />
  2. <input type="text" name="nazwy[]" value="" />
  3. <input type="text" name="nazwy[]" value="" />
  4. <input type="text" name="nazwy[]" value="" />

  1. if (isset($_POST['nazwy'])) {
  2. $nazwy = $_POST['nazwy'];
  3. $sql = 'insert into `tabela` (`id`, `nazwa`) values ';
  4. $i = 0;
  5. foreach($nazwy as $nazwa) {
  6. if (strlen($nazwa) > 0) {
  7. if ($i > 0) $sql .= ',';
  8. $sql .= '(NULL,"'.mysql_real_escape_string($nazwa).'")';
  9. }
  10. $i++;
  11. }
  12. }
Andrzej1002
Twoje podpowiedź jest chyba sensowna - ale nie umiem jej zaadoptować do mojego kodu j.w. Spróbowałem więc z innym rozwiązaniem:

  1. <?php
  2.  
  3. mysql_connect ("127.0.0.1", "root", "rootek") or
  4. die ("Nie można poł&plusmn;czyć się z MySQL");
  5. mysql_select_db ("bazzamoja") or
  6. die ("Nie można poł&plusmn;czyć się z baz&plusmn; DANYCH");
  7.  
  8.  
  9. if ($co == 'dodaj') { // dodawanie rekordu
  10. $query = "INSERT INTO `probka` (`PRid`, `PRpierwszy`, `PRdrugi`, `PRtrzeci`) VALUES ('', '$PRpierwszy', '$PRdrugi', '$PRtrzeci')";
  11. $wynik = mysql_query ($query);
  12. } elseif ($co == 'skasuj') { // kasowanie
  13. $wynik = mysql_query
  14. ("DELETE FROM klient WHERE PRid = '$id';");
  15. }
  16.  
  17. $wynik = mysql_query ("SELECT * FROM probkaxx ORDER BY PRid;") or
  18. die ("bł&plusmn;d w pytaniu");
  19.  
  20.  
  21.  
  22. $arr = array('PRpierwszy', 'PRdrugi', 'PRtrzeci');
  23. foreach ($arr as $value)
  24. {
  25. $sql_arr[] = array('value' => $value);
  26. }
  27. $XXXXXXXX->db->multiInsert('bazzamoja', $sql_arr);
  28.  
  29.  
  30.  
  31. print '<FORM METHOD="POST">Dodawanie <b><u>noweych DANYCH</u></b>:<br><br>';
  32. print '<INPUT TYPE="hidden" NAME="co" VALUE="dodaj"><TABLE border=0>';
  33.  
  34. print '<TR><TD>pierwszy</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 111aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>111bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333aaa</TD></TR>';
  35. print '<TR><TD>pierwszy</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 222aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>222bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333bbb</TD></TR>';
  36. print '<TR><TD>pierwszy</TD><TD><INPUT TYPE="text" NAME="PRpierwszy"></TD><TD> ------ 333aaa</TD><TD>drugi:</TD><TD><INPUT TYPE="text" NAME="PRdrugi"></TD><TD>333bbb</TD><TD>trzeci:</TD><TD><INPUT TYPE="text" NAME="PRtrzeci"></TD><TD>333ccc</TD></TR>';
  37. print '</TABLE>';
  38. print '<INPUT TYPE="submit" VALUE="Dodaj"></FORM>';
  39.  
  40.  
  41. print "<TABLE CELLSPACING=0 CELLPADDING=1 BORDER=1 WIDTH=98% class=tabeleczka>\n";
  42.  
  43. print "<TR><TD>IIIIIIII</TD><TD>1111111</TD><TD>2222222222</TD><TD>333333333333</TD></TR>\n";
  44.  
  45.  
  46. while ($rekord = mysql_fetch_array ($wynik)) {
  47.  
  48. $id = $rekord[0];
  49. $PRpierwszy = $rekord[1];
  50. $PRdrugi = $rekord[2];
  51. $PRtrzeci = $rekord[3];
  52.  
  53.  
  54. print "<TR><TD>$PRid</TD><TD>$PRpierwszy</TD><TD>$PRdrugi</TD><TD>$PRtrzeci</TD></TR>\n";
  55.  
  56. }
  57. print "</TABLE>";
  58.  
  59. ?>


Wielokrotnie próbowalem i w pewnym momencie zdawalo mi się że zadziałało, ale tylko zdawało mi się.

Nie mogę sobie poradzić ze scaleniem tego kodu......

Niech Ktoś scali mi TOOO... wstydnis.gif
ziqzaq
Jedyne co musisz zrobić to zaaplikować odpowiednie atrybuty "name" w formularzu, a w moim kodzie zmienić $_POST['nazwy'] na $_POST['tutaj_nazwa_w_formularzu']; i dostosować zapytanie ($sql) do swojej struktury tabeli. Wszystko oprócz mojego pierwszego if-a wrzuć w swojego if-a "if ($co == 'dodaj') {". I to wszystko.
Raczej niezbyt skomplikowane, przeczytaj sobie ten kod na spokojnie i na pewno bez problemu go wdrożysz u siebie.
Andrzej1002
Zrobiłem to trochę inną (bardziej promitywną ) metodą. Twoje podpowiedzi mi niestety nie pomogły (choć wyglądają na bardzo ciekawe i - co ważne - zwięzłe!!! Nie potrafię "zagregować" moich nazw rekordów typu "name". W każdym dodaniu mam: NAME="PRpierwszy" "NAME="PRdrugi" i NAME="PRtrzeci". Przy jednym dodaniu mam ich 23dodania. Nie wiem CO JEST ale przy dwoch mi dziala a potem się wszystko wywala. Jeżeli możesz mi dopisać do mojego kodu swe dodatki będę bardzo wdzieczny. Już się trochę zniechęciłem....
mortus
Przykład:
  1. <?php
  2. // sprawdzamy, co kryje tablica $_POST
  3. echo '<pre>';
  4. print_r($_POST);
  5. echo '</pre>';
  6. if(!empty($_POST)) {
  7. // wyciągamy liczbę rekordów, jakie będziemy dodawać
  8. $liczbaRekordow = count($_POST['nazwy']);
  9. // ustanawiamy połączenie z serwerem baz danych
  10. // wybieramy bazę danych
  11. // konstruujemy zapytanie
  12. $zapytanie = "INSERT INTO tabela (nazwa, kategoria) VALUES ";
  13. for($i = 0; $i < $liczbaRekordow; $i++) {
  14. $zapytanie .= "('" . $_POST['nazwy'][$i] . "','" . $_POST['kategorie'][$i] . "')";
  15. if($i < $liczbaRekordow - 1)
  16. $zapytanie .= ", ";
  17. }
  18. // cała reszta kodu
  19. echo $zapytanie;
  20. }
  21. ?>
  22. <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  23. <table border="0" cellspacing="0" cellpadding="0">
  24. <tr><td>ID</td><td>Nazwa</td><td>Kategoria</td></tr>
  25. <tr><td>1</td><td><input type="text" name="nazwy[]" /></td><td><input type="text" name="kategorie[]" /></td></tr>
  26. <tr><td>2</td><td><input type="text" name="nazwy[]" /></td><td><input type="text" name="kategorie[]" /></td></tr>
  27. <tr><td>3</td><td><input type="text" name="nazwy[]" /></td><td><input type="text" name="kategorie[]" /></td></tr>
  28. <tr><td>4</td><td><input type="text" name="nazwy[]" /></td><td><input type="text" name="kategorie[]" /></td></tr>
  29. <tr><td>5</td><td><input type="text" name="nazwy[]" /></td><td><input type="text" name="kategorie[]" /></td></tr>
  30. <tr><td colspan="3"><input type="submit" name="submit" value="Wyślij" /></td></tr>
  31. </table>
  32. </form>
Andrzej1002
Dzięki WAM serdeczne. Wszystko działa. Trochę za bardzo kombinowałem i zamotałem wszystko. Teraz już wiem - ale dopiero teraz i to TYLKO dzięki Waszym podpowiedziom. Podziękowania raz jeszcze...
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.