Avatar billede supermand69 Nybegynder
20. august 2004 - 14:16 Der er 25 kommentarer og
1 løsning

fejl i funktion

Jeg får fejl når jeg prøver at hente noget fra min query... Men hvis jeg flytter det hele udenfor min funktion er der ikke noget galt?!

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql);
   
    while($row = mysql_fetch_array($get)) echo $row['id'].'<br>';
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);
Avatar billede dennismp Nybegynder
20. august 2004 - 14:20 #1
$DB er ikke defineret inde i din funktion. Overfør den som parameter eller brug
GLOBAL $DB;
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:25 #2
jamen sql er jo ikke defineret i min funktion men udenfor... den er med...

hvis jeg flytter alt inde i min funktion udenfor virker det fint??
Avatar billede jakoba Nybegynder
20. august 2004 - 14:27 #3
når du bruger en variabel indeni en funktion leder php kun indeni den funktion, og hvis den ikke finder variabelen der opretter php en ny variabel der KUN findes indeni funktionen. Hvis du ønsker at bruge en variabel der er defineret udenfor må du enten sende den med som parameter, eller også erklære den global indeni funktionen.

Din funktion indeholder ikke nogen return sætning, hvad forventer du den skal returnere til $list_arr.
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:30 #4
det var også bare et udsnit af min kode jeg skrev...

her er det hele, men det virker stadig ikke...

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql);
   
    while($row = mysql_fetch_array($get)) echo $row['id'].'<br>';
   
    $num_rows = mysql_num_rows($get);
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $get = mysql_query("$sql LIMIT $limit, $limit2")or die(mysql_error());
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);
Avatar billede jakoba Nybegynder
20. august 2004 - 14:30 #5
er du sikker på at $sql stadig indeholder den samme strengværdi der hvor du kalder funktionen?
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:31 #6
ups.. sådan her..

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql);
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $num_rows = mysql_num_rows($get);
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $get = mysql_query("$sql LIMIT $limit, $limit2")or die(mysql_error());
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:33 #7
ja, for det står som det står her...

det er det eneste jeg har på siden... jeg kan bare ikke forstå det, for hvis jeg flytter min query udenfor min funktion er der ingen problemer??
Avatar billede jakoba Nybegynder
20. august 2004 - 14:34 #8
prøver du at benytte  $var_arr, $cur_page og $num_page  udenfor funktionen? de eksisterer kun indeni de og bliver glemt såsnart den er kørt færdig.
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:38 #9
jamen jeg får jo en fejl i min query så den når slet ikke så langt... men jeg smider jo også alle de variabler jeg skal bruge i arrayet $var_arr og returner den
Avatar billede jakoba Nybegynder
20. august 2004 - 14:43 #10
Hvis du får fejl i din query undrer det mig at du ikke har fortal hvad den fejlmelding præcist siger :-)

men prøv en debuglinie:

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
 
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
 
    $get = mysql_query($sql);
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
 
    $num_rows = mysql_num_rows($get);
 
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;

    $ny_sql = "$sql LIMIT $limit, $limit2";  // så den kan blive udskrevet ved fejl
 
    $get = mysql_query($ny_sql)or die(mysql_error()."<br>$ny_sql<br>");
              // DEBUG LINIE fortæller os HVAD den kløjs i.

    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
 
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
 
    return $var_arr;
}
Avatar billede supermand69 Nybegynder
20. august 2004 - 14:45 #11
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in s:\http\_www\avansis.dk\_clark\temp\test.php on line 25

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in s:\http\_www\avansis.dk\_clark\temp\test.php on line 27

hvis jeg laver min query udenfor funktionen som vist nedenunder udskriver den fint hvert id?? fatter ikke hvad der er galt??

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

$get = mysql_query($sql);
while($row = mysql_fetch_array($get)) echo $row['id'].'<br>';

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql);
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $num_rows = mysql_num_rows($get);
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $get = mysql_query("$sql LIMIT $limit, $limit2");
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);
Avatar billede erikjacobsen Ekspert
20. august 2004 - 15:15 #12
Husk altid noget i retning af:

  $get = mysql_query($sql) or die(mysql_error());

ellers ved du ikke hvad du leder efter.
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:01 #13
ja ved det godt :) har prøvet - men får ikke en mere specifik fejlmelding af den grund??

jeg kan virkelig ikke fatte hvorfor det her ikke virker?? :(

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql)or die(mysql_error());
    $num_rows = mysql_num_rows($get)or die(mysql_error());
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $get = mysql_query("$sql LIMIT $limit, $limit2")or die(mysql_error());
    while($row = mysql_fetch_array($get)or die(mysql_error())) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);

får stadig kun:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in s:\http\_www\avansis.dk\_clark\temp\test.php on line 22
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:03 #14
btw. min fejl ligger i denne linje?

$num_rows = mysql_num_rows($get)or die(mysql_error());
Avatar billede jakoba Nybegynder
20. august 2004 - 17:12 #15
det ved vi godt. derfor foreslog jeg dig at udskifte den linie med:

    $ny_sql = "$sql LIMIT $limit, $limit2";  // så den kan blive udskrevet ved fejl

    $get = mysql_query($ny_sql)or die(mysql_error()."<br>$ny_sql<br>");
              // DEBUG LINIE fortæller os HVAD den kløjs i.

det vil give dig en fejlmelding du (og vi) kan bruge til noget.
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:19 #16
får stadig kun den samme fejl? :(

$sql = "SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM $DB.$table debate
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";

function view_list($sql, $where, $order, $limit, $limit2)
{
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql)or die(mysql_error());
    $num_rows = mysql_num_rows($get);
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $ny_sql = "$sql LIMIT $limit, $limit2";  // så den kan blive udskrevet ved fejl
    $get = mysql_query($ny_sql)or die(mysql_error()."<br>$ny_sql<br>");
   
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);
Avatar billede jakoba Nybegynder
20. august 2004 - 17:20 #17
Ups. nej. Det var ukorrekt.
linien:
  $num_rows = mysql_num_rows($get)or die(mysql_error());
vil gå galt hvis der ikke bliver fundet nogen rækker der passer (0 ses som false og så bliver die-funktionen udført.

der skal ikke  'or die(...)'  efter funktionen  'mysql_num_rows'

Så lad os finde ud af hvad det er for en SQL kommando der ikke finder noget:

    $get = mysql_query($sql)or die(mysql_error());
    echo "din sql kommando er:<br>$sql<br>";  //DEBUG LINIE
    $num_rows = mysql_num_rows($get);
    echo "Der blev fundet $num_rows rækker";
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:22 #18
function view_list($sql, $where, $order, $limit, $limit2)
{
    $get = mysql_query($sql)or die(mysql_error());
    echo "din sql kommando er:<br>$sql<br>";  //DEBUG LINIE
    $num_rows = mysql_num_rows($get);
    echo "Der blev fundet $num_rows rækker";
   
    exit;
   
    if(!$limit) $limit = 0;
   
    if($where) // $where = "WHERE $where";
    if($order) // $order = "ORDER BY $order";
   
    $get = mysql_query($sql)or die(mysql_error());
    $num_rows = mysql_num_rows($get);
   
    $num_page = ceil($num_rows / $limit2);
    $cur_page = ceil($limit / $limit2);
    $cur_page++;
   
    $get = mysql_query("$sql LIMIT $limit, $limit2")or die(mysql_error());
    while($row = mysql_fetch_array($get)) $rows[] = $row['id'];
   
    $var_arr['num_page'] = $num_page;
    $var_arr['cur_page'] = $cur_page;
    $var_arr['rows'] = $rows;
   
    return $var_arr;
}

$list_arr = view_list($sql, 0, 0, $_GET['limit'], 3);

fejl:
din sql kommando er:
SELECT debate.id, IFNULL(MAX(debate2.time), debate.time) AS last_time FROM elektrobeatdk.debate_generelt debate LEFT JOIN elektrobeatdk.debate_generelt debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0 WHERE debate.reply_id=0 GROUP BY debate.thread_id ORDER BY last_time DESC
Der blev fundet 6 rækker
Avatar billede jakoba Nybegynder
20. august 2004 - 17:26 #19
det er ikke fejl, det er information. og det ser ud til at gå som det skal,

nu kommer der nok noget fejl senere. Hvad ?
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:26 #20
hvis jeg sletter disse 2 linjer virker det åbenbart???

if($where) // $where = "WHERE $where";
if($order) // $order = "ORDER BY $order";

kan egentlig ikke lige se hvordan de skulle lave rav i den?? :-/
Avatar billede jakoba Nybegynder
20. august 2004 - 17:30 #21
der er allerede en WHERE og en ORDER BY i din $sql variabel. hvis du tilføjer en ekstra bliver det en ulovlig sql kommando.
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:35 #22
jo, men jeg har jo esaped dem... desunden bliver $where og $order jo slet ikke brugt nogle steder...

jeg havde bare escaped dem, da de skulle bruges senere :)

men lav et svar... hehe
Avatar billede xyborx Nybegynder
20. august 2004 - 17:36 #23
Det er fordi de to if sætninger gør at mysql_query() kun køres hvis $where og $order validerer som true. Hvis de ikke gør det, så køres mysql_query ikke, og så får du "supplied argument is not a valid MySQL result resource" når du forsøger at bruge resultatet.
Avatar billede supermand69 Nybegynder
20. august 2004 - 17:37 #24
xyborx > nårh ja.. klart... *doooh* :)
Avatar billede supermand69 Nybegynder
24. august 2004 - 11:35 #25
jakoba > vil du ikke have points?
Avatar billede supermand69 Nybegynder
31. august 2004 - 21:56 #26
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester