[php][mysql]Edycja rekordów

Mamy kod:

if($_GET['edytuj']>'0'){
$ide=$_GET['edytuj'];
	$wynik = mysql_query("SELECT * FROM `wpisy` WHERE
    `id_wpis`='$ide'")
    or die('Błąd zapytania'); 
	if(mysql_num_rows($wynik) > 0) { 
	$r = mysql_fetch_assoc($wynik);
	echo'<center><form method="post">
	Data imprezy(Rok-miesiąc-dzień):<br />
	<input type="text" value="'.$r['data'].'" name="data" /><br />
	Godzina rozpoczęcia imprezy(Godzina:minuta):<br />
	<input type="text" value="'.$r['godzina'].'" name="godzina" /><br />
	Nazwa imprezy:<br />
	<input type="text" value="'.$r['tytul'].'" name="tytul" /><br />
	Miejsce i opis(max 250 znaków):<br />
	<input type="textarea" value="'.$r['tekst'].'" maxlength="250" name="opis" /><br />
	<input type="submit" value="Zmień" name="edit" />
	</form></center>';
}
$data2 = $_POST['data'];
$godzina2 = $_POST['godzina'];
$tytul2 = $_POST['tytul'];
$opis2 = $_POST['opis'];
$login2=$_SESSION["user"];
if($_POST['submit'] == 'edit') {
    mysql_query("UPDATE `wpisy` SET `data`='$data2', `user_wpis`='$login2', `godzina`='$godzina2', `tytul`='$tytul2', `tekst`='$opis2' WHERE `id_wpis`='$ide'");
    echo 'Dane zostały zaktualizowane';	
}
}

I wszystko jest niby ok dane ładuje do formularza można je sobie pozmieniać, klikam na “Zmień” i okazuje się że rekord pozostał w niezmienionej formie. próbowałem już chyba wszystkiego i wymiękam może ktoś z was widzi w czym tkwi tu błąd.  Z góry dzięki za pomoc.

  1. Wyświetla ci się komunikat “Dane zostały zaktualizowane”?

  2. Czy utworzone zapytanie SQL działą jeśli je uruchomisz np z phpmyadmin?

  3. Czy zmienna ide jest poprawna? Bo $ide jest pobierane z $_GET ale dane z formularza wysyłasz postem i nie jestem pewien czy to się tak aplikuje.

  1. Nie

  2. Tak

  3. Szczerze to sam już nie wiem.

Jeśli nie wyświetla Ci się komunikat o poprawym zapisaniu danych to zapytanie ci generuje nie poprawnie i nie  działa

 

Spróbuj poniższy kod:

if($_GET['edytuj']>'0'){

	$ide=$_GET['edytuj'];
	$wynik = mysql_query("SELECT * FROM `wpisy` WHERE `id_wpis`='$ide'")
    or die('Błąd zapytania'); 
	
	if(mysql_num_rows($wynik) > 0) { 
		$r = mysql_fetch_assoc($wynik);
		echo'<center><form method="post">
		Data imprezy(Rok-miesiąc-dzień):<br />
		<input type="hidden" value="'.$ide.'" name="id" />
		<input type="text" value="'.$r['data'].'" name="data" /><br />
		Godzina rozpoczęcia imprezy(Godzina:minuta):<br />
		<input type="text" value="'.$r['godzina'].'" name="godzina" /><br />
		Nazwa imprezy:<br />
		<input type="text" value="'.$r['tytul'].'" name="tytul" /><br />
		Miejsce i opis(max 250 znaków):<br />
		<input type="textarea" value="'.$r['tekst'].'" maxlength="250" name="opis" /><br />
		<input type="submit" value="Zmień" name="edit" />
		</form></center>';
	}
	
	if($_POST['submit'] == 'edit') {
		echo 'Czytam dane';
	
		$rekord_id = $_POST['id'];
		$data2 = $_POST['data'];
		$godzina2 = $_POST['godzina'];
		$tytul2 = $_POST['tytul'];
		$opis2 = $_POST['opis'];
		$login2=$_SESSION["user"];
		echo 'Przeczytałem dane';
		echo 'Przygotowuje zapytanie do bazy';
		$query = "UPDATE `wpisy` SET `data`='$data2', `user_wpis`='$login2', `godzina`='$godzina2', `tytul`='$tytul2', `tekst`='$opis2' WHERE `id_wpis`='$rekord_id'";
		echo "Przygotowane zapytanie: ".$query;
		mysql_query($query);
		echo 'Dane zostały zaktualizowane';	
	}
}

Pisane z palca więc może zawierać błędy.

Porównaj sobie ze swoim i wyciągnij wnioski.

To samo dalej nie nadpisuje…

  1. Przeanalizowałeś zmiany które zrobiłem?

  2. Zrozumiałęś te zmiany? Wszystko jest jasne?

  3. Wszystkie napisy pojawiły się  na stronie?

  4. Przygotowane zapytanie SQL (wypisane na stronie) jest poprawne (działa w panelu mysql)?

 

Odpisując w stylu: “dalej nie działa” niczego nie osiągniemy.

 

EDIT.

Sprawdź czy nadpisuje w tabeli. Bo być może nadpisuje ale wcześniejsze zapytanie pobiera dane jeszcze sprzed update i nie widzisz zmian.

Konto z którego się łączysz z bazą ma uprawnienia edycji?

1 i 2. tak rozumiem

  1. i tu właśnie jest ból że się nie pojawiają.

4 Tak jest poprawne i działa

 

Sprawdziłem w tabeli bez zmian

 

 

Tak konto ma uprawnienia do edycji

Moja wersja: 

if($_GET['edytuj']>'0'){
$ide=$_GET['edytuj'];
	$wynik = mysql_query("SELECT * FROM `wpisy` WHERE
    `id_wpis`='$ide'")
    or die('Błąd zapytania'); 
	if(mysql_num_rows($wynik) > 0) { 
	$r = mysql_fetch_assoc($wynik);
	echo'<center><form method="post">
	Data imprezy:<br />
	<input type="data" value="'.$r['data'].'" name="data" /><br />
	Godzina rozpoczęcia imprezy:<br />
	<input type="time" value="'.$r['godzina'].'" name="godzina" /><br />
	Nazwa imprezy:<br />
	<input type="text" value="'.$r['tytul'].'" name="tytul" /><br />
	Miejsce i opis(max 250 znaków):<br />
	<input type="textarea" value="'.$r['tekst'].'" maxlength="250" name="opis" /><br />
	<input type="submit" value="Zmień" name="edit" />
	</form></center>';
        if (!empty($_POST['edit'])) edit();
        }
} 

funkcja: (na początku pliku, kod w php)

<?php
function edit()
{
$data2 = $_POST['data'];
$godzina2 = $_POST['godzina'];
$tytul2 = $_POST['tytul'];
$opis2 = $_POST['opis'];
$login2=$_SESSION["user"];
mysql_query("UPDATE `wpisy` SET `data`='$data2', `user_wpis`='$login2', `godzina`='$godzina2', `tytul`='$tytul2', `tekst`='$opis2' WHERE `id_wpis`='$ide'");
echo 'Dane zostały zaktualizowane';	
}
?>

Kodu nie testowałem.

Miałem chwilę i przetestowałem twój kod. 

Problem jest tu:

if($_POST['submit'] == 'edit')

a dokładnie tu: 

$_POST['submit']

nie ma pola submit w tablicy post. Masz button typu submit o nazwie edytuj i wartości Zmień. Więc jak kolega wyżej już odpowiedział  z fragmentem:

if (!empty($_POST['edit']))

twój kod będzie działał, ale możesz tego nie zauważyć bo jak już wcześniej wspominałem najpierw czytasz dane potem zmieniasz., Więc musisz odwrócić kolejność.

Działa, zmieniłem kolejności i tego “if’a” :) 

Dziękuje za pomoc.