Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Plik edytujący rekordy
Forum PHP.pl > Forum > Przedszkole
maly_pirat
Witam, już poradziłem sobie z dodawaniem rekordów, oraz usuwaniem rekordów, ale mam drobny problem z edycją.
W tabeli `filmy` mamy takie kolumny: id, nazwa, gatunek, ocena, info.

Utworzyłem plik edytuj_film.php, który pobiera zawartości kolumny `filmy`
Obok każdego nowego filmu jest opcja EDYCJI wpisu. Wpis da się edytować, ale są problemy z zatwierdzeniem zmian.
Wyskakuje tylko komunikat że Edycja nie powiodła się.
Oto fragment kodu, odpowiadającego za edycje.

  1. <?php
  2. if ($_GET['akcja'] == 'edytuj') {
  3.  
  4.  $zapytanie = "SELECT * FROM filmy WHERE id=".$_GET['id'];
  5.  $filmy2 = mysql_query($zapytanie);
  6.  $rekord = mysql_fetch_assoc($filmy2);
  7. ?>


http://wklejto.pl/6822 (już nie będę śmiecił tematu

  1. <?php
  2. }
  3.  
  4. if ($_POST['zmien']) {
  5.  
  6. $zapytanie = "UPDATE filmy SET nazwa='".$_POST['nazwa']."', gatunek='".$_POST['gatunek']."', ocena='".$_POST['ocena']."', info='".$_POST['info']. " WHERE id=".$_POST['id'];
  7. $filmy2 = mysql_query($zapytanie);
  8.  
  9.  if ($wykonaj) 
  10.  echo "all ok";
  11.  else 
  12.  echo "operacja niepowiodla sie:/";
  13.  
  14. }
  15. ?>


Podejrzewam że błąd jest raczej w $zapytanie = "UPDATE.." więc prosiłbym o korektę.
Skie
Masz błąd z cudzysłowami w UPDATE, zamień je na

  1. <?php
  2. $zapytanie = "UPDATE filmy SET nazwa='".$_POST['nazwa']."', gatunek='".$_POST['gatunek']."', ocena='".$_POST['ocena']."', info='".$_POST['info']."' WHERE id=".$_POST['id'];
  3. ?>
maly_pirat
i jeszcze;
if ($wykonaj)
zmienić też trzeba na:
if ($zapytanie)

Nie zauważyłem ;[ Ale i tak nici z tego ..

Pisze że all ok, ale gdy odświeżam stronę, rekord nadaj jest o tej samej nazwie.
Skie
Twój błąd tkwi w tym, że nigdzie nie masz zdefiniowanej zmiennej $_POST['id']

Zamiast tego użyj $_GET['id']
a w formularzu zamiast używać

action=$_SERVER['PHP_SELF']

zrób coś takiego

action=nazwapliku.php?id=$rekord['id']
rybik
nie zapomnij o walidacji danych wejsciowych

w zapytaniu SQL:

zamiast $_GET['id'] użyj (int)$_GET['id'] , bedziesz mial pewnosc ze tam bedzie cyfra a nie zastrzyk SQL
zamiast $_POST['nazwa'] używaj htmlspecialchars($_GET['nazwa']) jak wyzej, tyle ze dla lancucha tekstu

to, że danych "nie widać" bo leca przez POST zamiast GET, nie znaczy, że nie da się ich oszukać, nawet gdy jest to lista select, czy checkbox, wysłanie dowolnych danych POST do twojego skryptu jest banalnie proste, wiec zatroszcz sie ich filtrowanie, polecam 2 funkcje:

1. zapewnia wstepna filtrację danych

  1. <?php
  2. function prefilter(&$data) {
  3. if(is_array($data)) 
  4. array_map('prefilter', &$data); 
  5. else if (get_magic_quotes_gpc) 
  6. $data= htmlspecialchars(stripslashes($data),ENT_QUOTES); 
  7. else
  8. $data= htmlspecialchars($data,ENT_QUOTES);  
  9. }
  10. // uzycie
  11. prefilter(&$_POST);
  12. prefilter(&$_GET);
  13. ?>


2. wyrejestrowuje zmienne przy opcji register_globals ON

  1. <?php
  2. function unregister_globals() {
  3. $arrays = array('_REQUEST', '_SESSION', '_SERVER', '_ENV', '_FILES', '_COOKIE');
  4. if (ini_get(register_globals)) {
  5. foreach ($arrays as $value) {
  6. foreach ($GLOBALS[$value] as $key => $var) {
  7. if ($var === $GLOBALS[$key]) {
  8. unset($GLOBALS[$key]);
  9. }//if
  10. }//foreach
  11. }//foreach
  12. } // if
  13.  }// unrefgister_globals()
  14. ?>
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.