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

question-closed Kilka zapytań jednocześnie? Istnieje lżejsza dla oka alternatywa? Zadanie z arkusza EE.09-01-19.06.

Object Storage Arubacloud
+1 głos
522 wizyt
pytanie zadane 22 listopada 2020 w SQL, bazy danych przez Nabuchadonozor Gaduła (3,120 p.)
zamknięte 23 listopada 2020 przez Nabuchadonozor

Witam z uśmiechem każdego forumowicza,

otóż ślęczę nad kodem już dosyć długo, osobiście nie wzdycham na widok PHP i MySQL, aczkolwiek mam zadanie do wykonania (szkoła).

Napotkałem się z pewnym problemem -> muszę odczytać w liście nieuporządkowanej (<ul>) kilka wartości z bazy danych. Problem polega na tym, że nie wiem jak się za to zabrać prosto, nie jest to ciężkie pewnie dla większości Was, ale u mnie zawitał brak pomysłu. Baza danych składa się z kolumn "id", "nazwa", "występowanie". ID jest aż 8. Główne pytanie, jak to zrobić bez wysyłania milionów zapytań, bądź jak to zrobić, ale w miarę prosto. Jedno <li> w liście to jedno ID w nim wypełnione tymi kolumnami.

Kod:

<!DOCTYPE html>

<html>

<head lang="pl">
    <title>Wędkujemy</title>

    <link rel="stylesheet" href="styl_1.css">
    <meta charset="utf-8">
</head>

<body>
    <div id="container">
        <div id="topbar">
            <h1>Portal dla wędkarzy</h1>
        </div>
        <div id="content">
            <div id="lContent">
                <h2>Ryby drapieżne naszych wód</h2>
			<?php
				require_once "dbconnect.php"; 
				
				$mysqli = @new mysqli($host, $user, $password, $database);
				if ($mysqli->connect_errno!=0)
				{
					echo "Failed to connect to MySQL: ".mysqli_connect_error();
				}
				else{
				
				$query = "SELECT * FROM ryby";
				
				if($result = $mysqli->query($query)){
					$num_rows = $result->num_rows;
					if($num_rows>0){
						$rows = $result->fetch_assoc();
						echo "<ul>";
							echo "<li>".$rows['nazwa'].", występowanie: ".$rows['wystepowanie']."</li>";
							echo "<li>".$rows['nazwa'].", występowanie: ".$rows['wystepowanie']."</li>";
							echo "<li>".$rows['nazwa'].", występowanie: ".$rows['wystepowanie']."</li>";
							echo "<li>".$rows['nazwa'].", występowanie: ".$rows['wystepowanie']."</li>";
							echo "<li>".$rows['nazwa'].", występowanie: ".$rows['wystepowanie']."</li>";
						echo "</ul>";
					}
				}
			
				$mysqli->close();
				}
			?>
            </div>
            <div id="rContent">
                <img src="img/ryba1.jpg">
                <div style="clear: both;"></div>
                <a href="#">Pobierz kwerendy</a>
            </div>
        </div>
        <div id="footer"><p>Stronę wykonał: 02281301917</p></div>

    </div>
</body>
</html>

Bardzo dziękuję za każda chęć niesienia pomocy!

komentarz zamknięcia: Odpowiedź Arkadiusza Waluka rozwiązała wszelkie problemy.
komentarz 22 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)

myślałem nad jakimś

for(i=0; i<=id; i++){

    echo "<li>".liczba i to inne wartości z tych kolumn."</li>";

}

ale nie mam pojęcia jak to w PHP zapisać "|

komentarz 22 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie jestem pewien czy dobrze rozumiem - chcesz po prostu wylistować wszystkie ryby z bazy i uzyskać listę ul z kolejnymi li jako kolejnymi rybami?
komentarz 22 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Tak, ale wraz z każdymi wartościami z kolumn:

<li>(ID=1) *nazwa*Szczupak, *występowanie* jeziora, rzeki</li>
<li>(ID=2) *nazwa*Dorsz, *występowanie* rzeki</li>

itd.
komentarz 23 listopada 2020 przez VBService Ekspert (253,340 p.)
edycja 23 listopada 2020 przez VBService

Napisałeś:

użycie polecenia for() { ... } w tym przypadku powoduje jeden dość znaczący problem, musisz znać "w kodzie" jaka ilość rekordów została zwrócona w wyniku wykonania zapytania do bazy danych, aby wyświetlić (zapisać, iterować) je do postaci w tym przypadku listy ( <ul> ). Lepsze będzie użycie polecenia while() { ... } w takim zapisie (co powoduje, że php "sam pilnuje" tego ile zostało "zwróconych" wierszy wink )

	if($result = $mysqli->query($query)){
		$num_rows = $result->num_rows;
		if($num_rows>0){
			echo "<ul>";
			while ($row = $result->fetch_assoc()) {			
				echo "<li>$row['nazwa'], występowanie: $row['wystepowanie']</li>";
			}
			echo "</ul>";
		}		
	}

od wersji php 5.4 możliwy jest taki zapis

	echo "<ul>";
	foreach ($result = $mysqli->query($query) as $row) {			
		echo "<li>$row['nazwa'], występowanie: $row['wystepowanie']</li>";
	}
	echo "</ul>";

Variable name INSIDE quotation marks in php ]

echo "Hello my name is " . $name;

versus :-)

echo "Hello my name is $name";

 

1
komentarz 23 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)

Dzięki za chęci! Okazało się, że nakierował mnie Arkadiusz Waluk na wnet identyczne rozwiązanie, zobacz:

if($result = $mysqli->query($query)){
					$num_rows = $result->num_rows;
					if($num_rows>0){
						
						echo "<ul>";
						    while($rows = $result->fetch_assoc()){
							echo "<li>".$rows['nazwa'].",                   występowanie: ".$rows['wystepowanie']."</li>";
							}
						echo "</ul>";
						
						$result->free();
					}
				}

(nie wiem czemu nie wyświetla się to poprawnie, ale w kodzie mam estetycznie :) )

Jednak udało mi się napisać coś gramatycznie tak, jak by to napisał profesjonalista :D

Jak dla mnie super na sam początek pracy z PHP / SQL :D

Miłego!

2 odpowiedzi

+1 głos
odpowiedź 22 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
wybrane 23 listopada 2020 przez Nabuchadonozor
 
Najlepsza

Zapytanie SELECT * już wyciąga Ci wszystkie kolumny (id, nazwa, występowanie) oraz wszystkie wiersze (wszystkie ryby jakie są w tabeli). Wystarczy to obsłużyć po stronie PHP.

Możesz w tym celu skorzystać z fetch_all(), aby dostać na raz przetworzone wszystkie wiersze jako tablicę, po czym przeiterować się po niej np. przez pętlę foreach (można i wspomnianą przez Ciebie for, ale gdy chcemy przejść po elementach tablicy foreach będzie najwygodniejsza) i w każdym przejściu pętli wyświetlać jeden wiersz.

Inną opcją jest pozostawienie np. fetch_assoc() które już masz, ale wykonanie go w pętli, jak tu w przykładzie jest while: https://www.php.net/manual/en/mysqli-result.fetch-assoc.php#refsect1-mysqli-result.fetch-assoc-examples To spowoduje, że za każdym przejściem pętli w $row będziesz miał dane (wszystkie kolumny jak nazwa, występowanie) kolejnego jednego rekordu z bazy (jednej ryby). W pętli zapisujesz oczywiście wyświetlanie jednego <li>, gdy to się wykona wiele razy to automatycznie wygeneruje się wiele elementów.

1
komentarz 23 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Dziękuję za tak ślicznie opisaną wypowiedź, teraz spróbuję zaimplementować to dobrze, jak się uda -> zamknę temat. Miłego!
komentarz 23 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Kocham Cię stary! Jeszcze raz wielkie dzięki!
1
komentarz 23 listopada 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Oj tam, bez przesady, rzuciłem tylko małe nakierowanie jak do tego podejść. Cieszę się, że się udało ;)
0 głosów
odpowiedź 22 listopada 2020 przez SzkolnyAdmin Szeryf (86,360 p.)

Zmień tytuł, to nie zadanie maturalne, tylko arkusz EE.09-01-19.06.

komentarz 23 listopada 2020 przez Nabuchadonozor Gaduła (3,120 p.)
A to nie jest maturalny arkusz? xD Proszę wybaczyć :V

Podobne pytania

0 głosów
2 odpowiedzi 287 wizyt
0 głosów
1 odpowiedź 252 wizyt
pytanie zadane 22 czerwca 2017 w SQL, bazy danych przez kabzonek Nowicjusz (140 p.)
0 głosów
2 odpowiedzi 137 wizyt

92,576 zapytań

141,426 odpowiedzi

319,651 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!

...