[PHP + Interbase] zoeken > resultaten tonen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een scriptje wat voor mysql was bedoeld wat aangepast aan interbase.
Het werkt alleen nog niet helemaal goed want als ik de manier zoals hieronder doe,
word het else gedeelte niet gebruikt wanneer er geen resultaat gevonden is.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<? 
    //-- natuurlijk moet er eerst een connectie met de database worden gemaakt: 
    $conn= ibase_connect("localhost:d:\ibase_database\knowledgebase.gdb", "usern", "passw") or die;
    $lt="<font face='Verdana, Arial, Helvetica, sans-serif' size=1>";

    //-- $HTTP_POST_VARS[zoekterm] is de naam van het zoekveld in het formulier wat we 
    //-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
    
    $sql = "SELECT faq_nr, faq_id, faq_tekst1oplossing, faq_tekst2oplossing, faq_tekst3oplossing ,faq_tekst4oplossing, faq_datum, wn_gebruikersnaam
    FROM faq F, werknemers W
    WHERE w.wn_id = F.wn_id
    AND (faq_tekst1oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst2oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst3oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst4oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%')"; 

    //-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen 
    //-- kijken of er een resultaat is 
    $res = ibase_query($sql); 
     
    //-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet 
    if (ibase_num_fields($res) >= 1) 
    { 
        //-- er is een resultaat gevonden, toon de resultaten via een while () loop 
        while ($row = get_object_vars(ibase_fetch_object($res)))
        {
        
        $plaktext = "$row[FAQ_TEKST1OPLOSSING]$row[FAQ_TEKST2OPLOSSING]$row[FAQ_TEKST3OPLOSSING]$row[FAQ_TEKST4OPLOSSING]";
        $plaktext2 = wordwrap(trim($plaktext), 50, "\n", 1);
                
        // tekst van vraag aanelkaar plakken
        $plaktext3 = htmlspecialchars(trim($plaktext2 ));
        
        // nieuwe regel beginnen als er een enter is
        $bericht= nl2br($plaktext3);
        
                echo "<table align=\"center\" bgcolor=\"#000000\" width=\"470\" cellpadding=\"3\" cellspacing=\"1\">";
                echo "<tr>";
                echo "<td bgcolor=\"#CFE0F3\">$lt Resultaat id: <b>$row[FAQ_ID]</b><br></td>";
                echo "</tr>";
                echo "<tr>";
                echo "<td bgcolor=\"#CFE0F3\">$lt Resultaat tekst:<br><b>$bericht</b></td>";
                echo "</tr>";
                echo "</table>";     
                }
        echo "<a href=\"zoek.php\" title=\"zoek opnieuw\">$lt zoek opnieuw</a>"; 
    } 
    //-- als er geen resultaat is gevonden, dus als het zoekwoord niet gevonden is: 
    else 
    { 
        echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoekterm]</b></p>"; 
         
        echo "<p><a href=\"zoek.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>"; 
    } 
?>


En als ik ibase_num_fields vervang door ibase_fetch_rows werkt het else gedeelte wel enzo... maar dan word het 1e resultaat niet getoond...

dus bijv ik heb 5 teksten met het woord test

dan komt er te staan :
test 2
test 3
test 4
test 5

maar test 1 blijft weg
Weet iemand hoe dit kan ?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

ibase_fetch_rows haalt een record op en op het moment dat je dat doet in je if ben je dus je eerste resultaat al voorbij.

[edit]

In de war.. ibase_num_fields haalt het aantal VELDEN op niet het aantal rows :) Deze zal dus altijd >= 1 zijn en daarom komt je else niet voorbij.

Ik zie op PHP.net geen ibase_num_rows() zoals mysql heeft. Je kunt uiteraard wel zelf een variabele mee laten lopen met je fetch. Als deze nog 0 is bijvoorbeeld na je while-loop dan had je blijkbaar geen resultaten.

PHP:
1
2
3
4
5
6
7
8
9
10
$num_rows = 0;

while ($row = ibase_fetch_object ($res)) {
    // doe spul
   $num_rows ++;
}

if ($num_rows == 0) {
   // Geen records gevonden
}


[edit2.5]
weer een wrapper get_object_vars() eromheen.. pfff.. wat een code...

[ Voor 102% gewijzigd door Bosmonster op 25-03-2004 14:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt! het werkt prima :) zo :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<? 
    //-- natuurlijk moet er eerst een connectie met de database worden gemaakt: 
    $conn= ibase_connect("localhost:d:\ibase_database\knowledgebase.gdb", "SYSDBA", "masterkey") or die;
    $lt="<font face='Verdana, Arial, Helvetica, sans-serif' size=1>";

    //-- $HTTP_POST_VARS[zoekterm] is de naam van het zoekveld in het formulier wat we 
    //-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
    
    $sql = "SELECT faq_nr, faq_id, faq_tekst1oplossing, faq_tekst2oplossing, faq_tekst3oplossing ,faq_tekst4oplossing, faq_datum, wn_gebruikersnaam
    FROM faq F, werknemers W
    WHERE w.wn_id = F.wn_id
    AND (faq_tekst1oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst2oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst3oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%' OR faq_tekst4oplossing LIKE '%$HTTP_POST_VARS[zoekterm]%')"; 

    //-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen 
    //-- kijken of er een resultaat is 
    $res = ibase_query($sql); 
     
    //-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet 
    if (ibase_num_fields($res) >= 1) 
    
    { 
        //-- er is een resultaat gevonden, toon de resultaten via een while () loop 
        $num_rows = 0;
        while ($row = get_object_vars(ibase_fetch_object($res))) {
        // doe spul 
        
        $plaktext = "$row[FAQ_TEKST1OPLOSSING]$row[FAQ_TEKST2OPLOSSING]$row[FAQ_TEKST3OPLOSSING]$row[FAQ_TEKST4OPLOSSING]";
        $plaktext2 = wordwrap(trim($plaktext), 50, "\n", 1);
                
        // tekst van vraag aanelkaar plakken
        $plaktext3 = htmlspecialchars(trim($plaktext2 ));
        
        // nieuwe regel beginnen als er een enter is
        $bericht= nl2br($plaktext3);
        $num_rows ++;
                echo "<table align=\"center\" bgcolor=\"#000000\" width=\"470\" cellpadding=\"3\" cellspacing=\"1\">";
                echo "<tr>";
                echo "<td bgcolor=\"#CFE0F3\">$lt Resultaat id: <b>$row[FAQ_ID]</b><br></td>";
                echo "</tr>";
                echo "<tr>";
                echo "<td bgcolor=\"#CFE0F3\">$lt Resultaat tekst:<br><b>$bericht</b></td>";
                echo "</tr>";
                echo "</table>";
                }
        echo "<a href=\"zoek.php\" title=\"zoek opnieuw\">$lt zoek opnieuw</a>";
        }
    //-- als er geen resultaat is gevonden, dus als het zoekwoord niet gevonden is: 
    if ($num_rows == 0) {
        echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoekterm]</b></p>"; 
         
        echo "<p><a href=\"zoek.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>"; 
    }
?>

alleen nu word de url van zoek opnieuw boven ook weergeven als er nul resultaten zijn :
resultaat.php
-----------------------------------------------------------------------------
zoek opnieuw <<---------- die dus

Er is niets gevonden op jou zoekterm: blablablabla

zoek opnieuw
-----------------------------------------------------------------------------
geen ramp ofzo, maar ik zou toch wel willen weten hoe dat komt...