Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Dodawanie WIELU rekordów z formularza, ... jak w prosty sposób dodać jednocześni wiele do bazy danych...
Andrzej1002
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ziqzaq
post
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
Andrzej1002
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ziqzaq
post
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Andrzej1002
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


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....
Go to the top of the page
+Quote Post
mortus
post
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
Andrzej1002
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:45