Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz i zapis ich w SQL
Forum PHP.pl > Forum > PHP
djmassive
Witam, wygląda tak mój problem:

Mam sobie wygenerowaną tabele, gdzie automatycznie poprzez while($r = mysql_fetch_array($nazwa)) { ciąg znaków } odczytuje mi z bazy produkty. Co poniektóre z nich, mają np. przy cenie INPUT type=text - czyli są gotowe jakby do edycji, na początku tabeli i na końcu dałem <form> oczywiście, i problem mój polega na tym, że gdy mam chociaż 2 produkty, to nie potrafie zmienić ich wartości za jednym razem. widziałem coś takiego w sklepie internetowym <b>(http://sklep.kqs.pl/admin) p: admin, h: admin - menu produkty</b>

Jak ja to mogę zrobić questionmark.gif Kto pomoże ?
mike
Oo kurcze, nie przesadziłeś z tą ilością kodu?
Nie tak dużo za jednym zamachem tongue.gif

Cchesz gotowca, czy mamy Ci pomóc?
Gotowiec == <papapa>
Pomoc == pokaż kod
djmassive
Niechodzi o gotowca, chciałbym poprostu aby ktoś wytłumaczył mi na jakiej zasadzie się takie coś robi exclamation.gif Mój kod wygląda tak, jeżeli to już taki wielki problem:

  1. <?php
  2.  
  3. function pokaz_produkty($TypeDisplay)
  4. {
  5. $kat_dane = db_query("SELECT * FROM produkty ORDER BY nazwa $TypeDisplay");
  6. echo "<div id='Wypisane produkty' width=100% height=100% style='margin-top: 30' align=center>
  7. <table width=100% class='tabela-normal'>
  8. <tr>
  9. <td width=250 class='komorka-normal' bgcolor='#D6DFF7'><div style='margin: 5;'>Nazwa produkty</div></td>
  10. <td width=50 class='komorka-normal' bgcolor='#D6DFF7'><div align=center style='margin: 5;'>Detal</div></td>
  11. <td colspan=2 width=80 class='komorka-normal' bgcolor='#D6DFF7'><div align=center style='margin: 5;'>Promocja</div></td>
  12. <td width=40 class='komorka-normal' bgcolor='#D6DFF7'><div align=center style='margin: 5;'>Ilość</div></td>
  13. <td width=150 class='komorka-normal' bgcolor='#D6DFF7'><div style='margin: 5;'>Kategoria</div></td>
  14. <td colspan=6 width=140 class='komorka-normal' bgcolor='#D6DFF7'><div style='margin: 5;'>Opcje</div></td>";
  15.  
  16. while($kat_wynik = db_fetch($kat_dane))
  17. {
  18. echo "<form name=produkty method=post action='produkty.php?dz=szybka_edycja&id='".$kat_wyn['id']."'>
  19. </tr>
  20. <tr onMouseOver=\"this.bgColor='#EAEFFC'\" onMouseOut=\"this.bgColor=''\">
  21. <td width=250 height=20 class='komorka-dashed' ><div class='pogrubione' style='margin-left: 5; margin-right: 5;'>".$kat_wynik['nazwa']."</div></td>
  22. <td width=50 height=20 class='komorka-dashed' ><div align=center style='margin-left: 5; margin-right: 5;'><input type=text size=7 value='".$kat_wynik['cenadetal']."' name='cenadeta[".$kat_wynik['id']."]'></div></td>
  23. <td width=60 height=20 class='komorka-dashed' align=center><input type=text size=7 value='".$kat_wynik['cenapromocja']."' name='cenadeta[".$kat_wynik['id']."]'></td>
  24. <td width=20 height=20 class='komorka-dashed' align=center><input type='checkbox' value='".$kat_wynik['op_promocja']."' name='op_promocja[".$kat_wynik['id']."]'></td>
  25. <td width=40 height=20 class='komorka-dashed' align=center><input type=text size=4 value='".$kat_wynik['ilosc']."' name='ilosc[".$kat_wynik['id']."]'></td>
  26. <td width=150 height=20 class='komorka-dashed' align=center>".$kat_wyn['kategoria']."/".$kat_wyn['podkategoria']."</td>
  27. <td width=20 height=20 class='komorka-dashed' align=center><a onclick=\"if (confirm('Czy napewno chcesz edytować ten produkt ?')) { return true; } else { return false; } \" onmouseover=\"return overlib('<center>Edycja towaru !</center>', ABOVE, WIDTH, 80);\" onmouseout=\"nd();\" href='?dz=edytuj&use=produkt&id=".$kat_wynik['id']."'><img src='./images/edycja.gif' border=0></a></td>
  28. <td width=20 height=20 class='komorka-dashed' align=center><a onclick=\"if (confirm('Czy napewno chcesz usunąć ten towar ?')) { return true; } else { return false; } \" onmouseover=\"return overlib('<center>Usuwa wybrany towar !</center>', ABOVE, WIDTH, 80);\" onmouseout=\"nd();\" href='?dz=usun&use=produkt&id=".$kat_wynik['id']."'><img src='./images/usun.gif' border=0></a></td>";
  29. // Produkt widoczny dla klienta
  30. if (($kat_wynik['wid_klient']) == '1') 
  31. {
  32. echo "<td width=20 height=20 class='komorka-dashed' align=center><a onmouseover=\"return overlib('<center>Produkt jest <b>widoczny</b> dla klienta<br><i>Kliknij aby wyłączyć !</i></center>', ABOVE, WIDTH, 200);\" onmouseout=\"nd();\" href='?dz=klient&use=niewidoczny&id=".$kat_wynik['id']."'><img src='./images/widoczny.gif' border=0></a></td>";
  33. }
  34. elseif (($kat_wynik['wid_klient']) == '0')
  35. {
  36. echo "<td width=20 height=20 class='komorka-dashed' align=center><a onmouseover=\"return overlib('<center>Produkt jest <b>niewidoczny</b> dla klienta<br><i>Kliknij aby włączyć !</i></center>', ABOVE, WIDTH, 200);\" onmouseout=\"nd();\" href='?dz=klient&use=widoczny&id=".$kat_wynik['id']."'><img src='./images/niewidoczny.gif' border=0></a></td>";
  37. }
  38. // Produkt widoczny na stronie głównej
  39. if (($kat_wynik['wid_strona']) == '1') 
  40. {
  41. echo "<td width=20 height=20 class='komorka-dashed' align=center><a onmouseover=\"return overlib('<center>Produkt jest <b>widoczny</b> na stronie głównej<br><i>Kliknij aby wyłączyć !</i></center>', ABOVE, WIDTH, 220);\" onmouseout=\"nd();\" href='?dz=strona&use=niewidoczny&id=".$kat_wynik['id']."'><img src='./images/glowna_1.gif' border=0></a></td>";
  42. }
  43. elseif (($kat_wynik['wid_strona']) == '0')
  44. {
  45. echo "<td width=20 height=20 class='komorka-dashed' align=center><a onmouseover=\"return overlib('<center>Produkt jest <b>niewidoczny</b> na stronie głównej<br><i>Kliknij aby włączyć !</i></center>', ABOVE, WIDTH, 220);\" onmouseout=\"nd();\" href='?dz=strona&use=widoczny&id=".$kat_wynik['id']."'><img src='./images/glowna_2.gif' border=0></a></td>";
  46. }
  47. // Czy dotępna jest galeria
  48. if (($kat_wynik['wid_galeria']) != '0') 
  49. {
  50. echo "<td width=20 height=20 class='komorka-dashed' align=center><a href='galeria.php?dz=pokaz&id=".$kat_wynik['id']."' onmouseover=\"return overlib('<center>Do produktu <b>załączona jest</b> galeria!</center>', ABOVE, WIDTH, 200);\" onmouseout=\"nd();\" onclick=\"javascript:okno('galeria.php?dz=pokaz&id=".$kat_wynik['id']."','Galeria','400','350'); return false;\"><img src='./images/foto.gif' border=0></a></td>";
  51. }
  52. elseif (($kat_wynik['wid_galeria']) == '0')
  53. {
  54. echo "<td width=20 height=20 class='komorka-dashed' align=center>&nbsp;-&nbsp;<img src='./images/foto.gif' border=0></td>";
  55. }
  56. $ddane = db_query("SELECT * FROM dostawcy WHERE dnazwa='".$kat_wynik['dystrybutor']."'");
  57. $dwynik = db_fetch($ddane);
  58.  
  59. echo "<td width=20 height=20 class='komorka-dashed' align=center><a onclick=\"javascript:okno('dostawcy.php.php?dz=produkt&id=".$kat_wynik['id']."','Dostawca','400','350'); return false;\" onmouseover=\"return overlib('Nazwa dostawcy: <b>".$dwynik['dnazwa']."</b></br>Kod dostawcy: <b>".$dwynik['dkod']."</b>', ABOVE, WIDTH, 200);\" onmouseout=\"nd();\" href=''><img src='./images/dostawa.gif' border=0></a></td>
  60. </tr>";
  61.  }
  62. }
  63.  
  64.  
  65. ?>


tak wygląda ta funkcja, i niestety tak nie śmiga
nospor
dla pol input type text nadaj nazwy tablicowe, czyli z []
  1. <input type="text" name="nazwainputa[]" />

obok kazdego z nich, daj pole hidden, z value równym id rekordu oraz rowniez nazwą tablicową:
  1. <input type="text" name="nazwainputa[]" />
  2. <input type="hidden" name="nazwah[]" value="idrekordu" />


a teraz w akcji do ktorej wysylasz formularz robisz:
  1. <?php
  2.  
  3. foreach ($_POST['nazwah'] as $index=>$idRekordu){
  4. $wartosczinputa = $_POST['nazwainputa'][$index];
  5. $sql = "update tabela set pole='$wartosczinputa' where ID=".$idRekordu;
  6. } 
  7.  
  8. ?>
Tak to powinno w skrocie wyglądać smile.gif
Acha, zauwazylem w kodzie co podales, ze genrujesz formularz w pętli. Nie rob tego. Formularza generuj poza pętlą. W petli tylko genereuj rekordy.

edit: jak to zrobisz, mozna by sie pokusić o checkboxy, ktore trzeba by zaznaczyc, jesli by sie chcialo edytowac dane pole
djmassive
Tak, wstawiłem formularz w pętli tak z ciekawości, czy czasem nie zaśmiga, normalnie zawsze daje przed pętlą. Dziękuję za podpowiedź, już wiem co i jak. Wiedziałem, że trzeba dać to na tablice, ale niespodziewałem się użycia polecenia foreach, chyba muszę sięgnąć do lektury, bo kompletnie nie rozumiem co to polecenie mi daje :-) Być może jego znajomość pomoże mi w realizacji innych problemów, które napewno się nasuną podczas pisania tego 'sklepiku' smile.gif

edit. O checkboxach myślałem, ale mam mało miejsca smile.gif nazwa produktu czasem może być długa, a ja lubie estetyke (taka fobia) smile.gif i jeszcze krótkie pytanko, jaki macie najprostrzy sposób, na zapisanie wartości zaznaczone/niezaznaczone w sql ?

  1. <?php
  2.  
  3. <input type=checkbox name=wybor checked> - zaznaczone, co nie ? bez 'checked' nie jest zaznaczone
  4.  
  5. ?>


ja planuje poprostu zapisywać tą nazwę przy chęci zaznaczenia danego pola w bazie i dać to tak

  1. <?php
  2.  
  3. <input type=checkbox name=wybor ".$wynik['pole_checkbox'].">
  4.  
  5. ?>


jeżeli w bazie w danym id będzie pole_checkbox jako checked będzie zaznaczone, jeżeli puste - nie !

Macie jakiś inny sposób questionmark.gif
nospor
pole w tabeli typu: tinyint unsigned (dlugość 1)
gdy zaznaczony checkbox, to pole ma wartosc 1, gdy nie - 0

jesli bedziesz mial kiedys kilka checkboxow, i dla kazdego bedziesz chcial dac oddzielne pole w tabeli, to lepszym rozwiązaniem moze sie okazac jedno pole, a do niego wkladac bitową sumę zaznaczonych checkboxów. ale to juz inna bajka winksmiley.jpg
djmassive
Wiem, że męcze, ale bawię się teraz nad jeszcze jedną rzeczą. Mianowicie nad wyświetleniem w <SELECT> Kategorii i podkategorii. Samo wyświetlenie chodzi, zrobiłem po chłopsku tongue.gif

  1. <?php
  2.  
  3. function WyswietlKategorie()
  4. {
  5. $dane = db_query("SELECT * FROM kategorie ORDER BY knazwa");
  6. echo "<select id='kat' name='kategoria'>";
  7. while($wynik = db_fetch($dane))
  8. {
  9. echo "<option id='kat' name='kategoria' value='".$wynik['kid']."'>".$wynik['knazwa']."</option>";
  10. $pdane = db_query("SELECT * FROM podkategorie WHERE kid='".$wynik['kid']."' ORDER BY pknazwa");
  11. $pwyn = db_fetch($pdane);
  12. if (($wynik['kid'])==($pwyn['kid']))
  13. {
  14. unset($pwyn); unset($pdane);
  15.  
  16. $pdane = db_query("SELECT * FROM podkategorie WHERE kid='".$wynik['kid']."' ORDER BY pknazwa");
  17. while($pwyn = db_fetch($pdane))
  18. {
  19. echo "<option name='podkategoria' value='".$pwyn['pkid']."'>&nbsp;&nbsp;".$pwyn['pknazwa']."</option>";
  20. }
  21. } 
  22.  
  23. }
  24. echo "</select>";
  25. unset($dane); unset($wynik);
  26. }
  27.  
  28. ?>


jednak pozostaje ból przy zapisaniu wartości KATEGORII i PODKATEGORII. Do bazy spokojnie wchodzi jedynie nazwa podkategorii, a co zrobić, by zapisywał również nazwe podkategorii questionmark.gif
nospor
Cytat
jedynie nazwa podkategorii, a co zrobić, by zapisywał również nazwe podkategorii
Przeczytaj to zdanie jeszcze raz i zastanow sie, czy oby na pewno to chciales napisac winksmiley.jpg

<option> nie mają name. Twoj sposob ci nic nie da.

Co ty chcesz zrobic? Chcesz wpisac id zaznaczonej podkatgorii? to do dostaniesz w select to co zaznaczysz. Nie wiem oco ci chodzi
djmassive
Rzeczywiście troche namotałem. Sprawa wygląda tak:

kategoria ma jedną tabele, a podkategoria ma drugą tabele, i chcę aby system wiedział która podkategoria została wybrana z podkategorii. Mam przykładowo:

KATEGORIA GŁÓWNA
---podkategoria 1
---podkategoria 2

i chciałbym aby po wybraniu podkategorii 2 zapisało mi się $pid (czyli id z tabeli podkategorii) oraz $kid (czyli id z tabeli kategorii).

edit: Prawdopodobnie nie będę potrzebował już tej odpowiedzi, gdyż Twój post oświecił mi umysł jak zrobić kategorie i podkategorie w jednej tabeli :-) Ale jeżeli jest możliwe zrobić to tak jak pisałem wyżej, będę wdzięczny za wszelkie podpowiedzi, być może przyda mi się to później exclamation.gif
nospor
ty to sięchyba nigdy nie nauczysz:
Cytat
i chcę aby system wiedział która podkategoria została wybrana z podkategorii
winksmiley.jpg

Dla podkategorii nadawaj value, bedące złączeniem id kategorii oraz id podkategorii: (idKat;idPodKat)

  1. <?php
  2.  
  3. //$idKat - id kategorii
  4. //$idPodKat - idPodkategorii
  5. //.....
  6. echo '<option value="'.($idKat.';'.$idPodKat).'">Nazwa podkategorii</option>';
  7. //....
  8.  
  9. ?>


A teraz odbierasz:
  1. <?php
  2.  
  3. list($idKat, $idPodKat) = explode(';', $_POST['nazwaselecta']);
  4.  
  5. ?>

To by bylo po krótce. smile.gif
djmassive
NOSPOR masz u mnie BIG Piwo :-) mam wysłać pocztą questionmark.gif smile.gif Muszę się normalnie bardziej widze podszkolić, bo potrafie pisać już w php,ale zawsze wszystko robie naokoło smile.gif Pozdro i thx
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.