Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczny formularz pobierający dane z bazy
Forum PHP.pl > Forum > Przedszkole
Aui06
Witam

Jestem nowa na forum, ale od pewnego czasu czytam zamieszczone na nim dyskusje.

Piszę na forum bo mam problem. Chce zbudować dynamiczny formularz pobierający dane z bazy MySQL z możliwością edycji.

Część informacji jest już obecna w bazie, a część trzeba dopisać. Dodatkowe pola mają być tworzone dynamicznie. Czyli dodaje do tablicy rekord z id pola, jego nazwę oraz czy pole jest tekstowe lub inne (ta funkcja działa bez zarzutu). Np. stworzyłam rekord "Promocja" z id "1" typ "checkbox"

Mój problem się zaczyna gdy chce dodać właściwość "Promocja" jako opcja wyboru do innej tabeli. I nie chodzi tu o powiązanie SQL, stworzyłam dodatkową tablicę na zapis ustawień zmiennych. Problemu nie ma gdy mam jedno dodatkowe pole ale gdy mam ich kilka że formularz nie przekazuje tylko wartość ostatniego pola.

Próbowałam rozwiązać to za pomocą zapisy do tablicy ale nie zadziałało to dobrze. Formularz albo nie przekazuje mi wartości pól albo źle je odbieram. Nie wiem w czym jest problem bo nie otrzymuje żadnych błędów PHP a do bazy się zapisują puste pola.

Strona dzieli się na 2 części plik PHP i plik TPL jako szablon.
nospor
Skoro czytasz zamieszczane na tym forum dyskusje, to powinnas wiedziec ze na forum wrozek nie ma i ze powinnas pokazac nam kod jaki masz i wskazac w nim problemowe linijki.
trueblue
Masz na myśli kilka pól o tej samej nazwie?
Wtedy:
  1. <input type="text" name="blabla[]"/>
  2. <input type="text" name="blabla[]"/>
  3. <input type="text" name="blabla[]"/>
nospor
@trublue nie podwazaj mojej teorii o wrozkach wink.gif
Aui06
Fragment pliku tpl

  1. <form action="plug.php?e=listatowarow&s=dodajblog&ids={IDRS}" method="post">
  2. <table class="cells" width="100%">
  3.  
  4. <tr>
  5. <td>Treść komentarza</td><td><textarea name="text1" rows="15" cols="30" >{RTEXT1}</textarea>
  6. <input type="hidden" name="number" value="{RBNUM}">
  7. </td>
  8. </tr>
  9. <tr>
  10. <td>Treść komentarza</td><td><textarea name="text2" class="minimailer" rows="15" cols="30" >{RTEXT2}</textarea>
  11. <input type="hidden" name="number" value="{RBNUM}">
  12. </td>
  13. </tr>
  14. <tr>
  15. <td>Treść komentarza</td><td><textarea name="text3" class="editor" rows="15" cols="30" >{RTEXT3}</textarea>
  16. <input type="hidden" name="number" value="{RBNUM}">
  17. </td>
  18. </tr>
  19. <!-- BEGIN: AA -->
  20. {ITYPP}
  21. <!-- END: AA -->
  22. </table>
  23. <input type="hidden" name="yes" value="1">
  24. <input type="hidden" name="idrs" value="{IDRS}">
  25. {IDSTAT}
  26. <input type="submit" name="submit" class="coltop" value="Dodaj opis towaru">
  27.  
  28. </form>



Odczyt (nie działa bo tabela nietyle jest pusta co źle do niej zapisuje )

  1. $sqlll = sed_sql_query("SELECT * FROM Planer2_plus_sl_pola join planer2_plus_tw_pola ON planer2_plus_tw_pola.pp_Idpola = Planer2_plus_sl_pola.id_pola WHERE id_pola = '".$idpol[i]."'");
  2.  
  3. while ($row3 = sed_sql_fetcharray($sqlll)){
  4. if ($row3['Typ_pola']==0) {
  5. $ptypp .= "<tr><td>".$row3['Nazwa_pola']."</td><td> <input type='text' name='atyp[]' value='".$row3['pp_Wartosc']."'> <input type='hidden' name='idpol[]' value='".$row3['id_pola']."'></td></tr>";
  6.  
  7. }
  8. else{
  9. $ptypp .="<tr><td>".$row3['Nazwa_pola']."</td><td> <input type='checkbox' name='atyp[]' value='".$row3['pp_Wartosc']."' >
  10. <input type='hidden' name='idpol[]' value='".$row3['id_pola']."'></td></tr>";
  11. }
  12. $tidpola .= $row3['id_pola'];
  13.  
  14. }
  15. $t->parse('MAIN.DODBLOG.AA');


Zapis

  1. $idrs = sed_import('idrs', 'P', 'INT');
  2. $atyp = sed_import('atyp', 'P', 'INT');
  3. $idpol = sed_import('idpol', 'P', 'INT');
  4.  
  5. $sq5 = sed_sql_query("SELECT COUNT(*) FROM Planer2_plus_sl_pola");
  6. $ec = mysql_fetch_row($sq5);


Zapis to z nim mam problem
  1. for ($i = 0; $i < $ec; $i++) {
  2.  
  3.  
  4. $sql2a = sed_sql_query("SELECT COUNT(*) FROM Planer2_plus_sl_pola WHERE id_pola = '".$idpol[i]."'");
  5. $sec = mysql_fetch_row($sql2a );
  6. if ($sec[0] > 0){
  7. $sql = sed_sql_query("UPDATE planer2_plus_tw_pola SET (pp_IdTowarS = '".sed_sql_prep($idrs)."', pp_Idpola = '".sed_sql_prep($idpol[i])."', pp_Wartosc ='".sed_sql_prep($idpol[i])."'WHERE pt_idTowarS = '".sed_sql_prep($idrs)."'");
  8.  
  9. }
  10. else {
  11. $sql = sed_sql_query("INSERT INTO planer2_plus_tw_pola (pp_IdTowarS, pp_Idpola, pp_Wartosc) VALUES
  12. ('".$idrs."', '".$idpol[i]."', '".$atyp[i]."')"); } }
  13.  
  14.  
  15. }
trueblue
To co pierwsze:
  1. $idpol[$i]

nie:
  1. $idpol[i]

inne zmienne tablicowe również do poprawki.
Aui06
Fakt miałeś racje, "i" było zmienną. Dziękuję za zwrócenie uwagi.

Niestety zmiana i na $i nic mi nie dała. W dalszym ciągu mam problem, tyle że chyba jestem bliżej.

Wartość wpisywana do formularza albo nie jest zapisywana w tablicy albo jest nie przekazywana. To co napisałam zapisuje do bazy SQL ale z pustymi wartościami (tworzy rekord ale w miejscu gdzie miała być zmienna jest 0 albo nic). Mam też problem z pętlą "for"

  1. $sq5 = sed_sql_query("SELECT COUNT(*) FROM Planer2_plus_sl_pola");
  2. $ec = mysql_fetch_row($sq5);
  3.  
  4. for ($i = 0; $i <= $ec; $i++) {
  5.  
  6.  
  7. $sql2a = sed_sql_query("SELECT COUNT(*) FROM Planer2_plus_sl_pola JOIN planer2_plus_tw_pola WHERE id_pola = '".$idpol[$i]."' AND pp_IdTowarS='".$idrs."'");
  8. $sec = mysql_fetch_row($sql2a );
  9. if ($sec[0] > 0){
  10. $sql = sed_sql_query("UPDATE planer2_plus_tw_pola SET (pp_IdTowarS = '".sed_sql_prep($idrs)."', pp_Idpola = '".sed_sql_prep($idpol[$i])."', pp_Wartosc ='".sed_sql_prep($idpol[$i])."'WHERE pt_idTowarS = '".sed_sql_prep($idrs)."'");
  11.  
  12. }
  13. if ($sec[0] <= 0) {
  14. $sql = sed_sql_query("INSERT INTO planer2_plus_tw_pola (pp_IdTowarS, pp_Idpola, pp_Wartosc) VALUES
  15. ('".$idrs."', '".$idpol[$i]."', '".$atyp[$i]."')"); } }
  16.  
  17.  
  18. }



Pętla ma ograniczenie $ec (SELECT COUNT(*) FROM Planer2_plus_sl_pola) obecnie to jest 7. Tymczasem wykonuje się w nieskończoność nie przestrzegając ograniczenia (wiem że tablica w PHP jest o "0" i jedno pole na logikę powinno być puste bo w tablicy nie ma 7).
trueblue
Ale w $ec nie masz wartości 7.
http://us2.php.net/manual/pl/function.mysql-fetch-row.php
Aui06
Tak tu był błąd przeoczyłam to.

Wciąż jednak nie wiem jak przekazać wartość z dynamicznie tworzonych pól do bazy.

Cytat
Wartość wpisywana do formularza albo nie jest zapisywana w tablicy albo jest nie przekazywana. To co napisałam zapisuje do bazy SQL ale z pustymi wartościami (tworzy rekord ale w miejscu gdzie miała być zmienna jest 0 albo nic).


Próbowałam ją przekazać tak jak inne pola, ale to nie działa. Chwilowo odbieram w ten sposób:

  1. $idrs = sed_import('idrs', 'P', 'INT');
  2. $atyp = sed_import('atyp', 'P', 'INT');
  3. $idpol = sed_import('idpol', 'P', 'INT');


<input type='checkbox' name='atyp[]' value='' >

Czy ktoś z was wie

nospor
Zacznij wkoncu uzywac poprawnego bbcode. Do kodu PHP uzywa sie BBCODE PHP

atyp to tablica, a ty to rzutujesz na INT, czyli na liczbe. No to nie ma prawa dobrze dzialac smile.gif
Aui06
Już zmieniłam na PHP.

Dobrze INT nie mogę używać, to jakiego typu mam użyć?
nospor
Nie wiem jak wyglada funkcja sed_import(). Najlepiej ją olej i zrob tak:

  1. $atyp = $_POST['atyp'];
  2. print_r($atyp); //sprawdzenie czy dobrze odebralo dano
Aui06
Ok, działa.

Dziękuję. Dopiero się uczę PHP i jeszcze mam z nim spore kłopoty.
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.