Wątek przeniesiony 2014-12-26 16:56 z przez dzek69. Powód: Wątek dotyczący podstaw

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

Odpowiedz Nowy wątek
2014-12-26 16:16
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.

edytowany 1x, ostatnio: adnix, 2014-12-26 16:18

Pozostało 580 znaków

2014-12-26 16:56
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ć.


Pozostało 580 znaków

2014-12-26 21:51
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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