Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]pole select przy edycji formularza
Forum PHP.pl > Forum > Przedszkole
sindbad_zeglarz
Mam następujący problem.
Formularz który edytuje (zalaczony kod) dziala prawie ok. Ale to Prawie robi różnice.

Mam pole Czy aktualna, w którym user musi wpisać sobie wszystko co chce przy edycji.

Pole czy aktualna to pole uzupelniane w bazie.

W poniższym przypadku może wpisać wszystko.
Chciałbym to ograniczyć. Żeby user wybierał z kolumny w bazie wartosc.

Kolumna ma nazwe czy_aktualna, jesli wpisze tam powiedzmy 10 roznych możliwosci to wtedy sobie wybierze.
Wszystko w pętli bo przecież to edycja formularza a nie dodawanie nowego.

Ma ktoś jakiś prosty pomysł ?



  1. <?php
  2. ini_set('default_charset', 'UTF-8');
  3. $file = file_get_contents('./header.inc.php', FILE_USE_INCLUDE_PATH);
  4. echo $file;
  5. include ('conf.php');
  6.  
  7. if (!isset($_POST['action']))
  8.  
  9. {
  10. $_POST['action'] = "zapisz_dane";
  11. $sql=mysql_query("select * from dzid where id=".$_GET['id']) or die("nie ma danych");
  12. list ($T,$N)=mysql_fetch_row($wynik);
  13. if(mysql_numrows($sql)>0)
  14. {
  15. $row=mysql_fetch_assoc($sql);
  16. echo'<form action="edit.php" method="post">
  17.  
  18. <table>
  19. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  20. <tr><td>czy_aktualna (T/N)</td><td><input type="text" value="'.$row['czy_aktualna'].'" name="czy_aktualna" /></td></tr>
  21. tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  22. </table>
  23. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  24. <input type="hidden" value="zapisz_dane" name="action" />
  25. <input type="submit" value="Zapisz"/>
  26. </form>';
matty7
Wyciągaj wartości z tej kolumny i wrzucaj do selecta. Tak przy okazji, poczytaj o SQL Injection. wink.gif

Możesz stworzyć sobie osobną tabele z wartościami, i stamtąd wyciągać.
b4rt3kk
Hmm, zastosuj selecta? Nie wiem czy dobrze zrozumiałem? Wczytujesz z bazy pola jakie moze miec do wyboru tak jak mowiles i zwyczajnego selecta stosujesz.

  1. $tablicaSelectables = wczytujesz z bazy co uzytkownik moze sobie wybrac
  2.  
  3. echo '<select name="nazwa">';
  4.  
  5. for ($i=0; $i<sizeof($tablicaSelectables); $i++) {
  6. echo '<option value="' . $tablicaSelectables[$i] . '">' . $tablicaSelectables[$i] . '</option>';
  7. }
  8.  
  9. echo '</select>';
sindbad_zeglarz
b4rt3kk - ale echo wyswietla calosc form.
b4rt3kk
Przecież nie musisz wyświetlać wszystkiego jednym echo.

  1. echo'<form action="edit.php" method="post">
  2.  
  3. <table>
  4. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  5. <tr><td>czy_aktualna (T/N)</td><td>';
  6.  
  7.  
  8. $tablicaSelectables = array('wartosc1', 'wartosc2', 'wartosc3');
  9.  
  10. echo '<select name="nazwa">';
  11.  
  12. for ($i=0; $i<sizeof($tablicaSelectables); $i++) {
  13. echo '<option value="' . $tablicaSelectables[$i] . '">' . $tablicaSelectables[$i] . '</option>';
  14. }
  15.  
  16. echo '</select>';
  17.  
  18. echo '</td></tr>
  19. <tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  20. </table>
  21. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  22. <input type="hidden" value="zapisz_dane" name="action" />
  23. <input type="submit" value="Zapisz"/>
  24. </form>';
sindbad_zeglarz
Undefined variable: i
b4rt3kk
Pokaż jak teraz kod wygląda i w której linijce ten błąd występuje. smile.gif
sindbad_zeglarz
  1. <?php
  2. ini_set('default_charset', 'UTF-8');
  3. $file = file_get_contents('./header.inc.php', FILE_USE_INCLUDE_PATH);
  4. echo $file;
  5. include ('conf.php');
  6.  
  7. if (!isset($_POST['action']))
  8.  
  9. {
  10. $_POST['action'] = "zapisz_dane";
  11. $sql=mysql_query("select * from dzid where id=".$_GET['id']) or die("nie ma danych");
  12. list ($T,$N)=mysql_fetch_row($wynik);
  13. if(mysql_numrows($sql)>0)
  14. {
  15. $row=mysql_fetch_assoc($sql);
  16. echo'<form action="edit.php" method="post">
  17.  
  18. <table>
  19. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  20. <tr><td>czy_aktualna (T/N)</td>
  21.  
  22. <td><select name="nazwa" />
  23. $tablicaSelectables = array ("'.$row['czy_aktualna'].'")
  24. for ($i=0; $i<sizeof($tablicaSelectables); $i++)
  25. {
  26. <option value="' . $tablicaSelectables[$i] . '"> . $tablicaSelectables[$i] . </option> <------tutaj bład. line 28
  27. }
  28.  
  29. </select></td></tr>
  30.  
  31.  
  32.  
  33.  
  34. <tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  35. </table>
  36. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  37. <input type="hidden" value="zapisz_dane" name="action" />
  38. <input type="submit" value="Zapisz"/>
  39. </form>';



Notice: Undefined variable: tablicaSelectables in line 28

Notice: Undefined variable: i in line 28
b4rt3kk
Nie możesz tak zrobić, musisz podzielić na kilka echo, tak jak napisałem wcześniej.

  1. echo'<form action="edit.php" method="post">
  2.  
  3. <table>
  4. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  5. <tr><td>czy_aktualna (T/N)</td><td>';
  6.  
  7.  
  8. $tablicaSelectables = array('wartosc1', 'wartosc2', 'wartosc3');
  9.  
  10. echo '<select name="nazwa">';
  11.  
  12. for ($i=0; $i<sizeof($tablicaSelectables); $i++) {
  13. echo '<option value="' . $tablicaSelectables[$i] . '">' . $tablicaSelectables[$i] . '</option>';
  14. }
  15.  
  16. echo '</select>';
  17.  
  18. echo '</td></tr>
  19. <tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  20. </table>
  21. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  22. <input type="hidden" value="zapisz_dane" name="action" />
  23. <input type="submit" value="Zapisz"/>
  24. </form>';


Wklej ten fragment kodu, powinno chodzić.
sindbad_zeglarz
w twoim przypadku w ogole nie przyjmuje.
w moim daje tylko Notice.

  1. if (!isset($_POST['action']))
  2.  
  3. {
  4. $_POST['action'] = "zapisz_dane";
  5. $sql=mysql_query("select * from dzid where id=".$_GET['id']) or die("nie ma danych");
  6. list ($T,$N)=mysql_fetch_row($wynik);
  7. if(mysql_numrows($sql)>0)
  8. {
  9. $row=mysql_fetch_assoc($sql);
  10. echo'<form action="edit.php" method="post">
  11.  
  12. <table>
  13. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  14. <tr><td>czy_aktualna (T/N)</td>
  15.  
  16. <td><select name="nazwa" />
  17. $tablicaSelectables = array ("'.$row['czy_aktualna'].'")
  18. for ($i=0; $i<sizeof($tablicaSelectables); $i++)
  19. {
  20. <option value="' . $tablicaSelectables[$i] . '"> . $tablicaSelectables[$i] . </option> <------tutaj bład. line 28
  21. }
  22.  
  23. </select></td></tr>
  24. <tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  25. </table>
  26. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  27. <input type="hidden" value="zapisz_dane" name="action" />
  28. <input type="submit" value="Zapisz"/>
  29. </form>';


deklaruje array juz dana z bazy.
ale caly czas pluje sie o:
Notice: Undefined variable: tablicaSelectables in line 28
Notice: Undefined variable: i in line 28

w Twoim pluje sie o:
bo jest echo w echo chyba.

  1. echo '<select name="nazwa">'; -> o to expecting ',' or ';'
  2.  
  3. for ($i=0; $i<sizeof($tablicaSelectables); $i++) {
  4. echo '<option value="' . $tablicaSelectables[$i] . '">' . $tablicaSelectables[$i] . '</option>';
  5. }
  6.  
  7. echo '</select>';
  8.  
  9. echo '</td></tr>
b4rt3kk
Musisz podzielić wyświetlanie echo na kilka bloków:

  1. echo '<form action="edit.php" method="post">
  2.  
  3. <table>
  4. <tr><td>Nr</td><td><input type="text" value="'.$row['nr'].'" name="nr" /></td></tr>
  5. <tr><td>czy_aktualna (T/N)</td>
  6.  
  7. <td><select name="nazwa_pola">';


pod tym echo kolejne:

  1. $tablicaSelectables = array('wart1', 'wart2', 'wart3'); // daj roboczo takie wartosci, bo nie wiem co jest w Twojej zmiennej, cos moze powodowac bledy
  2.  
  3. for ($i=0; $i<sizeof($tablicaSelectables); $i++)
  4. {
  5. echo '<option value="' . $tablicaSelectables[$i] . '">' . $tablicaSelectables[$i] . '</option>';
  6. }


i ostatni blok do wyswietlenia:

  1. echo '</select></td></tr>
  2. <tr><td>uwagi</td><td><TEXTAREA name="uwagi" rows="10" cols="50"> '.$row['uwagi'].' </TEXTAREA></td></tr>
  3. </table>
  4. <input type="hidden" value="'.$_GET['id'].'" name="id" />
  5. <input type="hidden" value="zapisz_dane" name="action" />
  6. <input type="submit" value="Zapisz"/>
  7. </form>';


przekopiuj caly kod ode mnie poki co i uruchom.
sindbad_zeglarz
ok b4rt3kk podzielilem jest ok.
select działa.

a jak teraz pobrac do tablicy dane z kolumny w bazie:

$tablicaSelectables = array('wart1', 'wart2', 'wart3');



do zwyklego imputa pobieram tak:
<input type="text" value="'.$row['nr'].'" name="nr" />
a do arraya ?
b4rt3kk
Najpierw mi powiedz co znajduje się w tej kolumnie w bazie, tak konkretnie.
sindbad_zeglarz
pola
T- LSV1
T- LSV2
....
T- GHS1
T- GHS2
T- DHL1
T- DHL2
N- LSV1
....


różnie ogolnie VARCHAR.
b4rt3kk
Czyli chcesz by pobierało wszystkie wiersze z tabeli z bazy danych z kolumny czy_aktualna? Bo jak widzę to dotychczas wyświetlałeś tylko jeden rząd. Jeśli tak to musisz kolejne zapytanie napisać wczytujące dane do tabeli.

  1. $query = "SELECT czy_aktualna FROM dzid";
  2. $sql1=mysql_query($query) or die('');
  3. $tablicaSelectables = array();
  4.  
  5. while ($row1 = mysql_fetch_assoc($sql1)) {
  6. $tablicaSelectables[] = $row1['czy_aktualna'];
  7. }


Możesz ten fragment dorzucić przed wyświetlaniem formularza. A już w samym formularzu wywalić całą linijkę $tablicaSelectables = array('wart1', 'wart2', 'wart3');

Jeśli coś by nie działało wklejaj cały kod i opisz w której linijce błędy. smile.gif

Edytowałem nazwy zmiennych, bo inaczej wszystko się wysypie.
sindbad_zeglarz
ok dziala dzieki b4rt3kk - polecialo pomógł.
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.