Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Edycja wielu kolumn na raz
Forum PHP.pl > Forum > PHP
szasza
Witam. Mam baze danych w której jest tabela 'lekarze' i zawira pola: lekarzID, nazwisko, specjalizacja, pon, wto, sro, czw, pia. Zrobilem strona która wyswietla te dane w polu tkstowym aby mozna je bylo edytowac po stronie przegladarki. tak wyglada kod z pominieciem tabel, tekstów itp.

Kod
<?php
  
$connection = @mysql_connect ("127.0.0.1","root","");
$ins = @mysql_select_db(bd_przychodnia, $connection);
mysql_query('SET CHARSET latin2');
$zapytanie = "SELECT * FROM lekarze";
$wykonaj = mysql_query ($zapytanie);

while($wiersz=mysql_fetch_array ($wykonaj)) {


echo '<tr> <td width=20%>';
echo '<input type="text" size="29" name="nazwisko" value="'.$wiersz['nazwisko'].'">';
echo '<br>';
echo '<input type="text" size="29" name="specjalizacja" value="'.$wiersz['specjalizacja'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="pon" value="'.$wiersz['pon'].'">';
echo '</td>';
echo '<td width=10%>';  
echo '<input type="text" name="wto" value="'.$wiersz['wto'].'">';
echo '</td>';
echo '<td width=10%>';  
echo '<input type="text" name="sro" value="'.$wiersz['sro'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="czw" value="'.$wiersz['czw'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="pia" value="'.$wiersz['pia'].'">';
echo '</td> </tr>';
}  

?>


Wszystko jest umieszczone w formularzu post i po nacisnieciu przyciusku Edytuj, przechodze do pliku edit.php ktory powinien zmienic wsystkei dane, tylko nie wiem jakiej uzyc instrukcji aby wszytskie pola w tabeli lekarze sie zmienily zgodnie z tym co wpisalem w formularzu :/ gdyz mi sie zmienia tylko ostatni wiersz :/ czy ktos moglby mi pomóc? Gdyż wiem jak zrobić edycje gdy mamy stala ilosc rekordow a w tym przypadku zalezy to od ilosci lekarzy zapisanych w bazie :/
_olo_1984
po przesłaniu formularza w obecnej formie daj podgląd na tablicę $_POST (print_($_POST)) - zobaczysz, że masz w niej tylko ostatni "rekord". Więc nazwy inputów musisz zrobić w formie tablicy:
  1. <?php
  2. ...
  3. $zapytanie = "SELECT * FROM lekarze";
  4. $wykonaj = mysql_query ($zapytanie);
  5.  
  6. while($wiersz=mysql_fetch_array ($wykonaj)) {
  7.  
  8. // zapewne każdy lekarz ma swój ID (identyfikator), więc musisz go wykorzystać
  9. // zakładamy że identyfikatorem jest: $wiersz['id']
  10.  
  11. echo '<tr> <td width=20%>';
  12. echo '<input type="text" size="29" name="nazwisko['.$wiersz['id'].']" value="'.$wiersz['nazwisko'].'">';
  13. echo '<br>';
  14. echo '<input type="text" size="29" name="specjalizacja['.$wiersz['id'].']" value="'.$wiersz['specjalizacja'].'">';
  15. echo '</td>';
  16. echo '<td width=10%>';
  17. echo '<input type="text" name="pon['.$wiersz['id'].']" value="'.$wiersz['pon'].'">';
  18. echo '</td>';
  19. echo '<td width=10%>';  
  20. echo '<input type="text" name="wto['.$wiersz['id'].']" value="'.$wiersz['wto'].'">';
  21. echo '</td>';
  22. echo '<td width=10%>';  
  23. echo '<input type="text" name="sro['.$wiersz['id'].']" value="'.$wiersz['sro'].'">';
  24. echo '</td>';
  25. echo '<td width=10%>';
  26. echo '<input type="text" name="czw['.$wiersz['id'].']" value="'.$wiersz['czw'].'">';
  27. echo '</td>';
  28. echo '<td width=10%>';
  29. echo '<input type="text" name="pia['.$wiersz['id'].']" value="'.$wiersz['pia'].'">';
  30. echo '</td> </tr>';
  31. }
  32. ...
  33. ?>


i po takim manewrze, przejrzyj jeszcze raz zawartość tablicy $_POST. Bedziesz miał pogrupowane dane. Trzeba będzie je jeszcze raz przegrupować zgodnie z identyfikatorem i w pętli dokonać UPDATE w bazie.
szasza
No tak idnetyfikator jest smile.gif Tylko wlasnie najbardziej mnie interesuje jak robić ten UPDATE w petli :/ Jak mniej wiecej ma wygladac ta instrukcja to ja sobie ja na swoje potrzeby przerobie smile.gif
_olo_1984
przykładowo możesz to zrobić tak:
  1. <?php
  2. $tablica = array();
  3.  
  4. foreach ($_POST as $key => $value)
  5. {
  6.    foreach ($value as $k => $v)
  7.    {
  8.        $tablica[$k][$key] = $v;
  9.    }
  10. }
  11.  
  12. echo '<pre>';
  13. print_r($tablica);
  14. echo '</pre>';
  15.  
  16. foreach ($tablica as $key => $value)
  17. {
  18.    $zap = '';
  19.    $i = 1;
  20.    $c = count($value);
  21.    foreach ($value as $k => $v)
  22.    {
  23.        if($c == $i)
  24.        {
  25.            $zap .= $k.'="'.$v.'"';
  26.        }
  27.        else
  28.        {
  29.            $zap .= $k.'="'.$v.'",';
  30.        }
  31.        $i++;
  32.    }
  33.    echo 'mysql_query(UPDATE table SET '.$zap.' WHERE id='.$key.');<br />';
  34. }
  35.  
  36. ?>


nie jest to coprawda super optymalne ale mozesz zobaczyć mniej więcej o so chozi. Najpierw pogrupujesz sobie dane z posta, potem dla każdego elementu nowo wygenerowanej tablicy robisz update w bazie. Pozdr
szasza
Przed chwila zacząlem z tym kombinować i wyskakuje mi taki komunikat:

Warning: Invalid argument supplied for foreach() in c:\program files\easyphp1-8\www\password\strona\approf3edit.php on line 10

chodzi o ten punkt w kodzie:
foreach ($value as $k => $v)
pyro
_olo_1984, jak ty chcesz w wartości tablicy $_POST wsawić tablice?
krowal
Sprawdzaj co jest w $value, w tym przypadku najprawdopodobniej nie jest to tablica.
_olo_1984
Cytat(pyro @ 28.05.2009, 13:56:42 ) *
_olo_1984, jak ty chcesz w wartości tablicy $_POST wsawić tablice?


dokładnie w ten sposób, np.: name="nazwisko[]"
dodatkowo, w naszym przypadku trzeba utworzyć tablicę z kluczem jako id lekarza.
Co do błędu który się pojawił to na początku trzeba sprawdzić sobie co jest w tablicy $_POST, w tym przypadku tak jak napisał kolega wyżej $value nie jest tablicą.
Kolega szasza niech przeanalizuje sobie przykład: (1.php)
  1. <?php
  2. $tablica = array();
  3.  
  4. foreach ($_POST as $key => $value)
  5. {
  6.    foreach ($value as $k => $v)
  7.    {
  8.        $tablica[$k][$key] = $v;
  9.    }
  10. }
  11.  
  12. echo '<pre>';
  13. print_r($tablica);
  14. echo '</pre>';
  15.  
  16. foreach ($tablica as $key => $value)
  17. {
  18.    $zap = '';
  19.    $i = 1;
  20.    $c = count($value);
  21.    foreach ($value as $k => $v)
  22.    {
  23.        if($c == $i)
  24.        {
  25.            $zap .= $k.'="'.$v.'"';
  26.        }
  27.        else
  28.        {
  29.            $zap .= $k.'="'.$v.'",';
  30.        }
  31.        $i++;
  32.    }
  33.    echo 'mysql_query(UPDATE table SET '.$zap.' WHERE id='.$key.');<br />';
  34. }
  35.  
  36. ?>
  37. <form action="2.php" method="post">
  38. <input type="text" name="imie[]" value="" /><input type="text" name="nazwisko[]" value="" /><input type="text" name="wiek[]" value="" /><br />
  39. <input type="text" name="imie[]" value="" /><input type="text" name="nazwisko[]" value="" /><input type="text" name="wiek[]" value="" /><br />
  40. <input type="text" name="imie[]" value="" /><input type="text" name="nazwisko[]" value="" /><input type="text" name="wiek[]" value="" /><br />
  41. <input type="text" name="imie[]" value="" /><input type="text" name="nazwisko[]" value="" /><input type="text" name="wiek[]" value="" /><br />
  42. <input type="submit" value="ok" />
  43. </form>

pozdr
pyro
Cytat(_olo_1984 @ 28.05.2009, 15:21:00 ) *
dokładnie w ten sposób, np.: name="nazwisko[]"


_olo_1984, Tobie się najwyraźniej coś pomyliło. Odpal sobie taki kod:

  1. <?php
  2.  
  3. echo is_array($_GET['cos']) ? 'jest tablicą' : 'nie jest tablicą';
  4.  
  5. ?>


z GET/POST jako tablic można używać parametrów, a nie ich wartości...

// edit

czyli:

dane[]=wartosc1&dane[]=wartosc2

a nie:

dane=wartosc1[]&dane=wartosc2[]
_olo_1984
odpal sobie kod, który napisałem. Nie mówię o $_GET tylko $_POST
pyro
Sorry, Ty właśnie odwoływałeś się do PARAMETRÓW, a nie WARTOŚCI, tylko nie spojrzałem co robi Twój kod, mój błąd smile.gif
szasza
witam. zrobilem wszystko wedlug instrukcji i dziala smile.gif wszystkie pola sie edytuja tak jak powinny, ale nadal nie wiem o co chodzi z tym komunikatem :/ czyli:
Warning: Invalid argument supplied for foreach() in c:\program files\easyphp1-8\www\password\strona\approf3edit.php on line 7
Co sie tyczy wiersza:
foreach ($value as $k => $v)
Moje pliki wygladaja nastepujaco. Ten z formularzem:

CODE

<form method="post" action="approf3edit.php">
<table border="1" width="80%" cellspacing="0" cellpadding="0" bordercolorlight="#000000"> <tr>
<td width="96%" colspan="6" bgcolor="#3366FF"> <p align="center">
<font size="3" color="#FFFFFF"><b>Dyżury lekarzy</b></font></td> </tr> <tr>
<td width="30%" align="center" bgcolor="#E1EFFF"> <p align="center"><font size="3">
&nbsp;Lekarz / specjalizacja</font></td>
<td width="10%" align="center" bgcolor="#E1EFFF"> <p align="center">
<font size="3">Poniedziałek</font></td>
<td width="10%" align="center" bgcolor="#E1EFFF">
<font size="3">Wtorek</font></td>
<td width="10%" align="center" bgcolor="#E1EFFF">
<font size="3">Środa</font></td>
<td width="10%" align="center" bgcolor="#E1EFFF">
<font size="3">Czwartek</font></td>
<td width="302" align="center" bgcolor="#E1EFFF">
<font size="3">Piątek</font></td> </tr>

<?php

$connection = @mysql_connect ("127.0.0.1","root","");
$ins = @mysql_select_db(bd_przychodnia, $connection);
mysql_query('SET CHARSET latin2');
$zapytanie = "SELECT * FROM lekarze";
$wykonaj = mysql_query ($zapytanie);

while($wiersz=mysql_fetch_array ($wykonaj)) {


echo '<tr> <td width=20%>';
echo '<input type="text" size="29" name="nazwisko['.$wiersz['lekarzID'].']" value="'.$wiersz['nazwisko'].'">';
echo '<br>';
echo '<input type="text" size="29" name="specjalizacja['.$wiersz['lekarzID'].']" value="'.$wiersz['specjalizacja'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="pon['.$wiersz['lekarzID'].']" value="'.$wiersz['pon'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="wto['.$wiersz['lekarzID'].']" value="'.$wiersz['wto'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="sro['.$wiersz['lekarzID'].']" value="'.$wiersz['sro'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="czw['.$wiersz['lekarzID'].']" value="'.$wiersz['czw'].'">';
echo '</td>';
echo '<td width=10%>';
echo '<input type="text" name="pia['.$wiersz['lekarzID'].']" value="'.$wiersz['pia'].'">';
echo '</td> </tr>';
}

?>

</td>
</tr>

</table>


<input type="submit" value="Zmień dane" name="submit">

</form>


I ten to edycji czyli approf3edit.php
  1. <?php
  2. $tablica = array();
  3.  
  4. foreach ($_POST as $key => $value)
  5. {
  6. foreach ($value as $k => $v)
  7.   {
  8.       $tablica[$k][$key] = $v;
  9.   }
  10. }
  11.  
  12. $connection = @mysql_connect ("localhost","root","");
  13. $ins = @mysql_select_db(bd_przychodnia, $connection);
  14. mysql_query('SET CHARSET latin2');
  15.  
  16. foreach ($tablica as $key => $value)
  17. {
  18.   $zap = '';
  19.   $i = 1;
  20.   $c = count($value);
  21.   foreach ($value as $k => $v)
  22.   {
  23.       if($c == $i)
  24.       {
  25.           $zap .= $k.'="'.$v.'"';
  26.       }
  27.       else
  28.       {
  29.           $zap .= $k.'="'.$v.'",';
  30.       }
  31.       $i++;
  32.   }
  33. $zapytanie = "UPDATE lekarze SET $zap WHERE lekarzID='$key'";
  34. $wykonaj = mysql_query ($zapytanie);  
  35.  
  36. }
  37. include('edycjapomyslna.php');
  38. mysql_close($connection);
  39.  
  40. ?>
krowal
Chociaż to rozwiązanie na szybko i powinno się to zrobić inaczej to w twoim przypadku i tak nie zauważysz różnicy.. winksmiley.jpg zrób tak:
  1. <?php
  2.  if (is_array($value)){
  3.    foreach($value as $k => $v){
  4.      //.....
  5.    }
  6.  }
  7. ?>
szasza
Teraz mi pokazuje ten sam blad tylko ze w wierszu
if (is_array($value)){
:/
krowal
Chyba to jest mało możliwe, ale pokaż cały kod z zastosowaną poprawką.
szasza
  1. <?php
  2. $tablica = array();
  3.  
  4. if (is_array($value))
  5. {
  6. foreach ($value as $k => $v)
  7.   {
  8.       $tablica[$k][$key] = $v;
  9.   }
  10. }
  11.  
  12. $connection = @mysql_connect ("localhost","root","");
  13. $ins = @mysql_select_db(bd_przychodnia, $connection);
  14. mysql_query('SET CHARSET latin2');
  15.  
  16. foreach ($tablica as $key => $value)
  17. {
  18.   $zap = '';
  19.   $i = 1;
  20.   $c = count($value);
  21.   foreach ($value as $k => $v)
  22.   {
  23.       if($c == $i)
  24.       {
  25.           $zap .= $k.'="'.$v.'"';
  26.       }
  27.       else
  28.       {
  29.           $zap .= $k.'="'.$v.'",';
  30.       }
  31.       $i++;
  32.   }
  33. $zapytanie = "UPDATE lekarze SET $zap WHERE lekarzID='$key'";
  34. $wykonaj = mysql_query ($zapytanie);  
  35.  
  36. }
  37. include('edycjapomyslna.php');
  38. mysql_close($connection);
  39.  
  40. ?>

Ale to chyba niw tak ma wygladac :/ Bo nawet danych mi nie zapisuje do bazy.
_olo_1984
szasza weź no rusz głową, to is_array daj w pętli foreach, po drugie, weź daj dumpa tablicy $_POST na początku skryptu to będziesz widział, co przesyłasz.
  1. <?php
  2.  
  3. // zobacz sobie, co przesyłasz postem
  4.  
  5. echo '<pre>';
  6. print_r($_POST);
  7. echo '</pre>';
  8.  
  9. // jeżeli są te dane które chcesz to idziesz dalej
  10.  
  11. $tablica = array();
  12.  
  13. foreach ($_POST as $key => $value)
  14. {
  15. if (is_array($value))
  16. {
  17. foreach ($value as $k => $v)
  18.  {
  19.      $tablica[$k][$key] = $v;
  20.  }
  21. }
  22. }
  23.  
  24. $connection = @mysql_connect ("localhost","root","");
  25. $ins = @mysql_select_db(bd_przychodnia, $connection);
  26. mysql_query('SET CHARSET latin2');
  27.  
  28. foreach ($tablica as $key => $value)
  29. {
  30.  $zap = '';
  31.  $i = 1;
  32.  $c = count($value);
  33.  foreach ($value as $k => $v)
  34.  {
  35.      if($c == $i)
  36.      {
  37.          $zap .= $k.'="'.$v.'"';
  38.      }
  39.      else
  40.      {
  41.          $zap .= $k.'="'.$v.'",';
  42.      }
  43.      $i++;
  44.  }
  45. $zapytanie = "UPDATE lekarze SET $zap WHERE lekarzID='$key'";
  46. $wykonaj = mysql_query ($zapytanie);  
  47.  
  48. }
  49. include('edycjapomyslna.php');
  50. mysql_close($connection);
  51.  
  52. ?>
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.