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?