strona wysyła inne id, niż posiadane w bazie

0

Witam!
Mam napisany skrypt do edycji oraz usuwania rekordów w bazie danych. I tutaj jest problem, poniważ przy wczytywaniu rekordów z bazy jest ok. Potem do skryptu służącego do edycji oraz usuwania, przysyłam id danego rekordu, aby tam jest edytować bądź usuwać. I tutaj pojawia się, problem, ponieważ strona przesyła id równe: 000000000000001 podczas, gdy w bazie to id wynosi 1. Nie wiem, czy to przez to nie działa, ale tak mi się wydaje i nie umiem sobie z tym poradzić. Prosiłbym o pomoc.

show.php:

<?php

$connection = @mysql_connect('localhost', 'root', 'hasło') 
    or die('Brak połączenia z serwerem MySQL'); 
    $db = @mysql_select_db('strona', $connection) 
    or die('Nie mogę połączyć się z bazą danych'); 
	
	$wynik = mysql_query("SELECT * FROM users") or die('Błąd zapytania'); 
	
	if(mysql_num_rows($wynik) > 0) {
	 echo "<table cellpadding=\"2\" border=1>"; 
    while($r = mysql_fetch_object($wynik)) { 
        echo "<tr>"; 
        echo "<td>".$r->login."</td>"; 
		echo "<td>".$r->password."</td>"; 
        echo "<td>".$r->email."</td>"; 
        echo "<td> 
       <a href=\"delete.php?a=delete&amp;id={$r->id}\">DEL</a> 
       <a href=\"delete.php?a=edit&amp;id={$r->id}\">EDIT</a> 
       </td>"; 
        echo "</tr>"; 
    } 
    echo "</table>"; 
} 
	
	mysql_close($connection); 

	?>
 

delete.php

<?php

$a = trim($_REQUEST['a']);
$id = trim($_GET['id']);

$connection = @mysql_connect('localhost', 'root', 'hasło') or die('Brak połączenia z serwerem MySQL'); 
$db = @mysql_select_db('strona', $connection)  or die('Nie mogę połączyć się z bazą danych'); 
	
	if ($a == 'edit' and !empty($id)) 
	{
	/* zapytanie do tabeli */ 
	$wynik = mysql_query("SELECT * FROM users WHERE id='$id'") or die ('Błąd zapytania');
	 /*  
     wyświetlamy wyniki, sprawdzamy, 
     czy zapytanie zwróciło wartość większą od 0 
     */ 
	if (mysql_num_rows($wynik) > 0)
	{
	/* odczytujemy zawartość wiersza z tabeli */ 
	$r = mysql_fetch_assoc($wynik);
	 /* wczytujemy dane do formularza */ 
        /*  
        w formularz znajdują się ukryte pola "a" 
        z wartością "save" i pole "id" z wartością 
        zmiennej id 
        */ 
	 echo '<form action="show.php" method="post"> 
        <input type="hidden" name="a" value="save" /> 
        <input type="hidden" name="id" value="'.$id.'" />
        login:<br /> 
        <input type="text" name="login" 
        value="'.$r['login'].'" /><br />
		hasło:<br /> 
		<input type="text" name="password" 
		value="'.$r['password'].'" /><br />
        e-mail:<br /> 
        <input type="text" name="email" 
        value="'.$r['email'].'" /><br />
        <input type="submit" value="popraw" /> 
        </form>'; 
		}
		
		elseif ($a == 'save') {
		    $id = $_POST['id']; 
			$login = $_POST['login']; 
			$password = $_POST['password']; 
			$email = $_POST['email']; 
			
			mysql_query("UPDATE users SET login='$login', password='$password', email='$email' WHERE id='$id'") or die('Błąd zapytania'); 
			echo 'Dane zostały zaktualizowane'; 
			}
			
		elseif ($a == 'delete')
			{
			mysql_query("DELETE * FROM users WHERE id='$id'") or die ('Błąd zapytania');
			echo 'Pomyślnie usunięto rekord!. <a href=\"show.php">Powrót</a>';
			}
		}
		
			
			?>
 
0

Ten kod jest tak źle napisany (brak formatowania, idiotyczne nazwy zmiennych, korzystanie ze zdeprecjonowanych funkcji mysql_*, pełny błędów SQLi), że bolą mnie oczy od samego patrzenia - nie mówiąc o jego późniejszym zrozumieniu...


I tutaj pojawia się, problem, ponieważ strona przesyła id równe: 000000000000001 podczas, gdy w bazie to id wynosi 1

Czy przecież 0000000000000001 nie jest dokładnie równe 1? :|

0

Wiesz, dopiero uczę się php. No więc skoro to jest dobrze, to dlaczego ten kod nie zmienia ani nie usuwa rekordów w bazie?

0
// w linijce: mysql_query("UPDATE users SET login='$login', password='$password', email='$email' WHERE id='$id'") or die('Błąd zapytania'); 
"... WHERE id='$id'")

id nie jest polem całkowitoliczbowym, podczas gdy Ty przekazujesz ciąg znaków?

0

ID w bazie jest typem INT, więc są to liczny całkowite. Nie wiem, czy o to chodziło, ale jak już mówiłem, uczę się.

0

Ok, lecz przekazujesz ciąg znaków; spróbuj zmienić to na:

mysql_query("UPDATE users SET login='$login', password='$password', email='$email' WHERE id=$id") or die('Błąd zapytania');

(usunięte zostały apostrofy z '$id')
Nie jestem pewien, czy to coś zmieni, natomiast w PHP nigdy nie wiadomo...


Btw, stawiasz zbyt wiele przecinków w zdaniach.
0

niestety nic to nie pomogło, w dalszym ciągu nic się nie dzieje, a po zmianie odpowiedniej przy usuwania wywala Błąd zapytania.

0

W ogóle to dlaczego za pierwszym razem odczytujesz $id z GET, a za drugim z POST?

0

za pierwszym razem pobieram go, wysłanego z poprzedniej strony (show.php), a potem jest on podany w formularzu, z którego wysyłany jest POST'em, więc odbieram z niego za pomocą POST'a.

0

Daj zrzut bazy

0

tutaj masz strukturę:

CREATE TABLE users( 
id INT( 15 ) NOT NULL AUTO_INCREMENT , 
login VARCHAR( 15 ) NOT NULL DEFAULT '', 
password VARCHAR( 15 ) NOT NULL DEFAULT '', 
email VARCHAR( 50 ) NOT NULL DEFAULT '', 
PRIMARY KEY ( id ) 
);

Dodam, że wyświetla prawidłowo funkcja show.php

Mniemam, że chodziło ci o tabelę, tak?

0

Mniemam, że chodziło ci o tabelę, tak?

Mniemam, że @dzek69 chodziło o zrzut zawartości tabel bazy.

0

user image

Jak widać, są tylko 2 tabele, używam na razie tylko users. W niej są tylko te 2 rekordy.

0

Nie wiem skąd informacja o tym 0000000001 (powiedz proszę), ale!
Właśnie dasz sobie samemu porządną lekcję dlaczego kod trzeba porządkować i pisać jak człowiek. Skopiuj kod, przeformatuj jakimś narzędziem (każde IDE potrafi, ale jak piszesz w notatniku (nie rób tego, a Notepad+ to NIE IDE i też nie korzystaj) to skorzystaj z czegoś online). Potem spójrz na ten przeformatowany kod.

Edit: Hint: save i delete nigdy nie ma prawa się wykonać.

Edit2: Twój post na początku powinien wylecieć za "Szczątkowy opis problemu". Potem za "niska czytelność wątku". Gdyby nie być pobłażliwym w stosunku do Ciebie (dziesiątki tematów dziennie lądują w koszu) to nawet nikt by nie musiał odpisywać, żebyś odkrył swój błąd ;)

0

poprawiłem już to z 0000000001, w bazie miałem wcześniej ustawione oprócz AUTO_INCREMENT jeszcze UNSIGNET I ZEROFILL. Teraz już jest normalne ID, delete się wykonuje, jest zmienione. Z save zmienię później, bo przy delete i tak wyświetla Błąd Zapytania. Oto zmieniony kod:

<?php

$a = trim($_REQUEST['a']);
$id = trim($_GET['id']);

$connection = @mysql_connect('localhost', 'root', 'polska') or die('Brak połączenia z serwerem MySQL'); 
$db = @mysql_select_db('strona', $connection)  or die('Nie mogę połączyć się z bazą danych'); 
	
	if ($a == 'edit' and !empty($id)) 
	{
	/* zapytanie do tabeli */ 
	$wynik = mysql_query("SELECT * FROM users WHERE id='$id'") or die ('Błąd zapytania');
	 /*  
     wyświetlamy wyniki, sprawdzamy, 
     czy zapytanie zwróciło wartość większą od 0 
     */ 
	if (mysql_num_rows($wynik) > 0)
	{
	/* odczytujemy zawartość wiersza z tabeli */ 
	$r = mysql_fetch_assoc($wynik);
	 /* wczytujemy dane do formularza */ 
        /*  
        w formularz znajdują się ukryte pola "a" 
        z wartością "save" i pole "id" z wartością 
        zmiennej id 
        */ 
	 echo '<form action="delete.php?a=save" method="post"> 
        <input type="hidden" name="a" value="save" /> 
        <input type="hidden" name="id" value="'.$id.'" />
        login:<br /> 
        <input type="text" name="login" 
        value="'.$r['login'].'" /><br />
		hasło:<br /> 
		<input type="text" name="password" 
		value="'.$r['password'].'" /><br />
        e-mail:<br /> 
        <input type="text" name="email" 
        value="'.$r['email'].'" /><br />
        <input type="submit" value="popraw" /> 
        </form>'; 
		}
		}
		
		if ($a == 'save') {
		    $id = $_POST['id']; 
			$login = $_POST['login']; 
			$password = $_POST['password']; 
			$email = $_POST['email']; 
			
			mysql_query("UPDATE users SET login='$login', password='$password', email='$email' WHERE id= $id") or die('Błąd zapytania'); 
			echo 'Dane zostały zaktualizowane'; 
			}
			if ($a == 'delete')
			{
			mysql_query("DELETE * FROM users WHERE id= $id") or die ('Błąd zapytania');
			echo 'Pomyślnie usunięto rekord!. <a href=\"show.php">Powrót</a>';
			}
		
			
			?>
 

Edit działa, jeszcze tam szczątkowe problemy są, ale już edytuje. Natomiast z delete dalej mam problem.

0

Ale kod to dalej jak po huraganie. Czyli za tydzień znowu przyjdziesz na forum, bo nie działa.

0

teraz działa wszystko, rozdzieliłem sobie na kilka plików, każdy odpowiada za inną akcję, dzięki za pomoc. Myślę, że można zamknąć. Kod jest jaki jest, uporządkuje sobie go, komentarze zostawiam, ponieważ dopiero się uczę, i gdy otworzę kod, to chcę w razie czego wiedzieć, za co odpowiada funkcja gdybym zapomniał.

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