mysql_result

Programovacie jazyky, rady, poradňa...
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

mysql_result

Príspevok od používateľa _johny_ »

Kód: Vybrať všetko

<?
MYSQL_CONNECT($host,$user,$pass) OR DIE("Unable to connect.");
$result = mysql("databaza", "select * from tabulka where id='$id'");
$klub = mysql_Result($result, 0, "klub");
$body = mysql_Result($result, 0, "zapasy");
mysql_Close();
?>
neviete kde je chyba? normalne mi to ide ale ked to dam na freehosting tak hlasi:

Kód: Vybrať všetko


Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in /www/0/site32680/wwwroot/edit.php on line 26

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in /www/0/site32680/wwwroot/edit.php on line 27
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Skús tam pridať kontrolu, či sa vlastne nejaké zodpovedajúce riadky nájdu. Niečo ako:

Kód: Vybrať všetko

if (mysql_num_rows($result)==0) {
    // nieco urobis alebo vypises
}
Ako nastavuješ premennú $id? Neposielaš to náhodou cez GET alebo POST?
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

hej posielam to cez GET
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pravdepodobne máš zakázané register_globals (pozri výpis funkcie phpinfo()). Uprav to takto:

Kód: Vybrať všetko

$id = isset($_GET(§'id')) ? $_GET(§'id') : "";

MYSQL_CONNECT($host,$user,$pass) OR DIE("Unable to connect.");
$result = mysql("databaza", "select * from tabulka where id='$id'");
$klub = mysql_Result($result, 0, "klub");
$body = mysql_Result($result, 0, "zapasy");
mysql_Close();
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

Kód: Vybrať všetko

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /www/0/site32680/wwwroot/edit.php on line 24
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Chyba je na tomto riadku?:

Kód: Vybrať všetko

$id = isset($_GET('id')) ? $_GET('id') : "";
(boli tam nejaké zbytočné znaky)
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

hej chyba bola tam a teraz na tom istom riadku:

Kód: Vybrať všetko

Fatal error: Can't use function return value in write context in /www/0/site32680/wwwroot/edit.php on line 24
:?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Vlož sem ten súbor (alebo aspoň jeho časť).

// chrono: Netreba. Dneska mi to si nemyslí. :

Kód: Vybrať všetko

$id = isset($_GET['id']) ? $_GET['id'] : "";
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

no zase vypisuje tu chybu

Kód: Vybrať všetko

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in /www/0/site32680/wwwroot/edit.php on line 28
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pridal si tam test na to, keď ti databáza vráti prázdny výsledok? (tú funkciu mysql_num_rows).
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

Ahoj,
(V dokumentacii php je napisane ze je vykonnejsia alternativa mysql_result je mysql_fetch_array, mysql_fetch_object...)
cize ako prve hned by som spravil to ze miesto mysql_result by som nahradil mysql_fetch_array [mozes aj mysql_fetch_object]...

Kód: Vybrať všetko

<? 
// Funkcia pre overenie ci sa nieco nachadza v tabulke...
function check_obsah($level, $message)
{
global $result;
if (mysql_fetch_row($result) == "FALSE" || mysql_num_rows($result) == 0)
{
if ($level == "0")
{
echo $message;
}
if ($level == "1")
{
die ($message);
}
}
}

MYSQL_CONNECT($host,$user,$pass) OR DIE("Unable to connect."); 
$result = mysql("databaza", "select * from tabulka where id='$id'"); 
$row = mysql_fetch_array($result);
check_obsah('0', 'V tabulke sa nenachadza nic' );
$klub = $row['klub'];
$body = $row['zapasy'];
mysql_Close(); 
?>
Skus ci ti to pojde
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

hmm chyby uz nevypisuje, ale vypise:"V tabulke sa nenachadza nic"

lenze mam tam presne tu istu tabulku ako na inom serveri na ktorom to funguje, aj udaje na db su spravne takze neviem. Ale nevadi ziframujem to teda, aj tak dik chalani
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

fruxo napísal:Ahoj,
(V dokumentacii php je napisane ze je vykonnejsia alternativa mysql_result je mysql_fetch_array, mysql_fetch_object...)
cize ako prve hned by som spravil to ze miesto mysql_result by som nahradil mysql_fetch_array [mozes aj mysql_fetch_object]...
Ked chceš s tabuľky len jeden riadok, tak je to v podstate jedno (ale aj ja by som radšej použil ten spôsob, čo odporúčaš).
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

Tie funkcie si mozes dat osobitne a potom includovat ... skus tento kod upravil som vsetky mysql poziadavky... mal si ich dost blbo zapisane :)

Kód: Vybrať všetko

<? 
// Funkcia pre overenie ci sa nieco nachadza v tabulke... 
function mysql_start($host, $login, $heslo, $databaza)
{
mysql_connect($host, $login, $heslo) or die("Chyba pri pripojení na MySQL " . mysql_error());
mysql_select_db($databaza) or die("Chyba pri vyberaní databázy: ". mysql_error()); 
}

function check_obsah($level, $message) 
{ 
global $result; 
if (mysql_fetch_row($result) == "FALSE" || mysql_num_rows($result) == 0) 
{ 
if ($level == "0") 
{ 
echo $message; 
} 
if ($level == "1") 
{ 
die ($message); 
} 
} 
} 

$id = $_GET['id'];
mysql_start('host', 'login', 'heslo', 'databaza');
$result = mysql_query("SELECT * FROM tabulka WHERE id='$id'"); 
$row = mysql_fetch_array($result); 
check_obsah('0', 'V tabulke sa nenachadza nic' ); 
$klub = $row['klub']; 
$body = $row['zapasy']; 
mysql_close();
?>
chrono napísal:Ked chceš s tabuľky len jeden riadok, tak je to v podstate jedno (ale aj ja by som radšej použil ten spôsob, čo odporúčaš).
nj :), btw "Ked chceš Z tabuľky"
_johny_
Amateur
Amateur
Príspevky: 17
Registrovaný: 03 apr 2007, 17:46

Príspevok od používateľa _johny_ »

super, ide to diky moc fruxo :)
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

fruxo: nechutnejsiu funkciu som uz davno nevidel
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

mastermind napísal:fruxo: nechutnejsiu funkciu som uz davno nevidel
ktoru mas na mysli ? tu s tym overenim ci sa nieco nachadza v tabulke ?
_johny_ napísal:super, ide to diky moc fruxo :)
nz, rad pomozem aj nabuduce
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

fruxo napísal:

Kód: Vybrať všetko

<? 
function check_obsah($level, $message) 
{ 
global $result;
if (mysql_fetch_row($result) == "FALSE" || mysql_num_rows($result) == 0) 
{ 
if ($level == "0") 
{ 
echo $message; 
} 
if ($level == "1") 
{ 
die ($message); 
} 
} 
} 

$id = $_GET['id'];
mysql_start('host', 'login', 'heslo', 'databaza');
$result = mysql_query("SELECT * FROM tabulka WHERE id='$id'"); 
$row = mysql_fetch_array($result); 
check_obsah('0', 'V tabulke sa nenachadza nic' ); 
$klub = $row['klub']; 
$body = $row['zapasy']; 
mysql_close();
?>
takze budem postupne pisat co sa mi nepaci

Kód: Vybrať všetko

global $result;
toto je pre kristove rany co? preco si tam $result poslal ako globalnu premennu? preco si to neposlal ako parameter? funkcia je uplne nepouzitelna v prikaze ze MysqlResult nie je v premennej s nazvom $result

Kód: Vybrať všetko

if (mysql_fetch_row($result) == "FALSE" || mysql_num_rows($result) == 0) 
tato podmienka je uplny nonsens. mysql_fetch_row ti posunie pointer na dalsi riadok a teda tato funkcia je nepouzitelna v pripade ze vysledok obsahuje viac ako jeden riadok. Nehovoriac o tom ze mysql_fetch_row vracia false a nie "FALSE"
druha cast tejto podmienky je nestastna pretoze, ak obsahuje vysledok viacero riadokov, tato podmienka bude stale true a teda funkcia sa nemoze pouzit v zmysle hasNext()

vobec nevidim vyznam tejto funkcie.
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

ano ujo mastermind :aasmile1:
idem to hned upravit

Kód: Vybrať všetko

<? 
// Funkcia pre pripojenie do mysql
function mysql_start($host, $login, $heslo, $databaza) 
{ 
mysql_connect($host, $login, $heslo) or die("Chyba pri pripojení na MySQL " . mysql_error()); 
mysql_select_db($databaza) or die("Chyba pri vyberaní databázy: ". mysql_error()); 
} 

function check_obsah($level, $message) 
{ 
global $result; 
if (mysql_num_rows($result) == 0) 
{ 
if ($level == "0") 
{ 
echo $message; 
} 
if ($level == "1") 
{ 
die ($message); 
} 
} 
} 

$id = $_GET['id']; 
mysql_start('host', 'login', 'heslo', 'databaza'); 
$result = mysql_query("SELECT * FROM tabulka WHERE id='$id'"); 
$row = mysql_fetch_array($result); 
check_obsah('0', 'V tabulke sa nenachadza nic' ); 
$klub = $row['klub']; 
$body = $row['zapasy']; 
mysql_close(); 
?>
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

toto je opravene? :shock:
Napísať odpoveď