Autor Zpráva
Jacker
Profil *
pls co znamená to číslo na konci? Vždy mi to píše: Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 1 on MySQL result index 4 in /home/free/hu.cz/k/kos/root/www/tt.php on line 6


$ban = mysql_result(mysql_query("SELECT * FROM ban WHERE ip='".$REMOTE_ADDR."'"), 0);
nightfish
Profil
číst umíme?
fisch
Profil *
asi nejspíš taky neumím číst, ale nějak mi nedochází tohle varovaní, přestože mi script funguje... :

Warning: Unknown: 1 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0
anode
Profil
fisch: Jaká verze PHP a MySQL? Případně hodil by se kus zdrojáku, se kterým to ještě dělá.
nightfish
Profil
fisch
to by mohlo být způsobeno tím, že je v php.ini nastaveno mysql.trace_mode=on
a zároveň že neuvolňuješ explicitně výsledky dotazů z mysql pomocí mysql_free_result - nutno podotknout, že toto explicitní uvolňování může pomoct při práci s velikými výsledky dotazů, kdy tyto, nejsou-li uvolněny, zabírají zbytečně paměť i poté, co s nimi přestaneme pracovat

všechny výsledky mysql dotazů jsou implicitně uvolněny při ukončení skriptu
fisch
Profil *
Děkuji nightfish, bylo to tím, takže teď už se podobný varování nebudou zobrazovat? Ten zdroják je tady.. tak by to šlo teda vylepšit?

$sql = mysql_query("SELECT id,jmeno,obrazek FROM studenti");
echo "<table border="1">";

while ($data = mysql_fetch_array($sql))
echo "<tr><td>".$data[id]. " </td><td> " .$data[jmeno]. " </td><td> " .$data[obrazek]. "</td></tr>" ;
echo "</table>";
nightfish
Profil
fisch
šlo by to vylepšit tak, že třeba za to echo "</table>"; dáš
mysql_free_result($sql);
anode
Profil
Pokud to je podobně jednoduchý skript, spíš bych vypnul ten trace_mode. V takovém případě není důvod nevyužít vlastnosti PHP - že na konci běhu skriptu automaticky uvolní všechny zdroje.
Shogun
Profil *
Kód:
            $nm=mysql_result(mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link), 0);

mysql_query("INSERT INTO web_log (uzivatel, akce, cas) VALUES ('".$nm."', 'Edited Player ".$_POST["jmeno"]."', NOW())", $link);

mysql_query("UPDATE web_players SET jmeno='".$_POST["jmeno"]."', postavy='".$_POST["postavy"]."', icq='".$_POST["icq"]."', mail='".$_POST["mail"]."', stav='".$_POST["stav"]."', prijat='".$_POST["prijat"]."', active='".$_POST["active"]."' WHERE id='".$id."';", $link);
echo ("Hráč <b>".$_POST["jmeno"]."</b> s ICQ# <b>".$_POST["icq"]."</b> a mailem <b>".$_POST["mail"]."</b>, který byl přijat <b>".$_POST["prijat"]."</b> editován úspěšně. Stav: <b>".$_POST["stav"]."</b>, aktivní: <b>".$_POST["active"]."</b>.<br>Postavy:<br><b>".$_POST["postavy"]."</ b>.");
echo mysql_error();

Chyba:
Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in /home/free/ic.cz/p/pol/root/www/design/editplayers.php on line 66

Číst umim, ale z manuálu mi to není moc jasné, takže co doplnit místo 0 v mysql_result, aby se mi tam ta hláška nevypisovala a $nm proběho úspěšně?
Předem díky.
Alphard
Profil
mysql_error() musí být před jinými dotazy

$nm=mysql_result(mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link), 0);
echo mysql_error();

mysql_query("INSERT INTO ...
Shogun
Profil *
Pokud jsem to dobře pochopil, každá mysql_query musí mít svuj echo mysql_error().
Kód je následující, přesto to tu chybovou hlášku vypisuje stále a do databáze (web_log) ne neukládá uživatel, krerý editoval.
    {

$nm=mysql_result(mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link), 0);
echo mysql_error();
mysql_query("INSERT INTO web_log (uzivatel, akce, cas) VALUES ('".$nm."', 'Edited Player ".$_POST["jmeno"]."', NOW())", $link);
echo mysql_error();
mysql_query("UPDATE web_players SET jmeno='".$_POST["jmeno"]."', postavy='".$_POST["postavy"]."', icq='".$_POST["icq"]."', mail='".$_POST["mail"]."', stav='".$_POST["stav"]."', prijat='".$_POST["prijat"]."', active='".$_POST["active"]."' WHERE id='".$id."';", $link);
echo mysql_error();
echo ("Hráč <b>".$_POST["jmeno"]."</b> s ICQ# <b>".$_POST["icq"]."</b> a mailem <b>".$_POST["mail"]."</b>, který byl přijat <b>".$_POST["prijat"]."</b> editován úspěšně. Stav: <b>".$_POST["stav"]."</b>, aktivní: <b>".$_POST["active"]."</b>.<br>Postavy:<br><b>".$_POST["postavy"]."</ b>.");
echo "-".$nm;
}
nightfish
Profil
Shogun
problém je v tom prvním řádku - ten dotaz to jméno prostě nevrátí, rozepiš si to:

$result = mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link);
echo mysql_error();
$nm=mysql_result($result, 0);
Shogun
Profil *
Nic :-(( Stále tam ta chybová hláška je a ani jméno upravujícího se do databáze nepřidá.
    else

{
$result = mysql_query("SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link);
echo mysql_error();
$nm=mysql_result($result, 0);
echo mysql_error();
mysql_query("INSERT INTO web_log (uzivatel, akce, cas) VALUES ('".$nm."', 'Edited Player ".$_POST["jmeno"]."', NOW())", $link);
echo mysql_error();
mysql_query("UPDATE web_players SET jmeno='".$_POST["jmeno"]."', postavy='".$_POST["postavy"]."', icq='".$_POST["icq"]."', mail='".$_POST["mail"]."', stav='".$_POST["stav"]."', prijat='".$_POST["prijat"]."', active='".$_POST["active"]."' WHERE id='".$id."';", $link);
echo mysql_error();
echo ("Hráč <b>".$_POST["jmeno"]."</b> s ICQ# <b>".$_POST["icq"]."</b> a mailem <b>".$_POST["mail"]."</b>, který byl přijat <b>".$_POST["prijat"]."</b> editován úspěšně. Stav: <b>".$_POST["stav"]."</b>, aktivní: <b>".$_POST["active"]."</b>.<br>Postavy:<br><b>".$_POST["postavy"]."</ b>.");
echo "-".$nm;
}
Alphard
Profil
nemůže, myslím si, že první select neskončí tak, jak očekáváš, ale je záhadou, že to nehlásí syntaktickou chybu, nevím např. jaký datový typ má sloupec id, že porovnáváš v ' ' atd.
zkontroluj výsledky vrácené tímto dotazem
nightfish
Profil
Shogun
proveď ještě jednu úpravu
$result = mysql_query($q="SELECT jmeno FROM web_users WHERE id='".$_SESSION["id"]."'", $link);
echo $q."<br>";
echo mysql_error(); ...

a pak si ten vypsaný dotaz spusť buď v konzoli nebo v phpMyAdminovi a zjistíš, že ti nevrací žádný řádek, tzn. v tabulce `web_users` neexistuje řádek, který by měl id shodné s obsahem proměnné $_SESSION["id"]
Shogun
Profil *
Proměnná $result vyhodí Resource id #8.
Sloupec id má datový typ int(11) a je auto_increment.

Offtopic: Ukládám záznamy, kterým se přidělujou id 1,2,3,4,5,6. Potom smažu záznamy 4,5,6 a když tam zase nějaký přidám, tak dostane číslo 7 => id řada je 1,2,3,7. Lze nějak posunou ten auto_increment, aby místo 7 dal opět 4, pak 5, 6 atd.?
Shogun
Profil *
$q vypíše SELECT jmeno FROM web_users WHERE id='11' (pokud edituju uživatele, který má v db id 11.
Alphard
Profil
Sloupec id má datový typ int(11) a je auto_increment.
WHERE id='11'

takže to nedávej do apostrofů
nightfish
Profil
Ukládám záznamy, kterým se přidělujou id 1,2,3,4,5,6. Potom smažu záznamy 4,5,6 a když tam zase nějaký přidám, tak dostane číslo 7 => id řada je 1,2,3,7. Lze nějak posunou ten auto_increment, aby místo 7 dal opět 4, pak 5, 6 atd.?
ano, jde to, hledej ve FAQ v tématu Databáze na webu - EDIT: tam je vlastně jenom "setřepávání" id

$q vypíše SELECT jmeno FROM web_users WHERE id='11'
1) podívej se do tabulky, zda-li v ní máš záznam s id = 11
2) zkus zrušit ty apostrofy kolem jedenáctky, jak již podotknul kolega Alphard
3) spusť si ten dotaz v konzoli nebo phpMyAdminu
Alphard
Profil
$result = mysql_query("SELECT jmeno FROM web_users WHERE id=".$_SESSION["id"], $link);
echo mysql_error();
$nm=mysql_result($result, 0);
echo $nm;
nightfish
Profil
a ještě drobné vylepšení
$result = mysql_query("SELECT jmeno FROM web_users WHERE id=".$_SESSION["id"], $link);

echo "Počet řádků výsledku: ".mysql_num_rows($result)."<br>";
echo mysql_error();
$nm=mysql_result($result, 0);
echo $nm;
Shogun
Profil *
$q vypíše SELECT jmeno FROM web_users WHERE id=11...
$result vypíše Resource id #8

Stále chyba Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in /home/free/ic.cz/p/pol/root/www/design/editplayers.php on line 69

Kód:
    else

{
$result = mysql_query($q="SELECT jmeno FROM web_users WHERE id=".$_SESSION["id"]."", $link);
echo $q."...<br>";
echo mysql_error();
echo $result;
$nm=mysql_result($result, 0);
echo mysql_error();
mysql_query("INSERT INTO web_log (uzivatel, akce, cas) VALUES ('".$nm."', 'Edited Player ".$_POST["jmeno"]."', NOW())", $link);
echo mysql_error();
mysql_query("UPDATE web_players SET jmeno='".$_POST["jmeno"]."', postavy='".$_POST["postavy"]."', icq='".$_POST["icq"]."', mail='".$_POST["mail"]."', stav='".$_POST["stav"]."', prijat='".$_POST["prijat"]."', active='".$_POST["active"]."' WHERE id='".$id."';", $link);
echo mysql_error();
echo ("Hráč <b>".$_POST["jmeno"]."</b> s ICQ# <b>".$_POST["icq"]."</b> a mailem <b>".$_POST["mail"]."</b>, který byl přijat <b>".$_POST["prijat"]."</b> editován úspěšně. Stav: <b>".$_POST["stav"]."</b>, aktivní: <b>".$_POST["active"]."</b>.<br>Postavy:<br><b>".$_POST["postavy"]."</ b>.");
echo "-".$nm;
}


Do web_log se stále nezapíše jméno.
nightfish
Profil
Stále chyba Warning: mysql_result() [function.mysql-result.php]: Unable to jump to row 0 on MySQL result index 8 in
význam té hlášky tady ještě nezazněl, takže hurá do toho: snažíš se pomocí funkce mysql_result přistupovat k řádku 0 výsledku mysql dotazu, avšak tento řádek neexistuje - jsou v zásadě 2 možnosti - buď se dotaz neprovede kvůli chybě (což jsme ale vyloučili, protože mysql_error() nic nevypíše) a nebo se dotaz provede a vrátí 0 řádků (což je tvůj případ)
Shogun
Profil *
echo "Počet řádků výsledku: ".mysql_num_rows($result)."<br>";
skutečně vypíše: Počet řádků výsledku: 0
nightfish
Profil
skutečně vypíše: Počet řádků výsledku: 0
protože to opravdu žádné výsledky nevrátí - možné důvody a způsoby diagnostiky jsou uvedeny v příspěvcích výše
Shogun
Profil *
Tak jsem našel chybu v proměnných kdy se mi navzájem přepisovaly jinými údaji.
Všem mockrát děkuji za pomoc.

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: