Edycja danych w bazie danych

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Edycja danych w bazie danych

Post przez pablo663 »

http://wklej.org/id/592021/ - plik z klasą http://wklej.org/id/591702/
Nazwa bazy danych to kom tabela komentarze (id, komentarz).
Witam.

Tworzę sobie skrypt obsługujący komentarze (usuwanie i edycja)

Usuwanie działa. Jak podejść do zrobienia edycji? W tej chwili to co zrobiłem nie działa. Jak powinno to wyglądać?

Pozdrawiam
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Edycja danych w bazie danych

Post przez Morfidon »

Na pierwszy rzut oka wszystko wygląda OK.

is_numeric sprawdza, czy wartość jest numeryczna, ale dalej może oznaczać, że coś jest stringiem, spróbuj rzutować $id na int. $id = int($id).

Myślę, że rzutowanie w funkcji edit przed użyciem $id powinno rozwiązać problem. Tak aby zobrazować problem:

Code: Zaznacz cały

           $id = "50";
           
           echo var_dump($id);
           echo var_dump(is_numeric($id));
           
           $id = (int)$id;
           
           echo var_dump($id);
Jeśli to nie pomoże to spróbuj trochę podebugować i zobaczyć co znajduje się w $_GET['edit'] funkcją var_dump, również przetestuj tą samą funkcją $id w funkcji edit i podaj mi wyniki oraz pokaż całą funkcję getKomentarze();
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Edycja danych w bazie danych

Post przez pablo663 »

Code: Zaznacz cały

 $edit = $_GET['edit'];
    var_dump($edit);
Wyświetla mi po kliknięciu Edytuj komentarza o nr 36 coś takiego:
string(2) "36"
-----------------------------------------------------------------------------------------
Teraz $id w metodzie edit:

Code: Zaznacz cały

public function edit($id,$kom){
        var_dump($id);
    if( !is_numeric($id) ) {
        return false;
    }
//    $result = mysql_query("UPDATE coments SET komentarz = '$kom' WHERE id = ".$id);
//    return $result;
    
    try
        {
                $pdo = new PDO('mysql:host=localhost;dbname=kom', 'root', '');
                $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                $ilosc = $pdo -> exec("UPDATE coments SET komentarz = '$kom' WHERE id = ".$id);
                return $ilosc;
//                if($ilosc > 0)
//                {
//                        echo 'Edytowano: '.$ilosc.' rekord/ow';
//                }
//                else
//                {
//                        echo 'Wystąpił błąd podczas dodawania rekordów!';
//                }
        }
        catch(PDOException $e)
        {
                echo 'Wystąpił błąd biblioteki PDO: ' . $e->getMessage();
        }

    
    }
Wyświetla mi przy wywołaniu:

Code: Zaznacz cały

$a = new Komentarze();
//$a->addKomentarz("DOMINISIA");

//$a->getKomentarz(4);
$a->edit(36, "nowa tresc");
coś takiego: int(36)
-----------------------------------------------------------------------------------
Cała funkcja getKomentarze():

Code: Zaznacz cały

public function getKomentarze(){
    
     try
   {
      $pdo = new PDO('mysql:host=localhost;dbname=kom', 'root', '');
      $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      
      $stmt = $pdo -> query("SELECT * FROM coments");
//      echo '<ul>';
//      foreach($stmt as $row)
//      {
//          echo '<li>'.$row['komentarz'].'</li>';
//      }
//      $stmt -> closeCursor();
//      echo '</ul>';
      
      if ($stmt->rowCount() > 1){
          return $stmt->fetchAll(PDO::FETCH_ASSOC);
      }
   
   }
   catch(PDOException $e)
   {
      echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
   }
   
    
}
A tutaj cała klasa ze wszystkimi trzema metodami: http://wklej.org/id/592361/

Dziękuje za pomoc. Pozdrawiam
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Edycja danych w bazie danych

Post przez Morfidon »

Podmień

Code: Zaznacz cały

$edit = $_GET['edit'];
na

Code: Zaznacz cały

$edit = (int)$_GET['edit'];
i zobacz co się będzie działo.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Edycja danych w bazie danych

Post przez pablo663 »

http://wklej.org/id/592385/

nadal nie edytuje i jest taki błąd: Notice: Undefined index: komm in C:\xampp\htdocs\tb\newEmptyPHP.php on line 49 (wyżej jest link do kodu pliku newEmptyPHP.php)
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Edycja danych w bazie danych

Post przez Morfidon »

Nie zauważyłem tego w ogóle, trzeba była od razu napisać w której linii jest błąd i co dokładnie nie działa.

Bo ta wartość tam nie istnieje dopóki ktoś nie kliknie na submit w formularzu, który swoją drogą nie jest skończony. Gdy odpalisz swój skrypt zobacz, że kod html jest niepoprawny. Jedynie jaką wartość w tamtym miejscu możesz wysłać do funkcji edit to $row['komentarz'], ale to chyba nie to co zamierzasz napisać.

W tym miejscu:

Code: Zaznacz cały

    foreach ($d as $row){
    
    
    echo '    <form method="post" action="newEmptyPHP.php">
  <input type="text" name="komm" value="'.$row['komentarz'].'" />
  <input type="submit" value="OK"/> '; 
     $g = $_POST['komm'];
  $a->edit($edit, $g);
 
}
domyślam się, że chcesz potwierdzić edycję jakiegoś komentarza, jednak przy pomocy foreach wypiszesz wszystkie możliwe komentarze, napisz może funkcje pobierającą tylko jeden komentarz, z podanym id?, a funkcje edit wywołuj po kliknięciu na OK w totalnie innym miejscu po sprawdzeniu czy $_POST['komm'] istnieje.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Edycja danych w bazie danych

Post przez pablo663 »

hmmm napisałem już funkcję pobierającą jeden komentarz:

http://wklej.org/id/592406/
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Edycja danych w bazie danych

Post przez pablo663 »

Długo już kombinuję i nadal mi nie działa :(
Coś takiego mam w tej chwili newEmptyPHP: http://wklej.org/id/592536/ po włączeniu tego pliku (http://127.0.0.1/tb/newEmptyPHP.php) wyświetla mi:
Notice: Undefined index: postkom in C:\xampp\htdocs\tb\newEmptyPHP.php on line 45

a gdy kliknę edytuj to wyświetla mi formularz ale gdy wprowadze dane i kliknę ok to wyświetla:

Notice: Undefined variable: edit in C:\xampp\htdocs\tb\newEmptyPHP.php on line 48

--------------------------------------------------------

Tutaj jest plik z klasą i jej metodami które napisałem: http://wklej.org/id/592539/
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Edycja danych w bazie danych

Post przez Morfidon »

Code: Zaznacz cały

  $x = $_POST['postkom'];     

if (isset ($x) ){
    $a->edit($edit, $x);
} 
    
masz sprawdzić czy istnieje $_POST['postkom'], nie $x... po co w ogóle te przypisanie.
pablo663
Początkujący
Początkujący
Posty: 17
Dołączył(a): sobota, 10 września 2011, 09:45

Re: Edycja danych w bazie danych

Post przez pablo663 »

Zrobiłem tak:

Code: Zaznacz cały

if (isset ($_POST['postkom']  ) ){
    $a->edit($edit, $_POST['postkom']);
} 
i teraz po kliknięciu edytuj jest: Notice: Undefined variable: edit in C:\xampp\htdocs\tb\newEmptyPHP.php on line 48
Post Reply