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

PHP Wyświetlanie więcej niż jeden wynik zapytania

Mały hosting, OGROMNE możliwości
0 głosów
805 wizyt
pytanie zadane 1 czerwca 2020 w PHP przez koterka Nowicjusz (210 p.)

Hej, napisałam krótki kod PHP, który ma mi zwracać z bazy danych informacje o firmie - wpisuję nazwę, wysyłam POST i wyświetla mi informacje jakie dane na jej temat znajdują się w bazie. Nie wiem jak rozwiązać kwestię wyświetlania danych, jeżeli są dwie i więcej firm o tej samej nazwie. 
Wrzucam fragment kodu, który zwraca mi prawidłowo jeden rezultat

<?php

require_once 'config/obsluga_sesji.php';
include_once 'config/menu.php';
require_once 'config/settings.php';

$AKTYWNY = "index.php";

$TRESC = "";
$WYNIKNAZWA ="";  

if(isset($_POST['nazwa']))
    {
    //połaczenie z bazą danych
    $db_conn = new PDO("$DBEngine:host=$DBServer;dbname=$DBName;port=$DBPort", $DBUser, $DBPass);
    $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM zgody2020 WHERE nazwa = :nazwa";
    $stmt = $db_conn->prepare($sql);

    $stmt->bindValue(':nazwa', $_POST['nazwa']);
    $result = $stmt -> execute();
 

if ($stmt->rowCount()==0)
    {
    $WYNIKNAZWA = "Brak zgody na kontakt"; 
    $TRESC = array(); //zmienna łańcuchowa zmieniana na zmienną tablicową
    $TRESC[0] = "szablony/logowanie.php";
    }
else
    {
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($row['nazwa']==$_POST['nazwa']);
    $WYNIKNAZWA = $row['nazwa']." Nip: ".$row['NIP']." Zgoda: ".$row['zgoda']." Mail: ".$row['mail'];
    $TRESC = array(); //zmienna łańcuchowa zmieniana na zmienną tablicową
    $TRESC[0] = "szablony/logowanie.php";}  
}

Próbowałam stosować fetchALL i foreach, do print_r zwracają mi dwa rezultaty, ale nie wiem jak uzyskać ten efekt w zmiennej $WYNIKNAZWA. Nie znalazłam przypadku podobnego w internetach.

Kod HTML: 
 

<div">
	<h3>Szukaj po nazwie firmy:</h3>
	<p>wpisz NAZWĘ dokładnie taką, jaka znajduję się w ....</p>
	<form action="index.php" method="post">
		<input type='text' name="nazwa" title="Nazwa" placeholder="nazwa"> 
		<input type="submit" name="szukaj" value="Szukaj po Nazwie"> 
	</form>
	<h3><b><?=$WYNIKNAZWA?></b></h3>
</div>

Bardzo proszę o pomoc, bo jestem świeżakiem i liczę na Waszą wielką pomoc. 

Fragment z bazy danych:

Baza danych: `baza23215_mailing`

CREATE TABLE `zgody2020` (
  `lp` int(11) NOT NULL,
  `nazwa` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  `NIP` varchar(12) COLLATE utf8_polish_ci NOT NULL,
  `zgoda` date NOT NULL,
  `mail` varchar(40) COLLATE utf8_polish_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

INSERT INTO `zgody2020` (`lp`, `nazwa`, `NIP`, `zgoda`, `mail`) VALUES
(1, 'Alko', '9080434569', '2020-05-21', ''),
(2, 'FirmaTest', '9080704567', '2020-05-21', 'kolok@fikcja.pl'),
(3, 'FirmaTest', '9080704647', '2020-05-21', 'krol@test.pl'),
(4, 'FirmaFikcja', '9080706099', '2020-05-21', '');

 

komentarz 1 czerwca 2020 przez WiktroH Mądrala (6,550 p.)
Dodaj rekordom unikatowy nr ID
komentarz 1 czerwca 2020 przez koterka Nowicjusz (210 p.)
Jako unikatowy w bazie mam ustawiony NIP, a lp jako primary. Czy o to chodzi?
komentarz 1 czerwca 2020 przez WiktroH Mądrala (6,550 p.)
Tak, o to; sugeruję, żeby zamiast nazwą posługiwać się tym lp (z resztą słusznie ustawionym na primary, czyli podstawowy; klucz podstawowy)
komentarz 1 czerwca 2020 przez koterka Nowicjusz (210 p.)
Ok, ale dalej nie wiem jak to może mi pomóc w kwestii wyświetlania wyników.

Wysyłam zapytanie o nazwę - w bazie mam dwie 'FirmaTest', ale pokazuje mi w $WYNIKNAZWA tylko jedną. A potrzebuję wyświetlić obie. Print_r zwraca mi dwa wyniki, ale nie wiem jak rozwiązać kwestię wyświetlenia tego z użyciem $row i $rows. A może błąd następuje gdzieś wcześniej? Ale wydaje mi się, że tutaj, bo próbowałam wyświetlić całą zawartość tablicy, a i tak wyświetliło mi jeden rekord (z najwyższym numerem).

2 odpowiedzi

0 głosów
odpowiedź 1 czerwca 2020 przez WiktroH Mądrala (6,550 p.)
wybrane 1 czerwca 2020 przez koterka
 
Najlepsza

Zrób taką pentlę:

$ile = mysqli_num_rows($rezultat);

	for ($i = 1; $i <= $ile; $i++) 
	{
		
		$row = mysqli_fetch_assoc($rezultat);
		$zmienna1 = $row['zm1'];
		$zmienna2 = $row['zm2'];		
			
	}

mysli_num_rows pokazuje, ile jest takich rekorków w bazie, które spełniają warunek kwerendy

komentarz 1 czerwca 2020 przez koterka Nowicjusz (210 p.)
W sumie rozwiązałam to inaczej, ale dzięki za podpowiedź z pętlą, bo zastosowałam tylko, że foreach.
+1 głos
odpowiedź 1 czerwca 2020 przez koterka Nowicjusz (210 p.)
W sumie udało mi się to rozwiązać. Niepotrzebnie chciałam przesyłać fetchAll(PDO::FETCH_ASSOC) i użyłam foreach oraz wyświetlania jako wypunktowania, zadziałało :)

Dzięki wszystkim za pomoc!

Podobne pytania

+1 głos
1 odpowiedź 566 wizyt
pytanie zadane 10 grudnia 2020 w PHP przez ariva6152 Użytkownik (570 p.)
0 głosów
2 odpowiedzi 496 wizyt
pytanie zadane 1 stycznia 2023 w PHP przez dee Początkujący (360 p.)
0 głosów
1 odpowiedź 946 wizyt
pytanie zadane 24 maja 2015 w PHP przez HaKIM Szeryf (87,590 p.)

93,715 zapytań

142,629 odpowiedzi

323,260 komentarzy

63,257 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...