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

Zapis z kilku rekordów bazy do zmiennych.

Object Storage Arubacloud
0 głosów
945 wizyt
pytanie zadane 11 października 2015 w SQL, bazy danych przez michal Mądrala (5,560 p.)

Mam w bazie tabele z kolumnami: id, imie, punkty. Chciałbym wyciągnąć 10 rekordów z najwiekszą liczbą punktów, i zapisac dane do zmiennych sesyjnych, zeby wyświetlić na stronie liste najlepszych urzytkowników.

<?php

	require_once "connect.php";
	
	$polonczenie = @new mysqli($host, $db_user, $db_password, $db_name);
	
	if ($polonczenie->connect_errno!=0)
	{
		echo "Error";
	}
	else
	{
		$imie = $_POST['name'];
		$punkty = $_POST['points'];
		
		$sql = "INSERT INTO ranking set imie='$imie', punkty='$punkty'";
		
		if ($polonczenie->query($sql))
		{
			$sql2= "SELECT * FROM ranking WHERE id>=1 AND id<=10";
			if ($rezultat = $polonczenie->query($sql2))
			{
				$wiersz = $rezultat->fetch_assoc();
				$_SESSION['id'] = $wiersz['id'];
				$_SESSION['imie'] = $wiersz['imie'];
				$_SESSION['punkty'] = $wiersz['punkty'];
				
				$rezultat->close();
				
				
			}
			else
			{
				echo "Błąd";
			}
		}
		else
		{
			echo "Błąd";
		}
	
		$polonczenie->close();
	
	}
	

?>

 

1 odpowiedź

0 głosów
odpowiedź 11 października 2015 przez furas Maniak (53,800 p.)

Do $_SESSION możesz przypisać od razu całą tablicę (array) lub tablice asocjacyjną zamiast przypisywać jedno po drugim.

$_SESSION['lista'] = $lista_najlepszych;

Inna sprawa, że takie rzeczy to raczej należało by zapisać w jakimś cache'u aby była dostępna dla wszystkich użytkowników i nie trzeba było dla każdego użytkownika odpytywać bazę i zapisywać w sesji. Druga sprawa, że jak nowy użytkownik dojdzie do rankingu to dane z sesji przestają być aktualne - dlatego zwykle odpytuje się bazę za każdym razem aby mieć zawsze najnowsze dane (I ewentualnie łączy się to z jakimś cache'owaniem).

komentarz 11 października 2015 przez michal Mądrala (5,560 p.)
Dopiero sie ucze php i mysql, i chcialem sobie cos wykonać zeby potrenowac. Rozumiem ze zapytanie ktore zapisalem w zmiennej $sql2 wybierze mi z bazy 10 pierwszych rekordów, i nie wiem jak zapisac je do zmiennych, lub do tablicy jak podpowiadasz. Nie wiem jak to ogarnąc. Z groy dziekuje za wyrozumiałość.
komentarz 11 października 2015 przez furas Maniak (53,800 p.)
$wynik = array();

while($wiersz = $resultat->fetch_assoc()) {
    $wynik[] = $wiersz;
}

$_SESSION['lista'] = $wynik;

//-----------------------

// pierwszy wiersz
echo $_SESSION['lista'][0]['id'];
echo $_SESSION['lista'][0]['imie'];
echo $_SESSION['lista'][0]['punkty'];

// drugi wiersz
echo $_SESSION['lista'][1]['id'];
echo $_SESSION['lista'][1]['imie'];
echo $_SESSION['lista'][1]['punkty'];

$_SESSION['lista'] = array();

while($wiersz = $resultat->fetch_assoc()) {
    $_SESSION['lista'][] = $wiersz;
}

 

komentarz 11 października 2015 przez furas Maniak (53,800 p.)
skoro dopiero zaczynasz to zainteresuj się od razu jakimś frameworkiem bo

- będziesz miał pewne rzeczy już zrobione i nie będziesz musisz "odkrywać koła na nowo"

- będziesz musiał przestrzegać sprawdzonych reguł zamiast robić chaos w kodzie np. dobrą regułą jest w osobnym pliku mieć funkcje do obsługi bazy, w osobnym HTML a w osobnym kod który pobierze dwa poprzednie pliki, obsłuży dane z formularza i wygeneruje całą strony - patrz: MVC czyli Model View Controller
komentarz 11 października 2015 przez michal Mądrala (5,560 p.)
Dziękuje za sporą dawkę informacji. Jeśli mowa o frameork to może być np. symfony?

Jeszcze mam pytanie jak to wygląda, czy faktycznie uczyć sie z zastosowaniem frameworka, czy na początek czystego php, żeby poznać podstawy?
komentarz 11 października 2015 przez efiku Szeryf (75,160 p.)
Z własnego doświadczenia powiem tak.

Na początek czysty php byś wiedział o co chodzi ;)

np do czego przydatna jest pętla foreach.

jak już opanujesz OOP. wtedy łap za jakiś fw ( albo szukaj gotowych komponentów )

@edit: Zafuaj mi, zrazisz się tylko do Syfmony - chcesz się brać za tak zaawansowany FW nie znająć podstaw.
komentarz 11 października 2015 przez Boshi VIP (100,240 p.)
Efik ma rację, nie znasz podstaw php, nie znasz oop, FW cię  prędzej  zniechęci do czegokolwiek aniżeli cokolwiek w nim napiszesz.. Zwłaszcza takie bydle jak symfony.  Jak dostaniesz drzewo funkcji  z 20 rozgałęzieniami to  i tak nic z tego nie zrozumiesz.

 

Ogarnij php, potem OOP jako tako i wtedy bierz się za FW
komentarz 11 października 2015 przez michal Mądrala (5,560 p.)

Mam jeszcze pytanko czy jest jakiś prosty sposob żeby ogarnąć kod który chce napisać. 

Mam gre napisana w js i chcę żeby urzytkownik gdy zakończy grę mogł się zapisać w rankingu. Nie do końca wiem jak przesłać dane za pomocą Ajaxa dlatego wpadłem na pomysł by zrobićzwykły formularz w którym imie można wprowadzić, a ilość punktów wpisuje jquery za pomoca funkcji val() i urzytkownik jej nie może zmienić ponieważ pole input ma dodana właściwość readonly. Wiem, że to nie do końca dobry sposób, ale postanowiłem jednak z niego skożystać w celach dydaktycznych :). W php utworzyłem skrypt taki jak w pytaniu u góry. Po podaniu imienia plik zapisuje informacje w bazie, a poźniej chce wyświetlić 10 najlepszych wyników. Kolega furas podpowiedział mi kod ale nie do końca rozumiem co się w nim dzieje. Teraz mam dylemat, czy dalej rozmyślać i próbować cos z tego skleic, czy narazie sobie odpuścić i podszkolić się jeszcze z podstaw, po czym znów zacząć działać? 

komentarz 11 października 2015 przez furas Maniak (53,800 p.)
edycja 11 października 2015 przez furas

Jednym ze sposobów na naukę (oraz znajdowanie błędów) jest wypisywanie zawartości zmiennych - przed zmianą, po zmianie, w trakcie zmian. Widzisz wtedy jaki wpływ na zmienną ma dana funkcja lub cała konstrukcja. Możesz wypisywać np za pomocą var_dump() i znacznika '<pre>' aby przeglądarka to dobrze formatowała. Warto tez dodać komentarz typu "jestem w if", "zmieniam wielkosc", "przed foreach", itp.
 

echo 'jestem w if/else <pre>', var_dump($zmienna), '</pre>';


Drugim sposobem jest modyfikowanie kodu, który dostałeś od innych aby przekonać się jai to będzie miało wpływ na wynik. Dodając do tego wspomniane wypisywanie widzisz dokładnie co się dzieje w programie krok po kroku.

---

Łatwiej się uczy gdy ma się własny cel - jest większa motywacja.

---

// stworzenie pustej tablicy na wyniki
$wynik = array();

// while będzie powtarzać czynność pobrania kolejnego wiersza z wynikami 
// i przypisywanie go do zmiennej tak długo jak fetch_assoc będzie miało co zwracać
while($wiersz = $resultat->fetch_assoc()) {
   // sztuczka z dodawanien elementu na końcu tablicy bez znajomości jej długości
    $wynik[] = $wiersz;
}
 
// przypisanie 
$_SESSION['lista'] = $wynik;

---

Powyższe można też zapisać
 

$wynik = array();

// pobranie pierwszego wyniku
$wiersz = $resultat->fetch_assoc();

// jeśli udało się pobrać wiersz to wykonaj to co w { } 
while($wiersz) {
    $wynik[] = $wiersz;

    // pobierz kolejny wiersz
    $wiersz = $resultat->fetch_assoc();

   // tu następuje automatyczny powrot do while 
} 

$_SESSION['lista'] = $wynik;
komentarz 11 października 2015 przez michal Mądrala (5,560 p.)
Dziękuje za wyczerpujący opis, teraz zaczynam widzieć jak to działa po koleji. Pozdrawiam.

Podobne pytania

0 głosów
2 odpowiedzi 586 wizyt
+1 głos
2 odpowiedzi 1,852 wizyt
0 głosów
0 odpowiedzi 155 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...