• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP - aktualizacja rekordów w bazie - problem

VPS Starter Arubacloud
0 głosów
276 wizyt
pytanie zadane 7 marca 2019 w PHP przez niezalogowany
otagowane ponownie 8 marca 2019

Witam, mam stronę, na której po zalogowaniu można edytować dane w bazie.
Dodawać nowe rekordy, edytować istniejące i usuwać.

Mam następujący problem: Dodawanie i usuwanie działa bez problemu natomiast edycja już nie.
Pewnie jest to jakiś drobny błąd, ale siedzę nad tym bugiem już 2 dni i go nie wiedzę.

Może ktoś z Was "świeżym" okiem coś znajdzie.

function createForm($p_imie='', $p_miejscowosc='',$p_punkty='',$p_error='',$id='')	
	{
		echo '<div class="tabela col-md-6 col-lg-10">';
		if($id != '')
		{	
			echo "Edytuj ranking: ";
		} else {
			echo "Dadaj nową kolumnę";
		}
		if($p_error != '') {
			echo '<p class="error">'. $p_error ."</p>";
		} 
		

	echo '<form action="" method="post">';
		echo '<div class="form-group">';

		if($id != '')
		{
			echo '<br ><input type="hidden" name="id" value="'. $id . ' " >';
			echo "<p> Lp: " . $id . "</p>";
		}
		echo '<p><label> Imie: </label><br ><input class="form-group col-md-6" type="text" name="imie" value="' . $p_imie . ' " >' . "</p>";
		
		echo '<p><label> Miejscowość: </label><br ><input class="form-group col-md-6" type="text" name="miejscowosc" value="' . $p_miejscowosc . ' " >' . "</p>";
		echo '<p><label> Punkty: </label><br ><input class="form-group col-md-6" type="text" name="punkty" value="' . $p_punkty . ' " >' . "</p>";
		echo '<input class="btn btn-info" type="submit" name="submit" value=" Wyślij">';
	echo "</div>";
	echo "</form>";	
	}		
	if(isset($_GET['id']))
		{
			/* Tryb edycji */
			if(isset($_POST['submit'])) {
				
				if(is_numeric($_POST['id'])) {
					$id = $_POST['id'];
					
					$imie = htmlentities($_POST['imie'], ENT_QUOTES);
					$miejscowosc = htmlentities($_POST['miejscowosc'], ENT_QUOTES);
					$punkty = htmlentities($_POST['punkty'], ENT_QUOTES);
					
					if(($imie == '') || ($miejscowosc == '') || ($punkty == '')) {
					$p_error = 'Wypełnij wszystkie pola';
					createForm( $imie,  $miejscowosc, $punkty, $p_error);
				} else {
					if($stmt = $polaczenie->prepare("UPDATE zawodnik SET imie = ?,  miejscowosc = ?, punkty = ? WHERE id = ?")) {
						$stmt->bind_param("ssii",$imie, $miejscowosc, $punkty, $id);
						$stmt->execute();
						$stmt->close();
					} else {
						echo "Wystąpił błąd ! Nie udało się edytować danych w bazie.";
					}
					
					header("Location: index.php");
				}
				}
			} else {
				if(is_numeric($_GET['id']) && $_GET['id'] > 0) {
					$id = $_GET['id'];
					
					if($stmt = $polaczenie->prepare("SELECT * FROM zawodnik WHERE id = ? ")) {
						$stmt->bind_param("i",$id);
						$stmt->execute();
						$stmt->bind_result($id, $imie,  $miejscowosc, $punkty);
						$stmt->fetch();
						createForm($imie,$miejscowosc, $punkty, NULL, $id);
						$stmt->close();
					} else {
						echo "Wystąpił błąd ! Nie udało się edytować danych w bazie.";
					}
				} else {
					header("Location: index.php");
				}
			}
		} else
		{
			/*tryb nowego rekordu*/
			if(isset($_POST['submit']))
			{
				
				$imie = htmlentities($_POST['imie'], ENT_QUOTES);
				
				$miejscowosc = htmlentities($_POST['miejscowosc'], ENT_QUOTES);
				$punkty = htmlentities($_POST['punkty'], ENT_QUOTES);
				
				if(($imie == '') || ($miejscowosc == '') || ($punkty == ''))
				{
					$p_error = 'Wypełnij wszystkie pola';
					createForm($imie, $miejscowosc, $punkty, $p_error);
				} else 
				{
					if($stmt = $polaczenie->prepare("INSERT zawodnik ( imie, miejscowosc, punkty) VALUES (?,?,?)"))
					{
						$stmt->bind_param("ssi", $imie,  $miejscowosc, $punkty);
						$stmt->execute();
						$stmt->close();
					} else {
						echo "Błąd dodawania";
					}
					
					header("Location: index.php");
				}
				
			} else 
			{
				createForm();
			}
		}
	$polaczenie->close();

Ten kawałek kodu odpowiada za dodawanie nowych rekordów i edycje istniejących.
Będę wdzięczna za uwagi.

komentarz 9 marca 2019 przez Assasz Nałogowiec (30,460 p.)
Jako pierwsze to bym zrobił separację zagadnień, wtedy na pewno łatwiej by się to debugowało ;) Twoja funkcja createForm() nie tylko tworzy formularz (czyli wypluwa HTML), ale również waliduje dane, zapisuje je w bazie danych oraz wykonuje przekierowania - zatem otrzymujesz już 4 różne odpowiedzialności, z której każda mogłaby (powinna) zostać oddelegowana do innej warstwy. Dodatkowo zauważ, ze wywołujesz swoją funkcję również wewnątrz tej samej funkcji, a przy tak złożonej logice to jest proszenie się o kłopoty.

Ja będąc szczery nie mam najmniejszej ochoty analizować Twój kod w takiej postaci, jakiej jest teraz i podejrzewam, że innym także ;) Stąd taka moja rada.

1 odpowiedź

0 głosów
odpowiedź 8 marca 2019 przez niezalogowany
Dalej aktualne odświeżam, może ktoś wie, jak rozwiązać problem ?
komentarz 8 marca 2019 przez Ehlert Ekspert (213,900 p.)
Skorzystaj z funkcji die. Sprawdź w które miejsce wędruje wywołanie kiedy wysyłasz request o edycję rekordu. Na pewno nie wyświetla Ci się napisz NIE DZIAŁA, tylko coś się dzieje. Z pewnością da się to debugować.
komentarz 8 marca 2019 przez niezalogowany
Jest biała strona i nic nie ma.
komentarz 8 marca 2019 przez Ehlert Ekspert (213,900 p.)
Ale to Twój kod i Ty masz wiedzieć dlaczego tak się dzieje.

Podobne pytania

0 głosów
1 odpowiedź 436 wizyt
0 głosów
1 odpowiedź 2,104 wizyt

92,980 zapytań

141,943 odpowiedzi

321,189 komentarzy

62,307 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...