• 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
249 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 (212,630 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 (212,630 p.)
Ale to Twój kod i Ty masz wiedzieć dlaczego tak się dzieje.

Podobne pytania

0 głosów
1 odpowiedź 354 wizyt
0 głosów
1 odpowiedź 1,790 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...