Autor Zpráva
XolyCZ
Profil
Ahoj, potřebuju vytáhnout jména hráčů z databáze podle toho, jestli jsou přihlášení do hry nebo ne. Po vytažení je potřebuju vypsat do tabulky a to nejspíše přes cyklus který bude vypisovat pole do kterého se ty vytažnené jména z databáze uloží. Nevím ale úplně jak to do toho pole uložit, našel jsem tady i jeden starý příspěvek, ale to mi nefunguje, píše to tohle: Uncaught Error: Call to undefined function MySQL_Fetch_Array(). Našel jsem to tady, ikdyž už je to celkem staré: výpis databáze do pole.

No a můj kód vypadá takhle:
function registrovani_solo_nick(){
            $registrovani_solo_nick_database = Db::queryOne('SELECT Nickname FROM hraci_online WHERE solo_jointed=1');
            global $registrovani_solo_nick;
            while ($solo_nick = MySQL_Fetch_Array($registrovani_solo_nick_database))
            $registrovani_solo_nick = array($solo_nick['Nickname']);
        }

Poradí mi někdo prosím? Děkuji moc.
T-fon
Profil
Máš na serveru PHP7, ne? Tam už tahle funkce není, viz. php.net/function.mysql_fetch_array
XolyCZ
Profil
Mám no. Zkusím se na to ještě nějak podívat.


Něco jsem si o tom přečetl, ale asi jsem to úplně nepochopil. Hlavně nevím, proč to píše tuto chybu:Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, array given in...zdroj souboru

mám to teď upravené takhle:
function registrovani_solo_nick(){
            $registrovani_solo_nick_database = Db::queryOne('SELECT Nickname FROM hraci_online WHERE solo_jointed=1');
            global $registrovani_solo_nick;
            while ($solo_nick = mysqli_fetch_array($registrovani_solo_nick_database, MYSQL_NUM))
            $registrovani_solo_nick = array($solo_nick['Nickname']);
        }
Keeehi
Profil
Tak se podívej pořádně do dokumentace. Funkce rodiny mysql_* měli parametr pro určení připojení do databáze jako nepovinný. Jelikož se většinou používalo jen jedno, nebylo třeba ho zadávat a tak ho uvidíš málo kde. U rodiny mysqli_* už je ale povinný a tak ti tam chybí.

Ale hlavně, ty používáš na práci s databází knihovnu, tak využij ji. Uvnitř interně používá PDO, takže ani kdyby jsi tu mysqli_* funkci měl správně, tak ti to nebude fungovat.

A nakonec, zapomeň že slovo global existuje. Ještě jsem neviděl legitimní případ, kdy by bylo potřeba. Předej si to klasicky jako parametr funkce.
XolyCZ
Profil
Keeehi:
Zkoušel jsem pohledat, ale nefunguje to úplně přesně... Dal jsem dohromady tohle:
function registrovani_solo_nick(){
$spojeni = mysqli_connect('...');
if (!$spojeni)
  die('Spojení s MySQL databází se nezdařilo.');
 
mysqli_set_charset($spojeni,"utf8");
 
$registrovani_solo_nick_database = mysqli_query($spojeni, 'SELECT Nickname FROM hraci_online WHERE solo_jointed=1', MYSQLI_USE_RESULT);

while($solo_nick = mysqli_fetch_array($registrovani_solo_nick_database, MYSQLI_BOTH))
{
$registrovani_solo_nick = array($solo_nick['Nickname']);
}

return $registrovani_solo_nick;

mysqli_close($spojeni);
}

Když chci vypsat to pole registrovani_solo_nick, vypíše mi to vždycky první prvek v poli, který má ale zároveň poslední pořadí při čtení z databáze. Jakože je třeba 10. z 10ti a v poli je na prvku 0. Nic jiného se do toho nezapíše. Potom to pole už doufám vypisuju a předávám dobře.
<?php
$registrovani_solo = registrovani_solo_nick();            
?>

<?php
    for($i=0;$i<$_SESSION['solo_max'];$i++){
        echo("<tr>
        <td>#"); echo($i+1); echo("</td>
        <td>"); echo ($registrovani_solo[$i]); echo("</td>
        </tr>");
    }
?>
T-fon
Profil
Zkus toto:
$registrovani_solo_nick[] = $solo_nick['Nickname'];
XolyCZ
Profil
T-fon:
Jo tohle funguje. Můžu se zeptat ale proč? Pořád je to pole ne?
juriad
Profil
$registrovani_solo_nick = array($solo_nick['Nickname']);
Do proměnné ukládáš pole o jednom prvku.

$registrovani_solo_nick[] = $solo_nick['Nickname'];
Do pole přidáváš jeden prvek.
XolyCZ
Profil
juriad:
Jo tak, už to chápu. Díky moc :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: