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

question-closed Dublujące się rekordy przy wypluwaniu z DB

Object Storage Arubacloud
0 głosów
237 wizyt
pytanie zadane 23 listopada 2018 w PHP przez progNewbie Obywatel (1,130 p.)
zamknięte 23 listopada 2018 przez Arkadiusz Waluk

Hej Wam,

Mam listę userów oraz listę procedur. Jedna procedura może być przypisana do wielu userów.

Przy wypluwaniu procedur z bazy danych chcę aby wyszukiwał mi procedury po określonej frazie, wyrazie.

Przez to że szukana procedura przypisana jest do wielu userów, wyświetla się ona tyle razy ilu jest userów.

Chciałbym stworzyć obsługę tego tak aby procedura nawet jeśli przypisana jest do wielu użytkowników wyświetlana była tylko raz.

 

Na razie jedyny sensowny pomysł jaki przychodzi mi do głowy to:

Stworzyć tablicę,

Jeśli wyszuka procedurę z podaną frazą, wyrazem to dodaje ją do tablicy i tak ze wszystkimi procedurami jakie znajdzie,

W pętli for trwającej tyle ile tablica.length sprawdza czy tablica[name] != tablica[name + 1]

Jeśli inny to wyświetla ją na ekran i tak sprawdza wszystkie elementy tablicy.

 

Pytania do Was:

a) Moim okiem jest, ale czy Waszym również mój pomysł ma ręce i nogi?

b) Jest jakiś prostszy sposób na osiągnięcie tego co potrzebuje?

c) A może jest błąd logiczny w kodzie, który umieszczam poniżej.

Bardzo proszę o pomoc. :)

<?php
	if(isset($_POST['submit'])){
		$connection = new mysqli('localhost', 'root', '', 'projekt_cmp');
		
		$check_name = $_POST['name_procedure'];
		$sql_name = "SELECT * FROM connections, procedures 
		WHERE procedures.nameProcedure LIKE '%$check_name%' 
		AND connections.idProcedure = procedures.idProcedure";
		
		$result_name = $connection->query($sql_name);
			while($row_name = $result_name->fetch_assoc()){
				$name_procedure = $row_name['nameProcedure'];
				$desc_procedure = $row_name['descProcedure'];
				$type_procedure = $row_name['typeProcedure'];
				$file_procedure = $row_name['fileProcedure'];
				
				echo "Name of procedure: <b>" . $name_procedure . "</b><br>";
				echo "Description of procedure: " . $desc_procedure . "<br>";
				echo "Type of procedure: " . $type_procedure . "<br>";
				echo "<a href=uploads/" . $file_procedure . ">Podejrzyj PDF</a><br>";
				echo "-----------------------------------------------<br>";
			}
		$result_name->free_result();
	}
?>
<!DOCTYPE html>
<html>
<body>
	<form method="post">
		<input type="text" name="name_procedure" /><br>
		<input type="submit" name="submit" />
	</form>
</body>
</html>

Zdjęcia z bazy danych:

Logika działania jest taka, że:

Przy dodawaniu nowej procedury, procedura z jej opisem trafia do tabeli procedures,

później łapane jest jej ID oraz ID usera dla którego dana procedura ma zostać przypisana i tworzone jest nowe połączenie w tabeli connections. Czynność jest powtarzana tyle razy ile było wybranych userów w formularzu.

komentarz zamknięcia: "problem został już rozwiązany"
komentarz 23 listopada 2018 przez Chess Szeryf (76,710 p.)

Napisz może z jakich danych jakie dane mają powstać, ponieważ teraz nie za bardzo wiadomo o co chodzi. Wyjaśnij łopatologicznie.

Pokaż wszystkie tabele, których używasz w tym projekcie. Użyj do tego polecenia:

SHOW CREATE TABLE `my_table`;
komentarz 23 listopada 2018 przez progNewbie Obywatel (1,130 p.)
Hej, dzięki za zainteresowanie.

Sam problem został już rozwiązany, komentarz poniżej.

Tabele z których korzystam są wklejone w formie zdjęć. Nie ma ich więcej. Oraz Logika jak dane są aktualizowane w tych tabelach zostały opisane na samym dole mojego posta.

Logika też jest opisana w sposób bardzo prosty.

Nie bardzo wiem co mógłbym jeszcze dodać. :)

1 odpowiedź

0 głosów
odpowiedź 23 listopada 2018 przez progNewbie Obywatel (1,130 p.)
Przeczytałem to i od razu mózg mi się odblokował...

Powinienem w zapytaniu SQL odwołać się tylko do tabeli procedures i tylko tam sprawdzić czy występują procedury o zadanym wyrazie bądź frazie.

Mimo wszystko zostawiam, bo może ktoś będzie mieć jakieś cenne uwagi.
komentarz 23 listopada 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Przez cenne uwagi rozumiesz ogólne na temat kodu? Jeśli tak to trochę można by powiedzieć, najgorszy problem jaki widzę to brak zabezpieczenia przed sql injection.
komentarz 23 listopada 2018 przez progNewbie Obywatel (1,130 p.)
Jasne, na ten moment nie ma tam tego, ponieważ to jest plik gdzie piszę kod, który testuje, a dopiero jeśli widzę że działa to przenoszę go do projektu gdzie już mam zabezpieczenie przed SQL Injection.

Jeśli nie rozumiem uwag, to zawsze zapisuję sobie hasłami aby mieć o czym poczytać.

Każdą informację traktuję jako potencjalne fajne źródło do dalszego rozwoju.
komentarz 23 listopada 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Dość dziwne podejście, niezbyt rozumiem, ale ok. Co do uwag to można różne rzeczy wymienić. Masz dziwne nazewnictwo, czasem po polsku, czasem po angielsku - zarówno w bazie jak i w kodzie. HTML jest mieszany z PHP (widok z logiką). PSR-2 jest standardem wyglądu kodu, którego wg mnie warto przestrzegać (jest bardzo powszechny w PHP) - obecnie tego nie robisz. Ten kod HTML też jest dość okrojony, a sam formularz nie ma chociażby labeli. Ale może to też tylko coś do testów, nie wiem, tak przy okazji mówię :)
komentarz 23 listopada 2018 przez progNewbie Obywatel (1,130 p.)

Wszystkie zmienne w kodzie są po angielsku. Jedyna różnica między EN/PL jaką teraz zauważyłem to napis "Podejrzyj PDF", chyba nie jest to jakieś mega istotne? :)))) a co do DB faktycznie, w ogóle nie zwracałem na to uwagi.

Tak jest to skrócona wersja HTML'a, poniżej wrzucam pełną (uprzedzam, jest pewnie jeszcze gorsza niż ta skrócona, bardzo nieumiejętnie tworze divy jak i w ogóle rozkład elementów na stronie.)

Zacznę stosować label'e oraz z chęcią poczytam o PSR-2.

<body>
	<input type="checkbox" id="expand_list_select1"/>
	<input type="checkbox" id="expand_list_select2"/>
	<form method="post">
		<div id="field_adding_informations">
			Nazwa procedury:<br>
			<input type="text" name="add_name_procedure" placeholder="Nazwa..." /><br><br>
			Opis procedury:<br>
			<textarea name="add_desc_procedure" placeholder="Opis procedury..."></textarea><br>
			Typ procedury:<br>
			<select name="add_type_procedure">
				<option value="medyczne">Medyczne</option>
				<option value="finansowe">Finansowe</option>
				<option value="obslugowe">Obsługowe</option>
			</select>
		</div>
		<div id="field_btn_choose_position">
			<button class="display_btn" type="button"><label for="expand_list_select1">Medyczne</label></button>
			<button class="display_btn" type="button"><label for="expand_list_select2">Obsługowe</label></button>
		</div>
		<div id="field_display_position">
			<select name="medyczne[]" multiple="multiple" class="sel1">
				<option value="lekarz">Lekarze</option>
				<option value="k_medyczny">Kierownik Medyczny</option>
				<option value="piel_koordy">Pielęgniarka Koordynująca</option>
				<option value="technik">Technicy</option>
				<option value="pielegniarka">Pielęgniarki</option>
			</select>
			<select name="obslugowe[]" multiple="multiple" class="sel2">
				<option value="recepcja">Recepcja</option>
				<option value="k_oddzialu">Kierownik Oddziału</option>
				<option value="k_administracyjny">Kierownik Administracyjny</option>
				<option value="koordy_recepcji">Koordynator Recepcji</option>
				<option value="crw">Koordynator CRW</option>
			</select>
		</div><br>
		<div id="submit">
			<br><br>
			<input type="submit" name="add_submit_procedure" value="Opublikuj"/>
		</div>
	</form>

 

komentarz 23 listopada 2018 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie, wiadomo że elementy interfejsu mogą być po polsku, choć często realizuje się to jakimś modułem/biblioteką do translacji, dzięki czemu można łatwo dodawać kolejne języki.

Formularz nie jest zły, jednak też brakuje labeli, nazwy (name) dawałbym po angielsku, value to już zależy. Nie używałbym tyle <br> do robienia odstępów, a stylizował to przez CSS.
1
komentarz 23 listopada 2018 przez progNewbie Obywatel (1,130 p.)
Okej, dziękuję za porady. :)

Podobne pytania

0 głosów
2 odpowiedzi 183 wizyt
pytanie zadane 5 sierpnia 2015 w PHP przez Else Stary wyjadacz (12,260 p.)
0 głosów
1 odpowiedź 149 wizyt
pytanie zadane 9 października 2020 w PHP przez Dariusz Hozer Użytkownik (920 p.)
–3 głosów
1 odpowiedź 154 wizyt
pytanie zadane 15 października 2016 w PHP przez Krzysztof15 Nowicjusz (200 p.)

92,575 zapytań

141,424 odpowiedzi

319,650 komentarzy

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

...