Wątek przeniesiony 2014-12-26 16:56 z PHP przez dzek69.

Zapis dużej ilości danych pobranych z formularza do bazy danych

0

Tworzę prosty skrypt służący do obsługi zamówień. Na podstawie danych o asortymencie pobranych z bazy MySQL tworzony jest formularz wg poniższego wzoru:

<?php 
$polaczenie=new  mysqli('localhost','08599_zamow','haslo','08599');
$polaczenie->set_charset("utf8");
if (mysqli_connect_errno() != 0){
	echo '<p>Wystąpił błąd połączenia z bazą danych: ' . mysqli_connect_error() . '</p>';
}
else {
   
	$zapytanie='SELECT id,NAZWA FROM asortyment';
	$result=$polaczenie->query($zapytanie,MYSQLI_STORE_RESULT);
	while(list($id,$nazwa) = $result->fetch_row())
	{
echo "<tr>";
echo "<td>";
echo "</td>";
echo "<td>";
echo" $nazwa";	
echo "<INPUT type='hidden' name='nazwa_$id' value='$nazwa'>";
echo "<INPUT type='hidden' name='id_$id' value='$id'>";
echo "</td>";	
echo "<td>";
echo "<input name='ilosc_$id'  type='number'>";
echo "</td>";
echo "<td>";
echo "<center>";
echo "<label><input type='radio' name='jednostka$id' value='kg' checked/>_kg_</label>";
echo "</td>";
echo "<td>";
echo "<label><input type='radio' name='jednostka$id' value='szt'/>_szt_</label>";
echo "</td>";
echo "<td>";
echo "<label><input type='radio' name='jednostka$id' value='poj'/>_poj_</label>";
echo "</td>";
echo "</center>";
echo "</tr>";
	}
	}
?>

Jak widać z bazy danych pobierane są: id, nazwa oraz domyślna dla asortymentu jednostka. W gotowym formularzu użytkownik uzupełnia ilość i ewentualnie zmienia jednostkę. Tak skompletowane dane po wysłaniu formularza mają być zapisane w tabeli zamówienia bazy danych.
Problemem jest odczytanie dużej ilości danych(asortymentów jest ponad 150) z tablicy $_GET. W przypadku, gdy ilość danych byłaby mniejsza odczytałbym to w poniższy sposób:

<?php 
echo $_GET[id_1];
echo $_GET[nazwa_1];
echo $_GET[ilosc_1];
echo $_GET[jednostka1];
echo "<br>";
echo $_GET[id_2];
echo $_GET[nazwa_2];
echo $_GET[ilosc_2];
echo $_GET[jednostka2];
?>

Proszę o sugestię jak rozwiązać ten problem lub wskazanie prostszego sposobu rozwiązania opisywanego zagadnienia.

0

Danych z formularza nie przyjmuj w $_GET - to Twój pierwszy błąd projektowy. Do tego jest POST (same te nazwy mówią wiele - GET - odbierać, POST - nadawać).

Druga rzecz - tablice. Uczą tego na drugiej-trzeciej lekcji w każdym tutorialu z dowolnego języka programowania. Z formularza też da się je przesyłać:

<form action="/sciezka/plik.php" method=post>
<input name="nazwa[]">
<input name="jednostka[]">
<input name="nazwa[]">
<input name="jednostka[]">
<button>wyslij</button>
</form>
// plik.php
$ilosc = count($_POST['nazwa']); // użyj dowolnej zmiennej
echo "Ilość: ".$ilosc;
for ($i=1; $i<=$ilosc; $i++) {
  echo "<br />Nazwa: ".$_POST['nazwa'][$i]." Jednostka: ".$_POST['jednostka'][$i];
}

Pisane z palca, ale powinno działać.

0

Nie wiedziałem, że przy pomocy formularza można przesyłać tablicę :/. W tym przypadku aby uniknąć błędów wykorzystam tablicę asocjacyjną z indeksem id.
Dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1