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

PHP - obsługa $_GET

Object Storage Arubacloud
0 głosów
538 wizyt
pytanie zadane 4 grudnia 2019 w PHP przez Damianek Obywatel (1,020 p.)

Witam, widziałem w paru kodach, że tablica $_GET połączona z instrukcją SWITCH może służyć do nawigacji strony. Napisałem kod, który powoduje, że po kliknięciu usuń przy rekordzie z bazy danych, rekord ulega usunięciu. Jednak muszę kliknąć na usuń, aż dwa razy. W innych kodach jakoś to działa, u mnie nie. Czy coś jest nie tak :)?

try {

if (!file_exists("database.php")){	

throw new PDOException("Plik dostępu do bazy danych nie został poprawnie załadowany.");
exit();

} else {
	
require_once  "database.php";
require_once "utils.php";

$queryList = $db->prepare('SELECT idadmin, login, email, permissions  FROM administracja');
$queryList->execute();

$resultList = $queryList->fetchAll();

if (isset($_GET['v'])) {

switch($_GET['v']) {
	
	case 'usun': 
	
	$queryDel = $db->prepare('DELETE FROM administracja WHERE idadmin=:idadmin');
	$queryDel->bindValue(':idadmin', $_GET['id'], PDO::PARAM_STR);
	$queryDel->execute();
	break;
	
	case 'zmien': echo "zmien";
	break;
	
	default:  echo"default";
	break;
	
}

}

if ($queryList) {
	
?>

<html>
	<head>
		<meta charset="UTF-8">
		<title> Panel zarządzania kontami użytkowników. </title>
	</head>
	<body>
		<div id="container">

	
	<table border= "1px" width="600px"> 
			
			<tr>
			<th> Lp. </th>
			<th> Login </th>
			<th> Uprawnienia </th>
			<th> Usuń </th>
			<th> Zmień </th>
			</tr>
			
<?php	
	
	$i = 1;
	foreach ($resultList as $val):
	
?>			
			
			<tr>
			
			
			<td> <?= $i; ?> </td>
			<td> <?= $val ['login']; ?> </td>
			<td> <?= $val ['permissions']; ?> </td>
			<td> <a href="start.php?v=usun&id=<?= $val ['idadmin']; ?>"> Usuń </a></td>
			<td> <a href="start.php?v=zmien&id=<?= $val ['idadmin']; ?>"> Zmień </a></td>
			
			</tr>

<?php	$i++; endforeach; 
?>
			
		</table>
		
		
		</div>
	</body>
</html>

<?php		

	
} else {
	
	throw new PDOException('Błędne zapytanie do bazy danych.');
	
}


}

} catch (PDOException $e){
	
echo $e;
	
}

 

2 odpowiedzi

+1 głos
odpowiedź 5 grudnia 2019 przez damenox Obywatel (1,400 p.)

Najpierw pobierasz rekordy, a później ewentualnie jeżeli zajdzie odpowiedni warunek usuwasz pojedynczy rekord, następnie są listowane wszystkie rekordy pobrane i zapisane do zmiennej $resultList, więc ten usunięty także będzie się tam znajdował. Dopiero po ponownym pobraniu rekordów (odświeżeniu strony) usunięty wcześniej rekord zniknie i nie pojawi się na liście

+1 głos
odpowiedź 5 grudnia 2019 przez Ehlert Ekspert (212,670 p.)

Kilka rzeczy jest nie ok:

  • file exist jest niepotrzebny. Masz require więc jeśli pliku nie będzie to wszystko się wywali. 
  • Rzucany pierwszy wyjątek jest na pewno złego typu. Na na tym poziomie nie ma mowy o istnieniu PDO więc nie ma sensu rzucać wyjątku który jest z nim związany.
  • Proponuję rozdzielić plik z logiką od pliku z widokiem. 
  • Zmienne w GET to słaby pomysł na routing. Lepiej rozpatrywać wartości z Request uri. Tam warto użyć reg expow, ale w sumie nie będzie takiej potrzeby jeśli użyjesz gotowego routera. Np takiego.
  • Kod jest nieczytelny. Poczytaj o czymś takim jak return early.

Podobne pytania

0 głosów
1 odpowiedź 140 wizyt
0 głosów
1 odpowiedź 92 wizyt
pytanie zadane 12 stycznia 2019 w PHP przez kingkushlee Gaduła (3,960 p.)
0 głosów
2 odpowiedzi 156 wizyt
pytanie zadane 29 kwietnia 2017 w PHP przez sapero Gaduła (4,100 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...