Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
 
Start new topic
Odpowiedzi (1 - 6)
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... (IMG:style_emoticons/default/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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 09:21