Avatar billede syngredk Nybegynder
10. marts 2006 - 15:59 Der er 23 kommentarer og
2 løsninger

Fejl i PHP søgning

Hejsa

Har lavet følgende script, men får en fejl ved aflæsning af scriptet, som jeg ikke lige selv kan fikse.

Fejlen i koden ligger der, hvor denne tekst er indsat: "////(DEN SIGER DER ER FEJL I DENNE LINIE HER)"

Fejlen er: Parse error: parse error, unexpected '}' in

script:

<?
include('administration/access/access_config.php');

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%$tekst_soeg%' ORDER BY dato DESC");
echo mysql_num_rows($foresp) ."forekomst(er) fundet<BR><BR>";

while($datda = mysql_fetch_array($foresp)){
echo "<B>$data[1]</B> -";
echo date("j/n - Y",$datda[0]);
echo "<BR>$data[2]<BR><BR>";
}

} else { ////(DEN SIGER DER ER FEJL I DENNE LINIE HER)

?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>
Avatar billede coderdk Praktikant
10. marts 2006 - 16:00 #1
Der er jo ingen if'er og en } for meget?
Avatar billede webudvikleren Nybegynder
10. marts 2006 - 16:01 #2
<?
include('administration/access/access_config.php');

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%$tekst_soeg%' ORDER BY dato DESC");
echo mysql_num_rows($foresp) . "forekomst(er) fundet<BR><BR>";

while($datda = mysql_fetch_array($foresp))
{
echo "<B>$data[1]</B> -";
echo date("j/n - Y",$datda[0]);
echo "<BR>$data[2]<BR><BR>";

} else { ////(DEN SIGER DER ER FEJL I DENNE LINIE HER)

?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>
Avatar billede coderdk Praktikant
10. marts 2006 - 16:03 #3
Hvad laver den else og { } der så? ;)
Avatar billede coderdk Praktikant
10. marts 2006 - 16:03 #4
ser ud som om at der mangler en if ( isset( $tekst_soeg ) ) { før mysql tingene
Avatar billede webudvikleren Nybegynder
10. marts 2006 - 16:05 #5
Ja, eller
<form method="post" action="?do=this">
<input type="text" name="tekst_soeg"><BR>
<input type="submit" value="søg">
</form>

-- også
<?php
if ($_GET['do'] == "true")
{
...
?>
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:06 #6
webudvikleren:

Parse error: parse error, unexpected T_ELSE in

Den nye fejl, jeg får når jeg forsøger at køre dit script?
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:06 #7
Hmm, mærkeligt hvis der mangler noget (arbejder udfra en PHP bog, for at blive bedre. Skod hvis der er fejl i den!
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:16 #8
Back to basics..


<?
include('administration/access/access_config.php');

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%$tekst_soeg%' ORDER BY dato DESC");
$resultater = mysql_num_rows($foresp);
echo $resultater ."forekomst(er) fundet<BR><BR>";

if ($resultater > 0) { //
    /* hvis der er resultater, loop over alle fundne records og echo til siden */
    while($datda = mysql_fetch_array($foresp)) {
        echo "<B>$data[1]</B> -";
        echo date("j/n - Y",$datda[0]);
        echo "<BR>$data[2]<BR><BR>";
    }
}
else {
/* ingen resultater, hvis søge-formular */
?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>


Jeg synes det virker lidt underligt at du fetch'er dit mysql result i et array du kalder $datda og i samme loop kigger ned i et array der hedder $data[0] ? Skrivefejl vel nok..

Hvis der er fejl i bogen er det selvfølgelig ret upraktisk, men nu ved jeg af erfaring at man, især som nybegynder, let overser vigtige små detaljer..
Da jeg satte min qmail-server op efter www.qmailrocks.org første gang kludrede jeg naturligvis i det, fordi jeg ikke var opmærksom på alle de detaljer der er beskrevet i vejledningen - jeg tror det samme gør sig gældende her.
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:24 #9
fixxxer --> datda er en skrivefejl, det er data..

Efter at havde rettet datda til data og brugt dit ovenstående script vises siden.

Men der kommer nu stadig en lille fejl frem:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtual/domænet.dk/public_html/news.search.php on line 52
forekomst(er) fundet

Men den viser siden
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:33 #10
Så er der noget galt med din query..

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%$tekst_soeg%' ORDER BY dato DESC");

Prøv evt. til test

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%noget søgetekst%' ORDER BY dato DESC");

Hvis du stadig får en fejl på ovenstående, er der et felt-navn der er skrevet forkert..
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:39 #11
Scriptet ser således ud:

<?
include('administration/access/access_config.php');

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%tekst_soeg%' ORDER BY dato DESC");

$resultater = mysql_num_rows($foresp);
echo $resultater ."forekomst(er) fundet<BR><BR>";

if ($resultater > 0) { //
    /* hvis der er resultater, loop over alle fundne records og echo til siden */
    while($datda = mysql_fetch_array($foresp)) {
        echo "<B>$data[1]</B> -";
        echo date("j/n - Y",$data[0]);
        echo "<BR>$data[2]<BR><BR>";
    }
}
else {
/* ingen resultater, hvis søge-formular */
?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>

Siden bliver vist, med boks osv - men stadig denne fejl:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtual/mitdomæne.dk/public_html/news.search.php on line 53
forekomst(er) fundet
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:43 #12
Du kan jo prøve

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE tekst LIKE '%tekst_soeg%' ORDER BY dato DESC") or die(mysql_error());

og se om de giver dig en detaljeret fejlbeskrivelse..
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:45 #13
Unknown column 'tekst' in 'where clause' siger den

al kildekode efter der, bliver IKKe læst ind..
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:46 #14
Mon ikke det i så fald skyldes at kolonnen ´tekst´ ikke findes i tabellen ´news´?
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:48 #15
Upsss, nu kommer du nok til at grine lidt - men hvad fanden, det er jo weekend :-)

Der er ingen kolonne ved navn "tekst" i tabellen "news". Den skal også søge i title og synopsis?
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:52 #16
Helt i orden, det kan ske for enhver..

Vi søger efter $tekst_soeg i enten title eller synopsis. Først den stricte model:

$foresp = mysql_query("SELECT title, synopsis FROM news WHERE title LIKE '%$tekst_soeg%' OR synopsis LIKE '%$tekst_soeg%' ORDER BY dato DESC");

For at give et mere "loose" resultat kan vi gøre en anden ting:

$tekst_soeg = str_replace(' ', '%', $tekst_soeg); //erstater indtastede mellemrum med wildcards.
$foresp = mysql_query("SELECT title, synopsis FROM news WHERE title LIKE '%$tekst_soeg%' OR synopsis LIKE '%$tekst_soeg%' ORDER BY dato DESC");
Avatar billede syngredk Nybegynder
10. marts 2006 - 16:56 #17
Tror sku jeg klokker i det et sted:

<?
include('administration/access/access_config.php');

$tekst_soeg = str_replace(' ', '%', $tekst_soeg); //erstater indtastede mellemrum med wildcards.
$foresp = mysql_query("SELECT title, synopsis FROM news WHERE title LIKE '%$tekst_soeg%' OR synopsis LIKE '%$tekst_soeg%' ORDER BY dato DESC");

$resultater = mysql_num_rows($foresp);
echo $resultater ."forekomst(er) fundet<BR><BR>";

if ($resultater > 0) { //
    /* hvis der er resultater, loop over alle fundne records og echo til siden */
    while($datda = mysql_fetch_array($foresp)) {
        echo "<B>$data[1]</B> -";
        echo date("j/n - Y",$data[0]);
        echo "<BR>$data[2]<BR><BR>";
    }
}
else {
/* ingen resultater, hvis søge-formular */
?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>

Giver samme fejl
Avatar billede fixxxer Nybegynder
10. marts 2006 - 16:59 #18
På med en or die(mysql_error()); igen
Avatar billede syngredk Nybegynder
10. marts 2006 - 17:04 #19
Ahh, se den gav mig lige nogle række fejl mere som jeg nu har rettet på den måde/metode jeg lige lærte der.

<?
include('administration/access/access_config.php');

$tekst_soeg = str_replace(' ', '%', $tekst_soeg); //erstater indtastede mellemrum med wildcards.
$foresp = mysql_query("SELECT title, synopsis FROM news WHERE title LIKE '%$tekst_soeg%' OR synopsis LIKE '%$tekst_soeg%' ORDER BY date DESC");

$resultater = mysql_num_rows($foresp);
echo $resultater ."forekomst(er) fundet<BR><BR>";

if ($resultater > 0) { //
    /* hvis der er resultater, loop over alle fundne records og echo til siden */
    while($data = mysql_fetch_array($foresp)) {
        echo "<B>$data[1]</B> -";
        echo date("j/n - Y",$data[0]);
        echo "<BR>$data[2]<BR><BR>";
    }
}
else {
/* ingen resultater, hvis søge-formular */
?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>

Men, nu kommer der intet søgefelt frem. Den viser bare ALLE nyheder i databasen
Avatar billede fixxxer Nybegynder
10. marts 2006 - 17:07 #20
Ja ok, det skyldes nok at en tom $tekst_soeg vil resultere i et LIKE '%%' somm naturligvis vil returnere alle rækker i tabellen..

En lille kontrol skulle afhjælpe det..

if ($resultater > 0 && $tekst_soeg != '') { //hvis vi har resultater og $tekst_soeg faktisk er udfyldt
    /* hvis der er resultater, loop over alle fundne records og echo til siden */
    while($data = mysql_fetch_array($foresp)) {
Avatar billede syngredk Nybegynder
10. marts 2006 - 17:12 #21
Ahh, nu virker det så godt som.. Bare nogle små detaljer nu.

5forekomst(er) fundet (siger den, selv om der stadig ikke er søgt på noget)
Derudover siger den dato: 1/1-1970
Avatar billede syngredk Nybegynder
10. marts 2006 - 17:12 #22
Ved godt hvorfor den siger den dato, henter den jo heller ikke fra databasen, tsk tsk
Avatar billede fixxxer Nybegynder
10. marts 2006 - 17:16 #23
Faktisk ville det nu være mere elegant at gøre følgende:

<?
include('administration/access/access_config.php');

$tekst_soeg = str_replace(' ', '%', $tekst_soeg); //erstater indtastede mellemrum med wildcards.

if ($tekst_soeg != '') {
    $foresp = mysql_query("SELECT title, synopsis FROM news WHERE title LIKE '%$tekst_soeg%' OR synopsis LIKE '%$tekst_soeg%' ORDER BY date DESC");

    $resultater = mysql_num_rows($foresp);
    echo $resultater ."forekomst(er) fundet<BR><BR>";

    if ($resultater > 0) { //
        /* hvis der er resultater, loop over alle fundne records og echo til siden */
        while($data = mysql_fetch_array($foresp)) {
            echo "<B>$data[1]</B> -";
            echo date("j/n - Y",$data[0]);
            echo "<BR>$data[2]<BR><BR>";
        }
    }
}
else {
    /* ingen resultater, hvis søge-formular */
?>

<form method=post action=<? echo $php_self;?>>
<input type=text name =tekst_soeg><BR>
<input type=submit value=søg>
</form>

<?
}
?>
Avatar billede syngredk Nybegynder
10. marts 2006 - 17:22 #24
Takker, det er point i hus til dig for din hjælp.. Nok ikke sidste gang du hjælper mig i denne weekend, hvis du ellers er online :-)
Avatar billede fixxxer Nybegynder
10. marts 2006 - 17:24 #25
Tak for point.

God weekend.
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