Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z foreach
Forum PHP.pl > Forum > Przedszkole
krysob
Witajcie,

Mam problem z updatem wielu wierszy na raz. Wykorzystuje przykład z książki (w przykładzie jest usuwanie wpisów a ja nadpisuje może to jest problem). Może ktoś bardziej doświadczony coś złego zauważy. Z góry dziękuje za pomoc.

Po zapisaniu zmian pojawia się komunikat "Notice: Array to string conversion in C:\Program Files\EasyPHP-12.1\www\order_detail.php on line 16" i w polach tekstowych jest napisane ARRAY liczby zerują się także.

link do screen
http://i236.photobucket.com/albums/ff210/c...zpsfqnut6rc.png
http://i236.photobucket.com/albums/ff210/c...zpskjzt4wep.png

CODE
//aktualizacja szczegółów zleceń
if (isset($_POST['editall'])) {
foreach ($_POST['tochange'] as $expenditureid)
{
[16 linia] mysql_query("UPDATE expenditure SET et_name = '$_POST[et_name]', expenditure_price = '$_POST[expenditure_price]', expenditure_price_detal = '$_POST[expenditure_price_detal]', expenditure_type = '$_POST[expenditure_type]' WHERE expenditure_id = '$expenditureid'") or die(mysql_error());
}
echo '<h4>Poprawnie zaktualizowano szczegóły zlecenia.</h4>';
}







//tabelka
$query = "SELECT et_name, expenditure_price, expenditure_price_detal, expenditure_id, expenditure_type FROM `expenditure` WHERE order_id = $_POST[order_id] AND expenditure_type = 0";
$result = mysqli_query($link, $query);
echo'<tr class="results">';
while($rowgg = mysqli_fetch_array($result)) {

if ($rowgg['expenditure_price'] > $rowgg['expenditure_price_detal'])
{
$error = '<p>CENA DETALICZNA JEST NIŻSZA NIŻ ZAKUPU !</p><p>ZMIEŃ CENE !</p>';
}
else
{
$error = '';
}

echo '<td><input type="checkbox" value="'.$rowgg['expenditure_id'].'" name="tochange[]"/></td>
<td style="width: 500px"><input type="text" size="40" name="et_name[]" value="'.$rowgg['et_name'].'" /></td>
<td><input type="text" size="5" name="expenditure_price[]" value="'.$rowgg['expenditure_price'].'" /> zł</td>
<td> Detal: <input type="text" size="5" name="expenditure_price_detal[]" value="'.$rowgg['expenditure_price_detal'].'" /> '.$error.' zł</td>';
echo '<input type="hidden" name="expenditure_id[]" value="'.$rowgg['expenditure_id'].'" />
<td>
<select name="expenditure_type[]">
<option value=0>Część</option>
<option value=1>Usługa</option></select>
</td>';
echo '</tr>';

}
echo '</table>';
}
else {
echo '<b>Brak.</b>';
}


aras785
Po prostu zakomentuj linię 16 i sprawdź ręcznie zmienne i będziesz wszystkie wiedział.

I na końcu dodasz do tych zmiennych zapytanie i powinno śmigać.

@nospor ładnie tutaj opisuje jak sprawdzać skrypty: Temat: Jak poprawnie zadac pytanie
krysob
Dziękuję za odpowiedz, sprawdziłem zmienne ręcznie, pokazują indeksy wpisów które mają być edytowane w bazie. Czyli jest coś nie tak z samym updatem zmienych do bazy. Zawsze update pojednczego wpisu nie sprawiał problemów ale przy liście z 10ma wpisami klikać pojedynczo trochę głupio biggrin.gif. Co moze być źle?

Pozdrawiam i życzę miłego wieczoru.
luki100011
$_POST[et_name] to string czy tablica?
Wszystkie rekordy chcesz uzupełnić tymi samymi wartościami?
krysob
$_POST[et_name], $_POST[expenditure_price], $_POST[expenditure_price_detal],'$_POST[expenditure_type]' to zmienne z wartościami pobranymi z bazy i mąją być lekko zmenione. Typy będą się chyba zgadzać. Moze to banalne ale jestem samoukiem i pewne rzeczy przychodzą trochę ciężej. tochange[] to miała byc tablica do foreach.
luki100011
"et_name" to raczej tablica zrób
  1. var_dump($_POST['et_name'] )

i zobacz co tam jest.
golaod
  1. if (isset($_POST['editall'])) {
  2. foreach ($_POST['tochange'] as $index => $expenditureid)
  3. {
  4. mysql_query("UPDATE expenditure SET et_name = '$_POST[et_name][$index]', expenditure_price = '$_POST[expenditure_price][$index]', expenditure_price_detal = '$_POST[expenditure_price_detal][$index]', expenditure_type = '$_POST[expenditure_type][$index]' WHERE expenditure_id = '$expenditureid'") or die(mysql_error());
  5. }
  6. echo '<h4>Poprawnie zaktualizowano szczegóły zlecenia.</h4>';
  7. }


Nie sprawdzałem poprawności. Po prostu dodaję to co powinno być, a czego brakuje. Skoro wszystkie Twoje pola są tablicą, to do każdej wartości powinieneś się odnieść na zasadzie: nazwa_pola[wiersz]
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.