Avatar billede JJ77 Juniormester
10. marts 2006 - 16:28 Der er 5 kommentarer og
2 løsninger

Paging og søgefunktion virker ikke m. php ver.5

Nedenstående kode virkede super før jeg skiftede til php ver.5. Nogen som ved hvad der kan være galt :(


<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../NewFiles/CSS/styleAnnoncesider.css">
</head>

<body>
<div align="center">
    <form action="salgsannoncerBaerbare.php" method="GET">
                <div align="left">
                        <table border="0" cellspacing="5" cellpadding="0" height="42">
                        <tr height="37">
                            <td height="37"><span class="lille">Søgeord:</span><br>
                    <div align="left">
                        <input type="text" name="search" size="20"> </div>
                </td>
                        <td height="37"><span class="lille">Kategori:</span><br>
                            <select name="selectKategori" size="1">
                                <option value="">Alle kategorier</option>
                                <option value="Packard bell">Packard bell</option>
                                <option value="Toshiba">Toshiba</option>
                                <option value="Fujitsu Siemens">Fujitsu Siemens</option>
                            </select></td>
                           
                        <td height="37"><span class="lille">Omr&aring;de:</span><br>
                    <select name="selectName" size="1">
                        <option value="0000-9990">Hele Danmark</option>
                            <option value="0">-------------------------------</option>
                            <option value="0800-2990">Storkøbenhavn</option>
                            <option value="8000-8210">Århus</option>
                            <option value="5000-5270">Odense</option>
                            <option value="9000-9220">Aalborg</option>
                            <option value="0">-------------------------------</option>
                            <option value="0800-4990">Sjælland & øerne</option>
                            <option value="3000-3670">Nordsjælland</option>
                            <option value="4000-4990">Midt og Sydsjælland</option>
                            <option value="0">-------------------------------</option>
                            <option value="3700-3790">Bornholm</option>
                            <option value="0">-------------------------------</option>
                            <option value="5000-5985">Fyn</option>
                            <option value="0">-------------------------------</option>
                            <option value="6000-9990">Jylland</option>
                            <option value="9000-9990">Nordjylland</option>
                            <option value="7000-8990">Midt og Vestjylland</option>
                            <option value="6000-6990">Sønderjylland</option>
                    </select>&nbsp;<input type="submit" name="submit" value="Søg"></td>
            </tr>
                    </table>
                </div>
            </form>
        </div>

<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#658091">
            <tr>
                <td><span class="mini">&nbsp;</span></td>
            </tr>
        </table>
<table width="560" border="0" cellspacing="5" cellpadding="0" bgcolor="#FFFFFF">
<tr>
        <td width="360" valign="top"><span class="mellem1">Annonce</span></td>
        <td width="70" align="center" valign="top"><span class="mellem1">Pris</span></td>
        <td width="130" align="center" valign="top"><span class="mellem1">Område</span></td>
</tr>
</table>
<table width="560" border="0" cellspacing="0" cellpadding="0"bgcolor="#658091">
            <tr>
                <td><span class="mini">&nbsp;</span></td>
            </tr>
        </table>

<?PHP
require("../members/common.php");

//  Funktion, der "klipper" en tekst over på det mest hensigtsmæssige sted (".", " ", )
// str klip(str tekst, int længde, int tolerance)

function klip($tekst, $laengde = 130, $tolerance = 10) // $laengde og $tolerance kan udelades
{
    $punktum  = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), "."); // position af punktum
    $mellemrum = strpos(substr($tekst, $laengde-$tolerance, 2*$tolerance), " "); // position af mellemrum
    $mere      = "..."; // punktummer hvis mere tekst

    if (strlen($tekst) <= $laengde + $tolerance) {
        $slut_pos = strlen($tekst); // slutposition = slut på tekst, da denne er kortere end $laengde og $tolerance
        $mere = ""; // ikke andet
    } elseif ($punktum !== false) {
        $slut_pos = $laengde-$tolerance+$punktum; // slutposition = punktum
    } elseif ($mellemrum !== false) {
        $slut_pos = $laengde-$tolerance+$mellemrum; // slutposition = mellemrum
    } else {
        $slut_pos = $laengde; // slutposition $laengde (ikke noget at gøre - skær ord over)
    }

    return substr($tekst, 0, $slut_pos) . $mere; // udskriv del + evt. punktummer
}

echo "<table border=\"0\" cellspacing=\"5\" cellpadding=\"0\"><tr><td>";

$pr_side = "20"; //Definerer antal resultater pr. side

if (!isset($s))
{
    $s = "0"; //Tjekker om $s - som står for start - er sat, hvis ikke sættes den
}

if(!isset($_GET['selectName']) || $_GET['selectName']=="") {
    $g_total = mysql_query("select count(id) as total from salgAfProdukt WHERE produkt LIKE '%".$_GET['search']."%'") or die(mysql_error());
} else {
    $g_total = mysql_query("select count(id) as total from salgAfProdukt WHERE produkt LIKE '%".$_GET['search']."%' AND salgAfProdukt.postNr BETWEEN LEFT('".$selectName."',4) AND RIGHT('".$selectName."',4) AND kategori LIKE '%".$_GET['selectKategori']."%'") or die(mysql_error());
}
$total = mysql_result($g_total,0);
if($total>$pr_side)
{
if ($total > $s+5){
##
#Find ud af om derskal være et Forrige link
##
if ($s >= $pr_side) { //Tjekker om værdien af $s er større eller lig $pr_side
    $previous_s = $s-$pr_side; //Regner ud hvor mysql skal starte hvis forrige side kaldes
    echo "<a href='?s=$previous_s'><font color=\"#4682B4\">Forrige</font></a> "; //Udskriver linket
}

##
#Find ud af hvis/hvor mange sider der er rows til
##
$page = 1; //Definerer hvor sidetal skal starte
for($start=0; $total > $start; $start=$start+$pr_side){ //For-løkke der kører indtil der ikke er nok rows til en side mere
    if ($start != $s) { //Tjekker om linket vil komme til at pege på den side man er på
        echo "<a href='?s=$start&search=$_GET[search]&selectName=$_GET[selectName]'><font color=\"#4682B4\">$page</font></a> "; //...hvis ikke, udskrives link med værdien af $page
    } else { //Ellers, dvs. hvis linket vil pege på den side man er på..
        echo "<font color=\"#000000\">$page </font>"; //...udskrives værdien af $page bare, altså ikke som link
    }
    $page++; //Lægger en til $page til næste gang løkken køres
}

##
#Find ud af om der skal være et næste link
##
if ($total > $s+$pr_side) { //Tjekker om der er flere sider
    $next_s = $s+$pr_side; //Regner ud hvor mysql skal starte hvis næste side kaldes
    echo "<a href='?s=$next_s&search=$_GET[search]&selectName=$_GET[selectName]'><font color=\"#4682B4\">Næste</font></a>"; //Udskriver linket "næste"
}
}
}
echo "</tr></td></table>";
  echo "  <table width=\"560\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"bgcolor=\"#CAD9EA\">
            <tr>
                    <td><span class=\"mini\">&nbsp;</span></td>
                </tr>
        </table>";

if (!isset($_GET['selectName']) || trim($_GET['selectName']) == "")
{
    $sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE produkt LIKE '%" . $_GET['search'] . "%' ORDER BY id DESC LIMIT $s, $pr_side";
}
else
{
    $sql = "SELECT * FROM salgAfProdukt LEFT JOIN postnr ON salgAfProdukt.postNr = postnr.postnr WHERE produkt LIKE '%" . $_GET['search'] . "%' AND salgAfProdukt.postNr BETWEEN LEFT('" . $selectName . "', 4) AND RIGHT('".$selectName."', 4) AND kategori LIKE '%" . $_GET['selectKategori'] . "%' ORDER BY id DESC LIMIT $s, $pr_side";
}

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

while ($row = mysql_fetch_array($query))
{
    $sql2 = "SELECT count(*) AS antalBilleder FROM billeder_salgAfProdukt WHERE artikelid=" . $row["Id"];
    $query2 = mysql_query($sql2) or die(mysq_error());
    $row2 = mysql_fetch_assoc($query2);
   
echo "

    <table width='560' border='0' cellspacing='5' cellpadding='0' bgcolor='#FFFFFF'>
    <tr>
    <td width='370' valign='top'><span class='mellem'><a href='visSalgsannoncer.php?id=$row[Id]' target='vs'>$row[produkt]</a></span> <br><span class='lille'>".klip($row['supplerendeTekst'])."</span></td>

";
   
echo"<td width='25'>";

if ($row2["antalBilleder"] > 0) echo "<img src='../NewFiles/kamera.gif' height=\"21\" width=\"23\">";
   
echo "</td>";
echo "
   
    <td width='70' align='center' valign='top'><span class='lilleS'>" . $row['pris'] . ",-</span></td>
    <td width='95' align='center' valign='top'><span class='lilleS'>" . $row['bynavn'] . "</span></td></tr></table>

    <table width='560' border='0' cellspacing='0' cellpadding='0'bgcolor='#CAD9EA'>
    <tr>
    <td><span class='mini'>&nbsp;</span></td>
    </tr>
    </table>
";
}

echo "<table border='0' cellspacing='5' cellpadding='0'><tr><td>";

$total = mysql_result($g_total,0);
if ($total > $pr_side)
{
    ##
    #Find ud af om der skal være et Forrige link
    ##
    if ($s >= $pr_side)
    {
        // Tjekker om værdien af $s er større eller lig $pr_side
        $previous_s = $s-$pr_side;  //Regner ud hvor mysql skal starte hvis forrige side kaldes
        echo "<a href='?s=$previous_s&search=$_GET[search]&selectName=$_GET[selectName]'><font color='#4682B4'>Forrige</font></a> ";  // Udskriver linket
    }

    ##
    #Find ud af hvis/hvor mange sider der er rows til
    ##
    $page = 1;  // Definerer hvor sidetal skal starte
    for ($start = 0; $total > $start; $start += $pr_side)
    {
        // For-løkke der kører indtil der ikke er nok rows til en side mere
        if ($start != $s)
        {
            // Tjekker om linket vil komme til at pege på den side man er på
            echo "<a href='?s=$start&search=$_GET[search]&selectName=$_GET[selectName]'><font color='#4682B4'>$page</font></a> ";  //...hvis ikke, udskrives link med værdien af $page
        }
        else
        {
            // Ellers, dvs. hvis linket vil pege på den side man er på..
            echo "<font color='#000000'>$page </font>";  // ...udskrives værdien af $page bare, altså ikke som link
        }
        $page++; //Lægger en til $page til næste gang løkken køres
    }

    ##
    #Find ud af om der skal være et næste link
    ##
    if ($total > $s+$pr_side)
    {
        // Tjekker om der er flere sider
        $next_s = $s + $pr_side;  // Regner ud hvor mysql skal starte hvis næste side kaldes
        echo "<a href='?s=$next_s&search=$_GET[search]&selectName=$_GET[selectName]'><font color='#4682B4'>Næste</font></a>";  // Udskriver linket "næste"
    }
}

echo "</tr></td></table>";
?>
</body>
Avatar billede JJ77 Juniormester
10. marts 2006 - 16:34 #1
har nu fået det til at virke.. skulle slå "Register globals" til.. men er det nu også smart.. og hvordan kan jeg eventuelt undgå dette?
Avatar billede udvikler Nybegynder
10. marts 2006 - 16:47 #2
Der er jo den rigtig gode artikel her på E: http://www.eksperten.dk/artikler/57
Har selv læst den og den er virkelig god!

God læselyst! :-)
Avatar billede JJ77 Juniormester
10. marts 2006 - 17:23 #3
det var sq en ok artikel.. men hvis jeg så skulle få ovenstående side til at virke med globals=off... skal jeg så finde alle variabler på siden, og skrive dem øverst så den kan huske dem, eller hva? for det er jo en søgefunktion og noget paging som ikke virker mere.
Avatar billede JJ77 Juniormester
10. marts 2006 - 17:25 #4
og hvad er det jeg risikerer ved at beholde globals til on? er det ikke bare meget nemmere at beholde det?
Avatar billede udvikler Nybegynder
10. marts 2006 - 17:47 #5
Nej det giver sikkerhedsbrister - dit system bliver lettere at hacke.

I bund og grund skal du ændre alle variabler hvor du skriver $navn og ændre dem til $_GET['navn'] eller $_POST['navn'] alt efter hvad du har benyttet.
Avatar billede JJ77 Juniormester
11. marts 2006 - 12:40 #6
Jeg har opstillet nogle eksempler fra min kode.. gider du ikke lige hjælpe med hvordan de skal se ud, bare så jeg ikke dummer mig :)..og er det det eneste som skal gøres før det virker?

$row['pris'] .
...FROM billeder_salgAfProdukt WHERE artikelid=" . $row["Id"];
...BY id DESC LIMIT $s, $pr_side";
if (strlen($tekst)
Avatar billede JJ77 Juniormester
20. marts 2006 - 11:13 #7
hmm. så snupper jeg altså halvdelen selv.. så er 200 lige i overkanten;)
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