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

Funkcja i połączenie z bazą MySQL

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
607 wizyt
pytanie zadane 23 sierpnia 2016 w PHP przez Piotr Czarnecki Nowicjusz (200 p.)

Witam wszystkich pasjonatów programowania.

Moja vfirma, która niedawno miała swój wielki start, powoli, ale bacznie się rozwija. Nadszedł taki też czas, że forum nie będzie nam wystarczać, dlatego piszę panel dzięki któremu będziemy mogli sprawnie zarządzać tym projektem. Tak czy inaczej, błędy i pytania w trakcie pisania backendu się same nachodzą, lub pojawiają. Aktualnie jestem w trakcie pisania menu, gdzie będę mógł zarządzać moimi pracownikami. Skrypt aktualnie opiera się na działaniu 2 baz mysql i kodu PHP, a frontend zapewnia mi Material Design od Google. Oczywiście nie obejdzie się bez głównego gościa programu, czyli problemu, jaki u mnie występuje. Po części jest to właśnie problem, a po drugiej części ciekawość, jak to działa :P. Chodzi o to, że mam funkcję PHP, gdzie jest oczywiście kod HTML'a, oraz kod PHPa. Umieszczam w funkcji linijki do łączenia się z bazą za pomocą mysqli,

(poniżej kod całej, JESZCZE NIEGOTOWEJ funkcji)

function sekcja($nazwa, $idgrupypanel)
{
	require_once("database.php");
		
	$sekcja_db = @new mysqli($dbpanel_host,$dbpanel_login,$dbpanel_haslo,$dbpanel_baza);
	if ($sekcja_db->connect_errno!=0)
	{
		echo "Błąd łączenia z bazą: ".$sekcja_db->connect_errno;
		exit();
	}
	
	$sekcja_zapytanie = $sekcja_db->query("SELECT * FROM users WHERE usergroup = '$idgrupypanel'");
	$sekcja_liczba = $sekcja_zapytanie->num_rows();
	
	if ($sekcja_liczba > 0)
	{
			
	 
	echo<<<END
	<h3>$nazwa</h3>
	<table class="tabelka mdl-data-table mdl-js-data-table mdl-shadow--2dp mdl-data-table__header--sorted-descending">
		<thead>
			<tr>
			  <th>ID Forum</th>
			  <th class="mdl-data-table__cell--non-numeric">Imię i nazwisko</th>
			  <th class="mdl-data-table__cell--non-numeric">Nick</th>
			  <th class="mdl-data-table__cell--non-numeric">Email</th>
			  <th class="mdl-data-table__cell--non-numeric">Punkty</th>
			  <th class="mdl-data-table__cell--non-numeric">Kod</th>
			  <th class="mdl-data-table__cell--non-numeric">Akcje</th>
			</tr>
		</thead>
		<tbody>
			<tr>
END;


echo'<td>'.$sekcja_rezultat['idforum'].'</td>';
echo'<td class="mdl-data-table__cell--non-numeric">'.$sekcja_rezultat['imie'].' '.$sekcja_rezultat['nazwisko'].'</td>';
echo'<td class="mdl-data-table__cell--non-numeric">'.$sekcja_rezultat['login'].'</td>';
echo'<td class="mdl-data-table__cell--non-numeric"><a href="mailto:'.$sekcja_rezultat['email'].'">'.$sekcja_rezultat['email'].'</a></td>';
echo'<td class="mdl-data-table__cell--non-numeric">'.$sekcja_rezultat['points'].'</td>';
echo'<td class="mdl-data-table__cell--non-numeric">'.$sekcja_rezultat['code'].'</td>';
echo'<td class="mdl-data-table__cell--non-numeric">';
echo'<a href="?uid='.$sekcja_rezultat['id'].'"><button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored"><i id="podglad" style="color: black;" class="material-icons">visibility</i></button></a>';
echo'<a href=""><button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored"><i id="edytuj" style="color: green;"class="material-icons">edit</i></button></a>';
echo'<a href=""><button class="mdl-button mdl-js-button mdl-button--icon mdl-button--colored"><i id="wyrzuc" style="color: red;"class="material-icons">delete</i></button></a>';

echo<<<END
			</td>
			</tr>
		</tbody>
	</table>
	<hr />
END;
	}
	else
	{
		echo "<span style='font-size: 25px;'><b>Ta ranga nie ma przypisanych uzytkowników...</b></span>";
	}
}

 a potem po wywołaniu tejże funkcji wyskakuje mi oczywiście błąd z kodem 1045, który oczywiście znam i rozumiem. Tylko ja mam pytanie: "Jak?!". Przecież połączenie przy wywołaniu się otwiera i zamyka. Robiłem próby i po przeniesieniu rozpoczęcia połączenia przed funkcję (czyli przed function sekcja(...)) to linijka z przesłaniem query zwracała w logach wartość null. Sam się uczę na podstawie, jak to się mówi "prób i błędów" oczywiście opierając się na dokumentacjach i już gotowych przykładach. I chciałbym prosić o to, żeby mi ktoś wyjaśnił, dlaczego nie działa połączenie z bazą w funkcji? Na obiektowym PHP się niestety jeszcze nie znam i wiem, że przede mną jeszcze wiele nauki, ale chyba powoli będę musiał wdrażać to do mojego "dzieła życia" :D.

Także nie proszę o rozwiązanie problemu (chociaż jak ktoś chce, to może go rozwiązać - nie zmuszam), ale o wyjaśnienie - jak to się dzieje, że to nie działa i dlaczego?

Pozdrawiam, Piotr ;)

 

EDIT: Czy PDO może rozwiązać sprawę z brakiem połączenia?

komentarz 23 sierpnia 2016 przez xandros Nałogowiec (29,450 p.)
Ja mam pytanie: czemu wymyślasz koło na nowo?

NIe łatiej byłoby użyć jakiegoś frameworka?

U nas w firmie pewnie by zaproponowali Yii2. Laravel też by się nadał do "szybkiego" rozwiązania twojego problemu. Nie wiem jak z Symfony, ale pewnie ludzie z foum też go polecą.
komentarz 23 sierpnia 2016 przez Piotr Czarnecki Nowicjusz (200 p.)
Jak już pisałem, że się dopiero uczę programowania webowego i nawet obiektowego PHP jeszcze nie umiem. Co za tym idzie nie zastanawiałem, oraz nie wiem, jak używać frameworków :P

2 odpowiedzi

+1 głos
odpowiedź 23 sierpnia 2016 przez Boshi VIP (100,240 p.)
Zleć to komuś bo  zanim to napiszesz i będzie działało to jeszcze 2 lata miną.. do tego będzie dziurawe i nikt po tobie tego nie dotknie..

problemem zasięg funkcji.

Nie wiem też po co łączyć się za każdym razem przy wywołaniu, bezsens. Wydziel to do osobnego pliku. Kłaniają się nazwy funkcji, oraz SRP Funkcja ma robić to do czego obliguje ją nazwa a nie 100 innych rzeczy.

przejdź na PDO- błąd będzie ten sam dopóki nie przekażesz obiektu do funkcji jako HINT.

wydziel PHP od html przez np twiga.

można by wiele pisac, ale szczerze nie chce mi sie.
1
komentarz 23 sierpnia 2016 przez Piotr Czarnecki Nowicjusz (200 p.)
Ok, dziękuję za podpowiedzi. Rozumiem, że nie chce się panu pisać bo u mnie to są to dosłownie początki :).
0 głosów
odpowiedź 23 sierpnia 2016 przez efiku Szeryf (75,160 p.)
edycja 23 sierpnia 2016 przez efiku

1. nie bierz kodu zelenta do swoich projektów w firmie. 

2. Wyciszasz błędy to skąd masz wiedzieć ocb w poączeniu?

3. Dlaczego uzywasz durnego mysqli.. przejdz na PDO, albo wgl na doctrine skoro to projekt w fimie. 

4. Dlaczego mieszasz html z php? Znacznie lepszym rozwiązaniem jest tutaj twig.. A CO JAK BĘDZIESZ CHCIAŁ ZMIENIĆ MDL NA BOOTSTRAP? Zmienisz cały bakcend? Bo właśnie to tak wygląda ;)

5. do require_once nie potrzeba nawiasów ;P 

6. Twoja funkcja jest za duża. A może.. 

fetchUsersByGroupID(int $groupID,  \PDO $pdo) 
{
  $users  = $pdo->prepare("SELECT id,name,surname,email,registerDate,description FROM users WHERE  group = :groupID); // tutaj zapytanie jeszcze moze byc relacja grupaid == grupaNazwa
  $users->bindParam(":groupID", PDO::PARAM_INT);
  $users->execute();
   return  $users->fetchAll();
}
// gdzies w kodzie:
$twig->render( 
  "users.html.twig",
   [ 
     "groupID"  => $groupID,
     "users"  => fetchUsersByGroupID($groupID,$pdo)
  ] );

Plik users.html.twig:

 

<div clas="...."> {{ groupID }} </div>

<div class="users">
<!-- USERS --->
{% for user in users %}
  <p>{{ user.name }} </p>
  <p>{{ user.surname }} </p>
  <p>{{ user.points}} </p>
  <p>{{ user.email }} </p>
{% endfor %}

</div>

 

Szanuj swój czas i zdrowie programistów którzy będą poprawiać ten kod.

komentarz 23 sierpnia 2016 przez efiku Szeryf (75,160 p.)
a 1045 czasem nie oznacza, ze nie ma dostępu ?

- user nie jest rootem

- user może łączyć się z danego hosta

- user ma prawda do bazy
komentarz 23 sierpnia 2016 przez Piotr Czarnecki Nowicjusz (200 p.)
Nie, nie. Normalnie wszystko jest ok. Poza funkcją to działa, ale w funkcji nie.
komentarz 23 sierpnia 2016 przez Piotr Czarnecki Nowicjusz (200 p.)
A i co do odpowiedzi, to nie stosuję się skryptem Pana Zelenta. Na przykład cały system logowania mam inaczej napisany. Ale także nie zastanawiałem się nad czymś takim, jak Twig, bo nie wiem, jak to po prostu stosować. Poszukam, poczytam i poprzeglądam jeszcze różne rozwiązania. Wiadomo, każdy od czegoś zaczyna :P Ja akurat raczkuję. Dziękuję tak czy inaczej za podpowiedź, a i to nie jest firma, tylko vfirma. Może i drobnostka, ale dla mnie wiocha, jak ktoś przeczyta, że ten gościu używał dziadowskiego skryptu do firmy xD.
komentarz 23 sierpnia 2016 przez efiku Szeryf (75,160 p.)
No ja myślałem, że chcesz to w firmie wprowadzić o takiej nazwie, dlatego od razu sugerowałem doctrine.

WIiesz co, moje rady na bank Ci się przydadzą. Poszukaj na YT w oficjalnej dokumentacji na temat twiga. Naprawdę ułatwi Ci to pracę w PHP. Bo uwierz mi, że za 3 tyg rzucisz ten kod, bo nie będziesz ogarniał gdzie jest początek ifa a gdzie koniec, bo będzie bagno.

- nie stosujesz skryptu ale używasz podobnej konstrukcji tworzenia polaczenia jak w jego filmikach. Tak się nie robi. Daliśmy Ci tu z Boshim wskazówki co mogło nie działać.

Jeżeli chcesz poczytać o tym jak odbierać requesty w PHP i coś o nich to zapraszam tutaj:

https://symfony.com/doc/current/book/http_fundamentals.html
Tak wiem, pod koniec wchodzą do framweworka, ale przesłanie zrozumiesz, gdyż będziesz wiedział jak to zastosować u siebie, jak odebrać te requesty i zorganizujesz sobie lepiej kod.

Co do pisania projektu...

Polecam najpierw kartki tablice / mazaki długopis. Lepiej zaprojektować niż kodować i projektować.

Może się okazać, że będziesz długo robił ten projekt, ale za to nauczysz się więcej.

PS: Jeżeli jesteś uczniem/  studentem to bierz IDE takie jak PHPStorm.

Najlepsze do PHP IDE pomoże Ci w nauce. Na początku masz miesiąc za darmo, później napisz nam tu na forum to Ci powiemy gdzie kliknąć na ich stronie aby uzyskać za darmo na rok licencję dla siebie.
komentarz 23 sierpnia 2016 przez efiku Szeryf (75,160 p.)
Powyżej zamieściłem Ci w skrócie jak wygląda kod PHP na poszczególnych warstwach aplikacji tak ogólnie mówiąc :P
komentarz 25 sierpnia 2016 przez Piotr Czarnecki Nowicjusz (200 p.)

Spoko, jeszcze raz dzięki. wink

Podobne pytania

+1 głos
1 odpowiedź 373 wizyt
pytanie zadane 24 lutego 2022 w SQL, bazy danych przez Piotrek2713 Mądrala (5,500 p.)
0 głosów
1 odpowiedź 324 wizyt
0 głosów
1 odpowiedź 134 wizyt
pytanie zadane 18 maja 2019 w SQL, bazy danych przez trixter310 Obywatel (1,440 p.)

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2315p. - Łukasz Eckert
  3. 2209p. - Łukasz Piwowar
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2006p. - Michal Drewniak
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...