webForumDet fria alternativet

Undefined index

15 svar · 489 visningar · startad av tanten

tantenMedlem sedan nov. 20051 596 inlägg
#1
function MySQLPagedResultSet($query,$pageSize,$cnx)
  {
    $resultpage = $_GET['resultpage'];  <--- här
    
    $this->results = @mysql_query($query,$cnx);
    $this->pageSize = $pageSize;
    if ((int)$resultpage <= 0) $resultpage = 1;
    if ($resultpage > $this->getNumPages())
      $resultpage = $this->getNumPages();
    $this->setPageNum($resultpage);
  }

Jag får Undefined index: för den markerade raden?
Någon som kan tala om varför? :)

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Finns det någon del &resultpage=N i adressfältet? Du kan vilja använda isset() för att kontrollera huruvida GET-variabeln är satt:

function MySQLPagedResultSet($query,$pageSize,$cnx) 
  {
    if (isset($_GET['resultpage'])){
      $resultpage = $_GET['resultpage'];  <--- här 
       
      $this->results = @mysql_query($query,$cnx); 
      $this->pageSize = $pageSize; 
      if ((int)$resultpage <= 0) $resultpage = 1; 
      if ($resultpage > $this->getNumPages()) 
        $resultpage = $this->getNumPages(); 
      $this->setPageNum($resultpage);
    }
  }

En annan kontroll du troligtvis också vill göra, är att värdet är numeriskt.

fiddlerMedlem sedan juli 20023 617 inlägg
#3

Testa att sätta "global $_GET" längst upp i funktionen.

tantenMedlem sedan nov. 20051 596 inlägg
#4

fiddler skrev:

Testa att sätta "global $_GET" längst upp i funktionen.

Då försvann indexfelet, men i stället kom http://sorken.se/resultpage.phpsom är samma rad som förut var 13.

Peter S. Nej det syns inget i adressfältet... funktionerna ligger i en egenfil, det finns en del fel på sidan som anropar funktionerna också, som jag tänkte jag skulle se om de fanns kvar när funktionerna fungerar...

aasahMedlem sedan mars 20034 471 inlägg
#5

fiddler skrev:

Testa att sätta "global $_GET" längst upp i funktionen.

Gör ingen nytta. "$_arrayerna" är superglobala och syns inne i funktioner också direkt.

tanten:
Börja med att ta bort global-raden.

$_GET fångar värden som skickas med URL:n. Om din sida heter http://sorken.se/resultpage.php så finns inget värde att hitta. Om din url däremot vore:
http://sorken.se/resultpage.php?resultpage=5
så skulle $_GET['resultpage'] ha ett värde, nämligen 5.

Hur kommer du till sidan? Och vad är det meningen att resultpage ska vara? Hur försöker du sätta ett värde?

tantenMedlem sedan nov. 20051 596 inlägg
#6

Så tog jag bort den och är tillbaka till 0 igen... :(

Såg inte ditt redigerade svar, återkommer :-)

Peter SMedlem sedan dec. 20025 483 inlägg
#7

tanten skrev:

Då försvann indexfelet, men i stället kom http://sorken.se/resultpage.phpsom är samma rad som förut var 13.

Peter S. Nej det syns inget i adressfältet... funktionerna ligger i en egenfil, det finns en del fel på sidan som anropar funktionerna också, som jag tänkte jag skulle se om de fanns kvar när funktionerna fungerar...

Eftersom $_GET innehåller värden från frågesträngen i adressfältet, bör det alltså finnas en del &pageresult=N i adressfältet för att din funktion skall fungera.

aasahMedlem sedan mars 20034 471 inlägg
#8

tanten, mitt svar ovan är redigerat, läs om det!

tantenMedlem sedan nov. 20051 596 inlägg
#9

Det blir bara fel... Är ju en sån liten fil och nog sjutton ska jag göra fel... :r

<?php
require('pagedresults.php');
error_reporting(E_ALL);
$cnx = @mysql_connect('localhost','xxx','xxxx');
mysql_select_db('xxxx',$cnx);

$rs = new MySQLPagedResultSet("select * from smultron where finnsi=$finnsi", 5,$cnx);
?>
<html>
<head>
<title>Paged Results Demo</title>
</head>
<body>
<table>
<?php while ($row = $rs->fetchArray()): ?>
<tr><td><?=$row['namn']?></td><td><?=$row['besk']?></td></tr>
<?php endwhile; ?>
</table>
<p><?=$rs->getPageNav("finnsi=$finnsi")?></p>
</body>
</html>

Hör hur ni suckar...
Jag med...

tantenMedlem sedan nov. 20051 596 inlägg
#10

Skulle väl ha skickat med hela classen också...

<?php

class MySQLPagedResultSet
{

  var $results;
  var $pageSize;
  var $page;
  var $row;
  
  function MySQLPagedResultSet($query,$pageSize,$cnx)
  {
	$resultpage = $_GET['resultpage'];
    
    $this->results = @mysql_query($query,$cnx);
    $this->pageSize = $pageSize;
    if ((int)$resultpage <= 0) $resultpage = 1;
    if ($resultpage > $this->getNumPages())
      $resultpage = $this->getNumPages();
    $this->setPageNum($resultpage);
  }
  
  function getNumPages()
  {
    if (!$this->results) return FALSE;
    
    return ceil(mysql_num_rows($this->results) /
                (float)$this->pageSize);
  }
  
  function setPageNum($pageNum)
  {
    if ($pageNum > $this->getNumPages() or
        $pageNum <= 0) return FALSE;
  
    $this->page = $pageNum;
    $this->row = 0;
    mysql_data_seek($this->results,($pageNum-1) * $this->pageSize);
  }
  
  function getPageNum()
  {
    return $this->page;
  }
  
  function isLastPage()
  {
    return ($this->page >= $this->getNumPages());
  }
  
  function isFirstPage()
  {
    return ($this->page <= 1);
  }
  
  function fetchArray()
  {
    if (!$this->results) return FALSE;
    if ($this->row >= $this->pageSize) return FALSE;
    $this->row++;
    return mysql_fetch_array($this->results);
  }
  
  function getPageNav($queryvars = '')
  {
    $nav = '';
    if (!$this->isFirstPage())
    {
      $nav .= "<a href=\"?resultpage=".
              ($this->getPageNum()-1).'&'.$queryvars.'">Prev</a> ';
    }
    if ($this->getNumPages() > 1)
      for ($i=1; $i<=$this->getNumPages(); $i++)
      {
        if ($i==$this->page)
          $nav .= "$i ";
        else
          $nav .= "<a href=\"?resultpage={$i}&".
                  $queryvars."\">{$i}</a> ";
      }
    if (!$this->isLastPage())
    {
      $nav .= "<a href=\"?resultpage=".
              ($this->getPageNum()+1).'&'.$queryvars.'">Next</a> ';
    }
    
    return $nav;
  }
}

?>
aasahMedlem sedan mars 20034 471 inlägg
#11

...

aasahMedlem sedan mars 20034 471 inlägg
#12

Att detta inte funkar

function MySQLPagedResultSet($query,$pageSize,$cnx)
  {
    $resultpage = $_GET['resultpage'];  <--- här
    
    $this->results = @mysql_query($query,$cnx);
    $this->pageSize = $pageSize;
    if ((int)$resultpage <= 0) $resultpage = 1;
    if ($resultpage > $this->getNumPages())
      $resultpage = $this->getNumPages();
    $this->setPageNum($resultpage);
  }

beror på tidigare angivna fel. Den fungerar bara om det finns ett värde på resultpage i sidans URL.

tantenMedlem sedan nov. 20051 596 inlägg
#13

Men vad är det då denna ska göra, är det inte vad jag trott? Skapa en url till adressfältet.
<?=$rs->getPageNav("finnsi=$finnsi")?>

aasahMedlem sedan mars 20034 471 inlägg
#14

Ett skript körs uppifrån och ner. Oavsett vad getPageNav gör, så ligger det åtskilliga rader längre ner än där felet uppstår. Alltså kommer skriptet aldrig så långt.

tantenMedlem sedan nov. 20051 596 inlägg
#15

Ja någonting är i alla fall tok... :-) Har läst tutorialen uppifrån och ner nu hela dagen utan att se vad jag missar. Funderade ett tag på om det var gjort för php5, men det är ju ett tag sedan den skrevs så det kan väl inte vara fallet.
Tycker att mitt sista försök nästan är identiskt med http://www.sitepoint.com/article/php-paging-result-sets/5
och det var metoden jag ville prova att lära mig... så om det inte fungerar, vilket ju tycks vara fallet så får det bli paging på vanliga sättet, vid behov :-)
Men men... någonting lärde jag mig under tiden. :-)

tantenMedlem sedan nov. 20051 596 inlägg
#16

Överger den här metoden nu och markerar den som löst fast den är Olöst så ingen kopierar klassen eller använder den tutorial som jag gjorde. :)
Tack allihopa för era svar!

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)