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

Relacje Tabel, wypisywanie błędów, mix HTML PHP

Object Storage Arubacloud
0 głosów
416 wizyt
pytanie zadane 1 lipca 2017 w SQL, bazy danych przez kevin Mądrala (5,010 p.)

Witam!

         Mam pytanie odnośnie unikatowych kluczy (UNIQUE), w jaki sposób raportować najlepiej błędy i czymś co nie jest mi znane... Dla własnej nauki staram się w miarę starannie napisać mały projekt tak aby miał "ręce i nogi".

 

Obsługa relacje tabel:

         Jeżeli mam 3 tabele Osoba, Dom, Sprzet i pomiędzy tymi tabelami zachodzi relacja typu Każdy Dom jest przypisany do jednej osoby a osoba może mieć kilka domów, w każdym domu znajduje się jakiś sprzęt więc w tej tabeli jest zawarte jaki. To Kluczem identyfikującym czyj jest Dom jest id (auto increment) rekordu w tabeli Osoba, a dla którego rekordu w tabeli Dom jest rekord w tabeli Sprzęt jest id (auto increment) tabeli Dom:

Osoba
---------
id ( auto increment )
imie
nazwisko

Dom
---------
id ( auto increment )
id_osoba ( id z rekordu tabeli Osoba )
ulica

Sprzet
---------
id ( auto increment )
id_dom ( id z rekordu tabeli Dom)
nazwa

Żeby takie coś działało to nie muszę wpisywać typu zmiennej w bazie UNIQUE ale do tego chyba to jest ? Sprawa druga to czy nie MUSI być w tabeli Sprzet id Osoby ? Czy taka relacja wystarczy ?

Podobno jednym zapytaniem można pobrać do tablicy asocjacyjnej wszystkie rekordy z tabli Dom i Sprzet dla danej Osoby tzn.:

$tablica[ "dom" ].ulica

$tablica[ "dom" ].nazwa ( nazwa sprzetu )

$tablica[ "dom2" ].ulica

$tablica[ "dom2" ].nazwa ( nazwa sprzetu )

 

Obsługa błędów:

         Proste pytanie, jak raportujecie błędy ? Chcę połączyć się z bazą w celu pobrania nazwy użytkownika i nagle wyskakuje błąd połączenia z bazą, więc powracam do poprzedniej strony ustawiając $_SESSION[e_db] = 1; i na poprzedniej stronie sprawdzam mieszając HTML z php czy taka zmienna istnieje i odczytuje błąd i usuwam zmienną. Ale co w przypadku gdy wystąpi inny błąd np. nie ma takiego użytkownika w bazie to już nie jest błąd bazy więc $_SESSION[e_bad_user] = 1 i analogicznie... ale takich zmiennych w sesji można mieć multum przez to więc jak sobie z tym poradzić ? Mieć tablice z koda mi błędów ? np. 1 = błąd bazy, 2 = nie ma użytkownika itp ?

 

Mieszanie HTML z PHP

        Czy mieszanie poprzez jest używane czy należy tego unikać podobno EOF to nie jeden ze "znaczników". Jest to wygodniejsze ale czy dobre ?

<php

    $v = "simple for my test";

    $html_code = <<<EOF
<div class="box">$nazwa</div>
    EOF;

    echo $html_code;

?>

 

1 odpowiedź

0 głosów
odpowiedź 1 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
1. Nie musisz używać Unique. A na co chciałbyś je nałożyć ? Na kolumne id_osoba w tabeli dom ? Wtedy jedna osoba mogła by mieć tylko jeden dom.

2. Nie powinno być id osoby w tabeli sprzet, jeżeli ten sprzęt jest przypisany do domu. Jeżeli jest przypisany do osoby i domu na wyłączność, to tak.

3.  "Podobno jednym zapytaniem można pobrać do tablicy asocjacyjnej wszystkie rekordy z tabli Dom i Sprzet dla danej Osoby"

Gdyby zawierały ten sam identyfikator, np osoba_id, to tak.

Ale nie zawierają, dlatego należy wykonać jeszcze jedno zapytanie wyciągając id z tabeli Dom

4. Błedy sprawdzaj wykorzystując instrukcje warunkową if. I gdy coś nie udało się zrobić, bądź nie istnieje taka zmienna  wypisz błąd, lub ustaw zmienne do których informacje o tych błędach będą trafiać i je pokazuj w stosownym dla Ciebie miejscu.
komentarz 2 lipca 2017 przez kevin Mądrala (5,010 p.)

1. Nie musisz używać Unique. A na co chciałbyś je nałożyć ? Na kolumne id_osoba w tabeli dom ? Wtedy jedna osoba mogła by mieć tylko jeden dom.

To zaraz... Z użyciem Unique jedna osoba może mieć tylko JEDEN Dom ? ( Przypadek: id_osoba w tabeli Dom jako Unique )

2. Nie powinno być id osoby w tabeli sprzet, jeżeli ten sprzęt jest przypisany do domu. Jeżeli jest przypisany do osoby i domu na wyłączność, to tak.

Sprzęt jest przypisany do Domu a Osoba może mieć kilka Domów. Sprzęt dla danej osoby pobieram następująco: Zapytanie pobierające wszystkie domu dla osoby i następne zapytanie pobierające sprzęt w tych wszystkich domach. Sprzęt w różnych domach może się powtarzać ale ale w jednym domu może być tylko jeden egzemplarz danego sprzętu.

4. Błedy sprawdzaj wykorzystując instrukcje warunkową if. I gdy coś nie udało się zrobić, bądź nie istnieje taka zmienna  wypisz błąd, lub ustaw zmienne do których informacje o tych błędach będą trafiać i je pokazuj w stosownym dla Ciebie miejscu.

$_SESSION['e_db'] = 1  // Błąd połączenia z bazą
$_SESSION['e_db'] = 2 // Błąd zapytania

$_SESSION['e_user'] = 1 // Nie znaleziono użytkownika
$_SESSION['e_user'] = 2 // Inny błąd

O to chodzi ?

 

PDO ?

Jeżeli dopiero jestem na etapie podstawowej nauki to warto zając się od razu PDO ?

komentarz 2 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)

Tak, używając unique masz pewność, że w tej tabeli nie będzie drugiego takiego wpisu, iż wartość w tej kolumnie  się powtórzy. 

https://www.w3schools.com/sql/sql_unique.asp

Nie, nie o to chodzi z tymi błędami.

Użyj try i catch  w którym wypiszesz błędy związane z połączeniem 

http://kursphp.com/rozdzial-6/wyjatki/

Co do innych błędów np. jak uzytkownik nie istieje, to ustaw zmienną 

$_SESSION['err_passwd'] = 'Haslo musi zawierać minium 8 znaków';

Tak, używaj PDO. Im prędzej, tym lepiej. Jak trochę się pobawisz wykorzystując mysqli i przejdziesz na PDO to zobaczysz czemu ono jest tak dobre. 

komentarz 4 lipca 2017 przez kevin Mądrala (5,010 p.)
edycja 4 lipca 2017 przez kevin

Tak, używając unique masz pewność, że w tej tabeli nie będzie drugiego takiego wpisu, iż wartość w tej kolumnie  się powtórzy.

Czyli jednym zdaniem, po ustawieniu tej zmiennej w tabeli na kolumnie X nigdy wartość się nie powtórzy. Jeżeli wpiszę w którymś rekordzie 1 to już nie mogę w żadnym innym rekordzie wpisać tej wartości czyli 1. Ale jak zareaguje baza na próbę wpisania tej wartości ? Jak mnie poinformuje że nastąpiła próba wpisania wartości która już istnieje w tej kolumnie ?

Nie, nie o to chodzi z tymi błędami.

Użyj try i catch  w którym wypiszesz błędy związane z połączeniem 

Chodziło mi tutaj o poinformowaniu o tym użytkownika. Wystąpił błąd bazy to w kodzie PHP sprawdzam to wyjątkami zapisuje w $_SESSION i w generując kod html sprawdzam czy ta zmienna istnieje i wypisuje komunikat.

Skrypty do łączenia z bazą mam w osobnym pliku. Jest plik z formularzem do logowania i w nim jest przekierowanie do pliku zaloguj.php i w tym pliku jest kod odpowiadający za łączenie się z bazą, sprawdzania błędów i w przypadku błędu następuje powrót do strony logowania za pomocą header(), exit() oraz ustawienie $_SESSION['error_x']. Strona logowania wczytuje się na nowo, następuje mix php z html aby sprawdzić czy zmienna $_SESSION z błędem została ustawiona i wypisać błąd.

 

Edycja Posta

Po zalogowaniu użytkownika bez problemu mogę w $_SESSION['logindata_userID'] przechowywać id użytkownika w bazie ( wartość Auto Increment ) ? Czy to jest niebezpieczne i nie powinno tak się robić ? To jest potrzebne do wykonywania zapytań poprzez AJAX żeby za każdym razem nie pobierać tej wartości.

komentarz 5 lipca 2017 przez Bosswell Nałogowiec (36,470 p.)
Jest to nawet porządane względem optymalizacji. Po co cały czas wykonywac to samo zapytanie oczekując tego samego wyniku ? Lepiej go zapisać w sesji.

Podobne pytania

0 głosów
0 odpowiedzi 121 wizyt
0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 26 stycznia 2022 w PHP przez EmilB Użytkownik (980 p.)
0 głosów
2 odpowiedzi 2,201 wizyt
pytanie zadane 13 lutego 2017 w SQL, bazy danych przez Siwobrody Nowicjusz (180 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

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

...