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

System wyświetlania i modyfikacji danych - PHP,SQL

Object Storage Arubacloud
0 głosów
345 wizyt
pytanie zadane 6 stycznia 2021 w PHP przez dequk Użytkownik (810 p.)

Witam, tworzę panel wyświetlania danych (SELECT) oraz ich modyfikacji (wpisywanie danych z formularza(input) i zastąpienie poleceniem UPDATE.

Obecne moje wysiłki wygląda w taki sposób:

Kod źródłowy: https://pastebin.com/hiNauQHv

Widok strony:


Idea działania strony polega na wpisaniu w pole ID klienta, następnie skrypt ma wyszukiwać użytkownika i podawać jego dane, czyli id klienta, imie, naziwsko itd

Po prawej stronie chciałbym wprowadzić opcje modyfikacji danych tego klienta, czyli nadal wartość, która została wpisana utrzymuje się i wtedy te dane tego wybranego klienta są przez nas modyfikowane. 
Jednak nie wiem jak rozwinąć obecny kod, aby taką funkcjonalność uzyskać. 

Na pierwszy problem jaki natknąłem się tworząc wyświetlanie to skrypt nie widzi super zmiennych POST, nie wiem co na to wpływa. Możliwe, że czegoś przeoczyłem. Następnym problemem jest podmiana tych danych. W jaki sposób mogę to uzyskać od strony PHP'a?

Kod PHP'a:

 

<?php

			require('db_data.php');

			$id_klient = $_POST['id_klient'];
			$login = $_POST['login'];
			$imie = $_POST['imie'];
			$nazwisko = $_POST['nazwisko'];
			$numer_telefonu = $_POST['numer_telefonu'];
			$email = $_POST['email'];


		   $zapytanie_obecne_dane_klient =
			"SELECT klient.id_klient,klient.login, klient.imie, klient.nazwisko, klient.numer_telefonu, klient.email from dane_klient AS klient
			where id_klient = '".$id_klient."'";
			
		   $zapytanie_update_dane_klient = 
			"UPDATE dane_klient SET login='', imie='',klient='', klient='', klient='' where id_klient= '".$id_klient."'";

			$wynik = $connect->query($zapytanie_obecne_dane_klient);

			if($wynik->num_rows > 0) {
				while ($row = $wynik->fetch_assoc()) {
		echo '<h4>Obecne dane klienta:</h4><br>';
		echo "<h6>ID klienta:".$row["id_klient"]."</h6>
				Login:".$row["login"]."
				<br>
				Imie:".$row["imie"]."
				<br>
				Nazwisko:".$row["nazwisko"]."
				<br>
				Numer telefonu:".$row["numer_telefonu"]."
				<br>
				E-mail:".$row["email"]."
				<br>";
				}
			}
			?>

Bardzo proszę o pomoc

1 odpowiedź

+2 głosów
odpowiedź 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
wybrane 6 stycznia 2021 przez dequk
 
Najlepsza

Po kolei. Najpierw ogarnij wyszukiwanie klienta i prezentację jego danych w panelu lewym dolnym ( <div class="obecne-dane-klient border border-dark rounded m-4 p-3"> ). W tej chwili cały panel jest usiany komunikatami o nieistniejących  zmiennych. Całkiem słusznie, ponieważ nie wysławszy formularza odwołujesz się do nich. Przerób blok PHP na stronie na następujący (skopiuj poprzedni, bo część się przyda).

<?php
    if(isset($_POST["id_klient_szukaj"])) {
        $id_klient = $_POST["id_klient_szukaj"];
        
        require('db_data.php');
        
        $zapytanie_obecne_dane_klient =
            "SELECT klient.id_klient,klient.login, klient.imie, klient.nazwisko, klient.numer_telefonu, klient.email
            from dane_klient AS klient
            where id_klient = '".$id_klient."'";
            
            $wynik = $connect->query($zapytanie_obecne_dane_klient);
            
            if($wynik->num_rows > 0) {
                while ($row = $wynik->fetch_assoc()) {
                $login = $row["login"];
                $imie = $row['imie'];
                $nazwisko = $row['nazwisko'];
                $numer_telefonu = $row['numer_telefonu'];
                $email = $row['email'];
        echo '<h4>Obecne dane klienta:</h4><br>';
        echo "<h6>ID klienta:".$id_klient."</h6>
                Login:".$login."
                <br>
                Imie:".$imie."
                <br>
                Nazwisko:".$nazwisko."
                <br>
                Numer telefonu:".$numer_telefonu."
                <br>
                E-mail:".$email."
                <br>";
                }
            }
            else echo "<h6>Brak klienta o podanym ID</h6>";
    }
?>                       		

Funkcja isset sprawdza, czy dana zmienna istnieje (u ciebie, czy wysłałeś formularz) i zabezpieczy cię przed wyświetlonymi błędami. Zmienne, które tworzysz w pętli while przydadzą ci się w dalszej części. Popraw kod, przetestuj i daj znać, czy działa. Potem część dalsza.

1
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Dodam jeszcze, że lepszą opcją byłby wybór klienta z listy i dopiero potem wyświetlenie jego danych. To prosty kawałek kodu PHP, a zabezpiecza przed podaniem nieistniejących danych. Pamietasz, jak uzupełniałeś pola listy wyboru (select)?
komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)
Dziękuje, działa. Chciałbym jeszcze zapytać co do modyfikacji danych jak to może mniej więcej się prezentować?

Czy mam w jakiś sposób rozdzielić te zmienne czy nie ma takie potrzeby? Gdyż będzie np zmienna imie pobierana z bazy, ale także nowe imie, które mogę w jakiś sposób zmodyfikować?
1
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

No to teraz przejdź do drugiej części - formularz zmiany danych. Każde z pól przekształć tak (odpowiednio oczywiście):

<div class="form-group">
       <label>Login:</label>
       <br>
       <input type="text" name="login" value="<?php if(isset($login)) echo $login;?>">
    </div>	

Przyciskowi wysyłającemu TEN formularz nadaj jakiś name. Zaktualizuj kod na stronie pastebin (daj link) i przejdź do tworzenia skryptu aktualizacji danych. Zmiennych rozdzielać nie musisz.

I zamknij połączenie z bazą w poprzednim skrypcie.

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)
Dobrze, już się tym zajmuje. Tylko chciałem zapytać czy tam przypadkiem w:

<?php if(isset($login)) echo $login;?>">

zamiast login nie powinno być new_login? Czy po prostu potem na podstawie inputa o name new_login będzie to wstrzyknięte do zmiennej globalnej?
Wydaje mi się, że raczej tak, ale chciałbym zrozumieć i sie dopytać jeśli można
1
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Ten kod PHP powoduje wypełnienie value pola wartością pobraną wcześniej z bazy. Zobaczysz to na stronie jako wpis w polu. Name pola nie musi być new_login (wystarczy login), ale jak chcesz. Po wysłaniu formularza aktualizującego stare zmienne w tablicy $_POST zostaną zastąpione nowymi. skrypt aktualizacji tworzysz pod tym formularzem, jako drugi blok PHP. Pamiętaj o nadaniu name'a buttonowi (innego niż name buttona do wysyłania id).

Pokaż nowy kod strony.
komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)
Zmieniłem kod oraz zawartośc pliku na Pastebinie,

nowa zawartość: https://pastebin.com/hiNauQHv
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
edycja 6 stycznia 2021 przez SzkolnyAdmin
Wygląda OK. Czy działa dobrze?

Pod formularzem aktualizacji danych wstaw blok kodu PHP, w którym:

1. Odbierzesz dane z tego formularza (podobnie jak przy obsłudze pierwszego formularza, tylko przycisk nazywa się "klient_zmien_dane"). Dane z pól formularza zapisz do zmiennych. Sprawdzasz poprawność wypełnienia pól?

2. Jak dane z formularza są poprawne, wyślij zapytanie aktualizujące (połączenie z bazą już nawiązałeś w poprzednim skrypcie, nie musisz otwierać nowego).

3. Wypisz komunikat użytkownikowi.

4. Zamknij połączenie.
komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

Nie wiem czy robię to prawidłowo, po próbie zmiany danych w formularzu otrzymałem takie, a nie inne błędy. 

Jeśli chodzi o działanie poprzednie skryptu to jest w porządku. 

Kod: https://pastebin.com/nBvy6rZm

 

komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

Przy odbiorze zmiennych z formularza aktualizacji postąp tak (inne zmień analogicznie):

$login = $_POST["new_login"];

Po wysłaniu zapytania sprawdź, czy zostało ono wykonane: funkcja affected_rows - tu masz dokumentację https://www.php.net/manual/en/mysqli.affected-rows.php

Zaktualizuj kod i wrzuć linka.

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

Nadal niestety występują błędy i nie wiem kompletnie co je powoduje.

Link: https://pastebin.com/nBvy6rZm

komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

Nadal nie poprawiłeś tego, o czym ci pisałem, czyli linie 140-144. Zamiast:

$login = $row['new_login'];

dajesz

$login = $_POST['new_login'];

Ponadto najpierw wysyłasz zapytanie

$wynik_update = $connect->query("$zapytanie_update_dane_klient");

a potem sprawdzasz liczbę zmienionych wierszy

if($connect->affected_rows == 1) {
    // Tu komunikat o pomyślnej aktualizacji danych,
}
else {
    // a tu o niepowodzeniu.
}

Zmień i podrzuć kod.

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

Zmieniłem, niestety dalej występuje problem i występują błedy.

Link: https://pastebin.com/nBvy6rZm

 

komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

$_POST, nie $POST.

W linii 150 nie dawaj cudzysłowów w nawiasie).

$wynik_update = $connect->query($zapytanie_update_dane_klient);

Zmęczony już jesteś? Jeśli tak, odłóż prace do jutra.

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

Nie zauważyłem, dziękuje za pomoc. Jednak jeszcze pojawia się bład związany z zmienna id_klient oraz connect. właśnie plik nie posiada połączenia z bazą ani zmiennej id_klient w super zmiennych 

komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Daj kod po zmianach.
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

@Konrad Siwczyk,
 I jeszcze zmodyfikuj zapytanie (nazwy pól bez new_)

 $zapytanie_update_dane_klient = 
                        "UPDATE dane_klient SET login='".$login."', imie='".$imie."', nazwisko='".$nazwisko."', numer_telefonu='".$numer_telefonu."', email='".$email."' where id_klient= '".$id_klient."'";

 

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

@SzkolnyAdmin,

kod po zmianach: https://pastebin.com/nBvy6rZm

Zapytanie już poprawiam.

komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

W $zapytanie_update_dane_klient nazwy pól bez new_.

Po kolei.

1. Po wpisaniu identyfikatora klienta i wysłaniu formularza dane w bloku lewym dolnym wyświetlają się prawidłowo?

2. Pola w formularzu po prawej (aktualizującym) są uzupełniane prawidłowo?

3. Nie jest ci potrzebna zmienna $wynik_update, zamiast niej daj

$connect->query($zapytanie_update_dane_klient);

 

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)

Wybór działa prawidłowo, ładują się odpowiednie dane z bazy. Prawidłowo zostają także przekierowane do okna modyfikacji jednak po zmianie danych na inne pojawiają się następujące komunikaty:

Kod po modyfikacji: https://pastebin.com/nBvy6rZm

1
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)

Zrób tak. W pierwszym skrypcie po linii 97 (else echo "<h6>Brak klienta o podanym ID</h6>";), ale przed klamrą,  dodaj zamknięcie połączenia z bazą ($connect->close();)

W drugim formularzu dodaj ukryte pole z identyfikatorem:

<input type="hidden" name="id_klient" value="<?php if(isset($id_klient)) echo $id_klient;?>">

W drugim skrypcie dodatkowo odbierz identyfikator

 $id_klient = $_POST['id_klient'];

W if-ie załaduj znowu połączenie z bazą

require('db_data.php');

 

komentarz 6 stycznia 2021 przez dequk Użytkownik (810 p.)
Teraz działa, dziękuje bardzo za pomoc!

Czy za każdym razem mogę w taki sposób sobie pomagać ukrytym polem, gdy chce z jednego formularza przeskakuje na drugi, a w nim nie jest wykorzystywana taka zmienna?
1
komentarz 6 stycznia 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
Powiem ci tak, u mnie działa (oczywiście na innych danych z mojej bazy), gdzieś po drodze od pierwszego do drugiego bloku PHP "zginęła" zmienna id_klient i połączenie z bazą. Nie mam pomysłu. Przekazywanie zmiennych przez pole ukryte to częsta praktyka przy wysyłaniu formularzy, możesz tak robić.

Podobne pytania

0 głosów
2 odpowiedzi 516 wizyt
0 głosów
1 odpowiedź 1,361 wizyt
0 głosów
1 odpowiedź 283 wizyt
pytanie zadane 18 listopada 2018 w PHP przez marek90552 Początkujący (430 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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!

...