Problem z usuwaniem i edycją danych

0

Witam dopiero zaczynam poznawać PHP i wzorowałem się trochę na pracy kolegi, u niego wszystko śmiga a u mnie coś nie trybi :/ need help

Linki do edycji oraz usuwania usera:

while ($row = mysql_fetch_assoc($result)) {
    	echo '<tr><td>'. $row["id_usr"].'</td>';
    	echo '<td>'.$row["login"].'</td>';
	     echo '<td>'.$row["pass"].'</td>';
	     echo '<td>'.$row["upr"].'</td>';
       echo '<td><a href=editu.php?id_usr='.$row["id_usr"].'>Edytuj</a></td>';
       echo '<td><a href=delu.php?id_usr='.$row["id_usr"].'>Usuń</a></td></tr>';
 

w editu.php mam wygląd potrzebny do edycji użytkownika a obsługę zapisaną mam w edit_u.php.

editu.php:

<div id="page">
 <form action="edit_u.php" method="Post">
ID:
<input type="text" name="id_usr" value="<? $id_usr=$HTTP_GET_VARS["id_usr"]; echo $id_usr; ?>" disabled="disabled" /><br />
Login:
<input type="text" name="login" value="<? $login=$HTTP_GET_VARS["login"]; echo $login; ?>" /><br />
Haslo:
<input type="text" name="pass" value="<? $pass=$HTTP_GET_VARS["pass"]; echo $pass; ?>" /><br />
Uprawnienie:
<input type="text" name="upr" value="<? $upr=$HTTP_GET_VARS["upr"]; echo $upr; ?>" /><br />
<input type="submit" value="Zapisz" />
</form>
</div>	
 

edit_u.php:

 
<?php
$id_usr = $_POST['id_usr'];
$login = $_POST['login'];
$pass= $_POST['pass'];
$upr= $_POST['upr'];


if($login || $pass || $upr) {
    
    $connection = @mysql_connect('localhost', 'root', 'vertrigo')
    or die('Brak polaczenia z serwerem MySQL');
    $db = @mysql_select_db('baza', $connection)
    or die('Nie moge polaczyc sie z baza danych');
    
	$edit = "UPDATE usr SET login='$login', pass='$pass', upr='$upr' WHERE id_usr='$id_usr'";
    $query = @mysql_query($edit);
    
    if($query) echo "Rekord zostal zmodyfikowany";
    else echo "Blad nie udalo sie zmodyfikowac rekordu";
    
    mysql_close($connection);
}
echo '<br><a href="uzytkownicy.php">Powrot</a>';
?> 

Usuwanie delu.php:

<?php
$id_usr = $_POST['id_usr'];
$login = $_POST['login'];
$pass= $_POST['pass'];
$upr= $_POST['upr'];


if($login || $pass || $upr) {
    
    $connection = @mysql_connect('localhost', 'root', 'vertrigo')
    or die('Brak polaczenia z serwerem MySQL');
    $db = @mysql_select_db('baza', $connection)
    or die('Nie moge polaczyc sie z baza danych');
    
	$del = "DELETE FROM usr WHERE id_usr='$id_usr'";
    $query = @mysql_query($del);
    
    if($query) echo "Rekord zostal usunięty";
    else echo "Blad nie udalo sie usunąć rekordu";
    
    mysql_close($connection);
}
echo '<br><a href="uzytkownicy.php">Powrot</a>';
?> 
 

Z góry dzięki :)

0

Trochę nie napisałeś co jest nie tak.

$HTTP_GET_VARS jest niezalecane i przestarzałe od 11 lat.

0

No tak mój błąd :D przy edytowaniu wyświetla mi id usera po zatwierdzeniu nowych danych do edycji nic sie nie zmienia oraz nie usuwa wyznaczonego rekordu w tabeli.

0

Okej, masz tu demo "debugowania przez dupczenie", ogólnie poczytaj sobie o debugowaniu.

<?php
$id_usr = $_POST['id_usr'];
$login = $_POST['login'];
$pass= $_POST['pass'];
$upr= $_POST['upr'];
echo 'dupa dupa dupa, robimy debug<hr />';
echo '<pre>'.print_r($_POST).'</pre>';
 
if($login || $pass || $upr) {
    echo 'warunek spełniony<br />';
    $connection = @mysql_connect('localhost', 'root', 'vertrigo')
    or die('Brak polaczenia z serwerem MySQL');
    echo 'no niby połączenie jest<br />';
    $db = @mysql_select_db('baza', $connection)
    or die('Nie moge polaczyc sie z baza danych');
    echo 'baza niby wybrana<br />';
    $edit = "UPDATE usr SET login='$login', pass='$pass', upr='$upr' WHERE id_usr='$id_usr'";
    echo 'zapytanie wygląda następująco: '.$edit.'<br />';
    $query = @mysql_query($edit);
    echo 'zwrotka zapytania: '.$query.'<br />';
    if($query) echo "Rekord zostal zmodyfikowany";
    else echo "Blad nie udalo sie zmodyfikowac rekordu";
 
    mysql_close($connection);
}
else {
  echo 'nie spełniony warunek<br />';
}
echo 'kod się nie wywalił i dotarliśmy do tego miejsca, hurra<br />';
echo '<br><a href="uzytkownicy.php">Powrot</a>';
?> 

O co tu chodzi?
Ano na początek wyświetlamy sobie tablicę POST - jeżeli będzie pusta to nawet nie szukamy dalej tylko wracamy krok dalej, bo to oznacza, że coś wcześniej jest skopane.
Potem sprawdzamy czy warunek w ogóle przechodzi - jeżeli tak - informacja, jeżeli nie - też informacja. Jeżeli dane w POST są i są spodziewane - a warunek nie przeszedł - wnioskujemy, że skopaliśmy warunek (literówka w nazwie zmiennej, albo w ogóle zły warunek - np. u Ciebie powinno być chyba wszędzie && zamiast || (chociaż ja nie wiem co chcesz zrobić)).
Potem niby przy funkcjach mysql_* masz "obsługę" niepowodzeń - ale (w przypadku własnych/zewnętrznych funkcji czy bibliotek - w przypadku mysql to chyba nie przejdzie) kod może się wywalić - funkcja jest zależna od innej funkcji, kod się zatrzymuje, a ty masz ukryte powiadomienia. funkcja którą ty wywołujesz już nic nie zwróci. dlatego dla pewności po wykonaniu tej operacji też zapisujemy sobie echo.
Potem oczywiście wyświetlenie zapytania. W gąszczu łączeń stringów, cudzysłowów, apostrofów i nawiasów można się zgubić. Niepewne zapytanie - testowo je sobie wyświetlimy.
Dla pewności sprawdzamy co nam mysql_ zwraca - zapewne zasób i będzie pokazane coś w stylu [Resource: 1] (a nawet nie pamiętam dokładnie co tam php pokazywał).
Potem jeszcze potwierdzenie poprawnego warunku (jeżeli w warunku jest funkcja i tak jak wyżej - ona się wysypie - to po warunku nie dostaniesz ani jej spełnienia ani nie spełnienia) i jakieś echo na koniec.

Prostsza wersja tego wszystkiego zakłada wpisywanie w każde echo "dupa", stąd nazwa metody debugowania ;)

edit: wcześniej się nie przyglądałem Twojemu kodowi, teraz widzę, co jest powodem. Wykorzystując ten debug sam to szybko zauważysz, więc zapraszam do dzielenia się wnioskami z nowopoznanej tajnej wiedzy nt. najprostszego debugowania ;)

0

Dzięki za info i pomoc :)

PS. kolejny problem z usuwaniem :/

 

<?php
$id_usr = $_POST['id_usr'];
$login = $_POST['login'];
$pass= $_POST['pass'];
$upr= $_POST['upr'];
echo 'dupa dupa dupa, robimy debug<hr />';
echo '<pre>'.print_r($_POST).'</pre>';


if (isset($_GET['usun'])) { 
      echo 'warunek spełniony<br />';
    $connection = @mysql_connect('localhost', 'root', 'vertrigo')
    or die('Brak polaczenia z serwerem MySQL');
    $db = @mysql_select_db('baza', $connection)
    or die('Nie moge polaczyc sie z baza danych');
    echo 'no niby połączenie jest<br />';
   
	$del = "DELETE FROM usr WHERE 'id_usr'='{$_GET['usun']}' ";
  echo 'zapytanie wygląda następująco: '.$del.'<br />';
    $query = @mysql_query($del);
    echo 'zwrotka zapytania: '.$del.'<br />';
    
    if($query) echo "Rekord zostal usunięty";
    else echo "Blad nie udalo sie usunąć rekordu";
    
    mysql_close($connection);
}
echo '<br><a href="uzytkownicy.php">Powrot</a>';
?> 

pisze ze rekord zostal usuniety, a w bazie nic sie nie zmienia :/

0

a zapytanie wydaje się poprawne?
sprawdzając $query sprawdzisz czy zapytanie się wykonało - owszem, wykonało się, ale nie dopasowało się do żadnego wyniku, czyli nie zrobiło nic. ale się wykonało.
Takie rzeczy sprawdzaj sobie przez: mysql_affected_rows (od razu zaznaczę, żeby na przyszłość nie było problemu - przy UPDATE, załóżmy, że masz rekord o ID=1 i wartości dupa='duża', jeżeli zrobisz UPDATE tabela SET dupa='duża' WHERE id=1 - mysql_affected_rows zwróci 0, bo żaden z wierszy się nie zmienił)

spójrz na zapytanie, przyjrzyj się Twojej tabeli w phpmyadmin i dojrzyj co jest nie tak

1 użytkowników online, w tym zalogowanych: 0, gości: 1