Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Edytowanie rekordu z określonym ID
Forum PHP.pl > Forum > Przedszkole
SpiJay
Siemanko !

Uczę się PHP stąd właśnie temat w takim dziale. Chcę zrobić automat do np ogłoszeń.
Dodawanie ogłoszenia, usuwanie, edytowanie.

Wszystko mi idzie nie źle i sprawnie, aczkolwiek z problemem borykam się w końcowym etapie skryptu.
Chodzi o edytowanie:

Kod PHP
  1. (...)
  2. # Edytowanie ogloszenia
  3. if($_POST['adv_edit'] != '' && $_SESSION['admin'] == 'ok') {
  4.  
  5. $qwerty = "SELECT * FROM ogloszenie WHERE id=".$_POST['2lp'];
  6. $sql = mysql_query($qwerty)or die('Błąd zapytania');
  7. list($adv_id, $adv_name, $adv_text) = mysql_fetch_array($sql);
  8.  
  9. $tpl->set_var('ADV_NAME', $adv_name);
  10. $tpl->set_var('ADV_TXT', $adv_text);
  11. $tpl->set_var('ADV_SUBMIT', 'adv_update');
  12.  
  13. if($_POST['adv_update'] != '' && $_SESSION['admin'] == 'ok'){
  14. if($_POST['adv_name'] != '') {
  15. if($_POST['adv_txt'] != '') {
  16. echo $_POST['2lp'];
  17. mysql_query("UPDATE ogloszenie SET nazwa='".$_POST['adv_name']."', tresc='".$_POST['adv_txt']."' WHERE id='".$_POST['2lp']."'");
  18. $tpl->set_var('ADV_ACTION', $adv_ok);
  19. } else { $tpl->set_var('ADV_ACTION', $adv_bad_name); }
  20. } else {
  21. $tpl->set_var('ADV_ACTION', $adv_bad_txt);
  22. }
  23. }
  24.  
  25. }
  26. (...)


Oraz formularz HTML:

  1. <form method="post">
  2. <input type="text" name="adv_name" style="margin-left: 20px; width: 300px; margin-bottom: 4px;" value="{ADV_NAME}"/>
  3. <textarea name="adv_txt" style="width: 94%; margin-left: 20px; height: 200px; resize: vertical;">{ADV_TXT}</textarea><br/>
  4. <input type="submit" name="{ADV_SUBMIT}" value="Dodaj ogłoszenie +" style="margin-left: 20px; margin-top: 10px; cursor: pointer" onclick="return confirm('Dodać nowe ogłoszenie ?')"/>
  5. </form>
  6. <table style="width: 95%; margin: 0 auto; margin-top: 10px;">
  7. <tr>
  8. <td class="row1" width="30">
  9. Lp.
  10. </td>
  11. <td class="row1">
  12. Nazwa / Treść
  13. </td>
  14. <td class="row1" width="30" align="center">
  15. Usuń
  16. </td>
  17. <td class="row1" width="30" align="center">
  18. Edytuj
  19. </td>
  20. </tr>
  21. <!--Begin_OGL-->
  22. <tr>
  23. <td style="background: #bbb; padding: 3px;">{ID_OGLOSZENIE} :: {LP_OGLOSZENIE}</td>
  24. <td style="background: #ddd; padding: 3px;">&raquo; {NAZWA_OGLOSZENIE} - {TRESC_OGLOSZENIE}</td>
  25. <td style="background: #BA8F8F; padding: 3px;" align="center"><form method="post"><input type="submit" name="adv_del" value="X" title="Usuń" style="color:#9B3333; cursor: pointer;" onclick="return confirm('Czy napewno chcesz usunąć ogłoszenie ?')"/><input type="hidden" name="lp" value="{LP_OGLOSZENIE}"/></form>{LP_OGLOSZENIE}</td>
  26. <td style="background: #9DBA8F; padding: 3px;" align="center"><form method="post"><input type="submit" name="adv_edit" value="E" title="Edytuj" style="color:#339B42; cursor: pointer;"/><input type="hidden" name="2lp" value="{LP_OGLOSZENIE}"/>{LP_OGLOSZENIE}</td>
  27. </tr>
  28. <!--End_OGL-->
  29. </table>


Chcę aby w takim samym formularzu jak DODAWANIE OGLOSZENIA odbywało się jego edytowanie. Więc po kliknięciu `Edit` wczytuję dane o id=$x do formularza.
Super, gra !

Tylko jak teraz zapisać wprowadzone poprawki do bazy ?

No więc napisałem:
  1. if($_POST['adv_update'] != '' && $_SESSION['admin'] == 'ok'){
  2. if($_POST['adv_name'] != '') {
  3. if($_POST['adv_txt'] != '') {
  4. echo $_POST['2lp'];
  5. mysql_query("UPDATE ogloszenie SET nazwa='".$_POST['adv_name']."', tresc='".$_POST['adv_txt']."' WHERE id='".$_POST['2lp']."'");
  6. $tpl->set_var('ADV_ACTION', $adv_ok);
  7. } else { $tpl->set_var('ADV_ACTION', $adv_bad_name); }
  8. } else {
  9. $tpl->set_var('ADV_ACTION', $adv_bad_txt);
  10. }
  11. }


Aczkolwiek z tego co zdążyłem zauważyć nie odczytuje mi fragmentu zapytania: WHERE id='".$_POST['2lp']. - najnormalniej nie pobiera ID.

Macie jakieś rady ?

nikt nie ma pomysłu ?
kamilw1982
Jakoś trochę "zamotałeś" cały ten problem.

Ja ogólnie robię to tak, że w formularzu robie ukryte pole (<input type="hidden"...>) o nazwie id_rekordu i tam zapamiętuje 0 - jak to jest pusty formularz (dodawanie nowego rekordu) lub ID rekordu, jak to edycja. A po przesłaniu tego formularza sprawdzam jego poprawność i jak wszystko OK to - jak id_rekordu=0 wykonuje INSERT, jak id_rekordu>0 - wykonuje UPDATE.

Twój kod jest podatny na SQL Injection - staraj się w zapytaniach nie używać odwołań typu id=".$_POST['2lp']... jak już to lepiej id=".((int)$_POST['2lp']).

IProSoft
Właśnie tego pola brakuje Ci w pierwszym formularzu:

Kod
<form method="post">
<input type="text" name="adv_name" style="margin-left: 20px; width: 300px; margin-bottom: 4px;" value="{ADV_NAME}"/>
<textarea name="adv_txt" style="width: 94%; margin-left: 20px; height: 200px; resize: vertical;">{ADV_TXT}</textarea><br/>
<input type="submit" name="{ADV_SUBMIT}" value="Dodaj ogłoszenie +" style="margin-left: 20px; margin-top: 10px; cursor: pointer" onclick="return confirm('Dodać nowe ogłoszenie ?')"/>
</form>

nie ma:
Kod
<input type="hidden" name="2lp" value="{LP_OGLOSZENIE}"/>

więc zmienna nie jest przesyłana razem z tym formularzem.
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.