Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Z tablicy do bazy.
Forum PHP.pl > Forum > PHP
harymilloki
Witam wszystkich serdecznie. Sprawa wygląda następująco. W jaki sposób zapisać dane z tablicy do bazy danych. Stworzyłem tzw. dokument dostawy, składający się z takich kolumn: nazwa produktu, ilość, cenanetto, cenabrutto itd. Wszystkie dane z poszczególnych pół są zapisywane w tablicy. Jak teraz dane z tablicy zapisać w bazie danych,tak aby w bazie w kolumnie nazwaproduktu poszczególne nazwyproduktów były zapisywane w odzielnych wierszach.
backen
  1.  
  2. $sql = "INSERT INTO `tabela` (`a`, `b`) VALUES";
  3.  
  4. $tablica_len = count($tablica);
  5.  
  6. foreach($tablica as $k => $wartosc){
  7. $sql .= "('$wartosc[a]', '$wartosc[b]' )".($tablica_len-1 > $k ? ',' : '');
  8. }
  9.  
  10.  


czy o takie cos chodziło?
harymilloki
Np. Mam takie dwie tablice:


Array ( [0] => Bagietka [1] => chałka [2] => drożdżówka [3] => pączek [4] => Rogal )
Array ( [0] => 22 [1] => 23 [2] => 24 [3] => 23 [4] => 21 )

I chcę aby te dane były zapisane w bazie w tej samej tabeli.
Np dane z pierwszej tablicy muszą być wpisane w kolumnie nazwaproduktu(w bazie) w poszczególnych wierszach a nie w jednym.
A dane z drugiej tablicy dokładnie w taki sam sposób w kolejnej kolumnie ilosc.
backen
kod bedzie bardzo podobny i bedzie dzialal prawidlowo jesli obie tablice beda mialy tyle samo elementow

  1.  
  2. $sql = "INSERT INTO `tabela` (`nazwa`, `ilosc`) VALUES";
  3.  
  4. $tablica = Array ( [0] => Bagietka [1] => chałka [2] => drożdżówka [3] => pączek [4] => Rogal )
  5. $tablica2 Array ( [0] => 22 [1] => 23 [2] => 24 [3] => 23 [4] => 21 )
  6.  
  7. $tablica_len = count($tablica);
  8.  
  9.  
  10.  
  11. foreach($tablica as $k => $wartosc){
  12. $ilosc = $tablica2[$k];
  13. $sql .= "('$wartosc', '$ilosc' )".($tablica_len-1 > $k ? ',' : '');
  14.  
  15. }
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  


możliwe ze gdzies mogłem zrobic błąd

harymilloki
Nic się nie dodało.

U mnie to wygląda tak.

  1. <?php
  2.  
  3. $nazwaproduktu = $_POST['nazwaproduktu'];
  4. $ilosc = $_POST['ilosc'];
  5.  
  6.  
  7. $link = mysqli_connect('localhost', 'root', '');
  8.  
  9. if(!mysqli_select_db($link,'jartexsoft_cba_pl'))
  10. {
  11. echo 'Nie odnaleziono bazy danych.';
  12. exit();
  13. }
  14.  
  15. $sql = "INSERT INTO dokumenty_dostaw (`nazwa_produktu`, `ilosc`) VALUES";
  16.  
  17. $tablica = Array ($nazwaproduktu) ;
  18. $tablica2 =Array ($ilosc);
  19.  
  20. $tablica_len = count($tablica);
  21.  
  22.  
  23.  
  24. foreach($tablica as $k => $wartosc){
  25. $ilosc = $tablica2[$k];
  26. $sql .= "('$wartosc', '$ilosc' )".($tablica_len-1 > $k ? ',' : '');
  27.  
  28. }
  29.  
  30.  
  31. ?>
  32.  


Jest mi ktoś w stanie pomóc? W tych dwóch zmiennych na początku są zapisane tablice z pól formularzy z wcześniejszczego formularza dokumentu dostawy.
toaspzoo
twój kod:
  1. $sql .= "('$wartosc', '$ilosc' )".($tablica_len-1 > $k ? ',' : '');
  2.  
  3. }
  4.  


  1. ($tablica_len-1 > $k ? ',' : '');

dlaczego dajesz , zamiast ; ?


zamień na
backen
  1.  
  2. $tablica = $_POST['nazwaproduktu'];
  3. $tablica2 = $_POST['ilosc'];
  4.  
  5. $link = mysqli_connect('localhost', 'root', '');
  6.  
  7. if(!mysqli_select_db($link,'jartexsoft_cba_pl')){
  8.  
  9. echo 'Nie odnaleziono bazy danych.';
  10. exit();
  11. }
  12.  
  13. $sql = "INSERT INTO dokumenty_dostaw (`nazwa_produktu`, `ilosc`) VALUES ";
  14.  
  15. $tablica_len = count($tablica);
  16.  
  17. foreach($tablica as $k => $wartosc){
  18.  
  19. $ilosc = $tablica2[$k];
  20. $sql .= "('$wartosc', '$ilosc' )".($tablica_len-1 > $k ? ',' : '');
  21.  
  22. }
  23.  



  1. <input name="nazwaproduktu[]" />
  2. <input name="ilosc[]" />




@toaspzoo
zawsze robie , smile.gif
toaspzoo
Zamień na ten kod
  1. $sql .= "('$wartosc', '$ilosc' )".($tablica_len-1 > $k ? '; ' : '');

harymilloki
Nadal nic się nie dodaje.


teraz pojawia mi się taki błąd:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'chałka, 23 )' at line 1

Chyba wiem w czym rzecz. Te wiersze w formularzu dodawane są dynamicznie przez JavaScript. Więc może o to chodzi.

Zamieszczam kod JS:

$(document).ready(function() {
//funkcja odczytująca kliknięcie w element o id: dodajWiersz
//i wykonująca akcję dodawania nowego wiersza do tabeli
$('#dodajWiersz').click(function() {

var selectHtml = $('select.kopia').clone().removeClass('kopia');

//policz ile jest wierszy w tabeli
var liczba = $('#tabela tr').length;

//pierwsza komórka
var f1 = '<td><select class="medium" name="nazwaproduktu[]">'+selectHtml.html()+'</select></td>';

//druga komórka
var f2 = '<td><input type="text" class="medium" name="ilosc[]"></input></td>';

//trzecia komórka
var f3 = '<td><select class="medium" name="jm[]"><option>szt.</option><option>kg</option></select></td>';

//czwarta komórka
var f4 = '<td><input type="text" class="medium" name="cenanetto[]"></input></td>';


//piąta komórka
var f5 = '<td><a class="button delete" href="#"><img src = "usun.gif"></a></td>';

//w tej zmiennej definiujemy nowy wiersz w tabeli
var row = '<tr class="none" id="wiersz-'+liczba+'"><td>'+liczba+'</td>'+f1+f2+f3+f4+f5+'</tr>';

//dołącz nowy wiersz na końcu tabeli
$('#tabela').find('tbody').append(row);

//usuwamy klasę: none z wiersza oraz animujemy efekt dodawania wiersza
$('tr.none').removeClass('none').animate({'backgroundColor':'#6699cc','color':'#99ccff'},300,function(){
$(this).animate({'backgroundColor':'#99ccff','color':'#6600ff'},300);
});
});

//funkcja odczytująca kliknięcie w element o klasie: delete
//i wykonująca akcję usuwania danego wiersza z tabeli
//oraz dokonuje przeliczenia numerów wierszy w tabeli
$('.delete').live('click',function() {
//znajdź najbliższy wiersz będący elementem nadrzędnym dla linka usuwającego ten wiersz
//i wykonaj animację
$(this).closest('tr').animate({'backgroundColor':'#cc99cc','color':'#6600ff'},300,function(){

//usuń dany wiersz
$(this).remove();

//aktualizuj numery pozostałych wierszy
//dzięki temu gdy usuniemy wiersz w środku tabeli
//to nie będzie istniała dziura w numeracji wierszy
$('#tabela > tbody > tr').each(function(i) {
//wpisz nowy numer wewnątrz pierwszej komórki danego wiersza
$(this).find('td:first-child').text(i+1);
});
});
});
});
backen
tak powinno wygladac zapytanie do bazy ";" oznacza koniec zapytania

  1. INSERT INTO `test_table`( `a`, `v`) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f')


toaspzoo
czyli powinieneś dodawać do kwerendy całe zapytania, separując je średnikiem, jak wcześniej sugerowałem
  1. INSERT INTO `test_table`( `a`, `v`) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'); INSERT INTO `test_table`( `a`, `v`) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'); INSERT INTO `test_table`( `a`, `v`) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f'); INSERT INTO `test_table`( `a`, `v`) VALUES ('a', 'b'), ('c', 'd'), ('e', 'f')
backen
tylko nie rozumiem po co robic 4 zapytania jak mozna zrobic to jednym smile.gif
harymilloki
A co dokładnie ma znajdować się pod tymi literkami questionmark.gif
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.