Avatar billede eksperten1 Nybegynder
07. juni 2007 - 16:36 Der er 15 kommentarer

Returnerer intet resultat, hvis der er danske tegn i mit query

Jeg arbejder på min lokale PC (xp sp2) der kører PHP Version 5.2.1 under IIS. Umiddelbart fungerer det jo fint, men jeg sidder og laver et DVD website (jeg er RIGTIG newbie).

Den har forbundet fint til databasen, jeg kan hente records og jeg kan søge. MEN hvis der er Æ Ø eller Å i min søgestreng, så finder den intet. Den fanger det fint, jeg print($query) og det ser rigtigt ud, hvis jeg kører det query i MySQL Query analyzer returnerer den også 11 records. ??

Der må være en indstilling i php.ini som er forkert, men hvad skal jeg gøre.

Al hjælp vil være mucho bueno gracias.

mvh Mark
Avatar billede 0xffff Nybegynder
07. juni 2007 - 17:29 #1
jeg går ud fra du har en søgestreng som du sender med en get eller post. har du husket at lave en htmlentities() på den ?
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 17:40 #2
Jeg sender kun et felt, selve søgeordet. Det genererer så noget SQl - eks:
"SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%Brødrene Grimm%' ORDER BY title ASC;" - denne her vil returnere 0 rows hvis kørt igennem PHP, men hvis nu jeg kopierer samme query til MySQL Query Analyzer, returnerer den 1 record. Hvis bare jeg søger på
"SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%ø%' ORDER BY title ASC;" så får jeg i PHP 0, men fra mysql 11 !?!?

Jeg er som sagt virkelig newbie, men det her er da underligt.
BTW - Hvis jeg nu søger på noget uden æøå i, så returnerer PHP nøjagtigt det samme resultat som mysql gør fra QA !

tak for din hjælp
Mark
Avatar billede 0xffff Nybegynder
07. juni 2007 - 18:04 #3
Prøv lige at gøre således:

SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%ø%' COLLATE latin1_danish_ci
ORDER BY title ASC;"
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 18:15 #4
In PHP I get nothing - in QA I get this error : COLLATION 'latin1_danish_ci' is not valid for CHARACTER SET 'utf8'
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 18:16 #5
Undskyld - jeg sidder i New York lige nu så der smuttede lidt engelsk ind
Avatar billede 0xffff Nybegynder
07. juni 2007 - 18:20 #6
jamen det er da også ok. Ville bare lige checke hvilken collation du havde på  din tabel. Og lader til at du har utf8.

Det fører tilbage til php delen. Kan du vise den kode der sender query? Altså et større udsnit af den. Specielt der hvor du henter din information fra din $_GET eller $_POST alt efter hvad du bruger.
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 18:21 #7
Ja det sjove er... det er et PHP kursus - instruktøren ser bare underligt på mig når jeg forklarer ÆØÅ problematikken

function getMovieSearch($skey) {
        $query = "SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%$skey%' COLLATE latin1_danish_ci ORDER BY title ASC;";
        print $query;
        return mysql_query($query);
        }
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 18:22 #8
self. function getMovieSearch($skey) {
        $query = "SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%$skey%' ORDER BY title ASC;";
        print $query;
        return mysql_query($query);
        }
Avatar billede 0xffff Nybegynder
07. juni 2007 - 18:40 #9
jeps, men det jeg har brug for er der hvor du smider værdier over i $skey. Og behandlingen af den variabel, helt fra når den kommer fra $_GET eller $_POST

:)
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 18:46 #10
hmm - jeg smider lige mine filer op så...

ALtså jeg har en index.php med en form, der submitter til $_SELF og så en include "search.php" :
<?php
        $res = $objDB -> getMovieSearch($skey);
        $num = mysql_num_rows($res);
        print "<table border=0 width=100% cellspacing=0 cellpadding=0><tr><td align=center colspan=2>Your search for <strong>". $skey ."</strong> returned ". $num ." results</td></tr><tr bgcolor='#cccccc'><td align=center>Title</td></tr>";
   
        while ($row = mysql_fetch_object($res)) {
            print "<tr><td><a href='?id=". $row->id ."'/>". htmlentities( $row->title ) ."</td></tr>";
        }
            print "</table>";
?>
Avatar billede 0xffff Nybegynder
07. juni 2007 - 19:22 #11
Jeg forklarer mig åbenbart ikke godt nok :)

Det jeg har brug for er det information hvor du har noget i stil med:

$skey = $_POST['etellerandet'];

og koden derfra. Ellers hvis du kan ligge index.php op ville det være super :)
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 19:31 #12
ok - sorry :
<?php
            $objDB = new clsDB();
           
            $page = $_GET['page'];
            $skey = $_POST['skey'];
            if (strlen($skey)>0){
                include "search.php";
            }
            elseif($page == "list"){
                include "list.php";
            } elseif($page == "add"){
                include "add_movie.php";
            } else {
           
           
            $arrMovie = $objDB -> getMainMovie($_GET['id']);
            $strTitle = htmlentities ( $arrMovie['title'] );
            $strDesc = htmlentities ( $arrMovie['descr'] );
            $strIMDBURL = $arrMovie[2];
            $strImgid = $arrMovie['id'];
           
           
           
    ?>
Tak for din tid

Mark
Avatar billede 0xffff Nybegynder
07. juni 2007 - 19:53 #13
Prøv at lave
$skey = htmlentities(addSlashes($_POST['skey']));
Avatar billede eksperten1 Nybegynder
07. juni 2007 - 19:59 #14
HMM - Meget interessant :
SELECT md5(id) as id, title, descr, id as id2 FROM movies WHERE title LIKE '%ø%' ORDER BY title ASC;

Så den har faktisk lavet mit "ø" om til noget der OVERHOVEDET ikke ligner et o&slash; - det ligner da noget med internt tegnsæt ??

Men hvad hedder det i php.ini
Avatar billede 0xffff Nybegynder
07. juni 2007 - 20:54 #15
Jeg er ikke super stærk i php.ini. Faktisk slet ikke heh.

Men jeg har lige kigget i min php ini og jeg har disse linier:

; As of 4.0b4, PHP always outputs a character encoding by default in
; the Content-type: header.  To disable sending of the charset, simply
; set it to be empty.
;
; PHP's built-in default is text/html
default_mimetype = "text/html"
;default_charset = "iso-8859-1"

det ved jeg ikke om hjælper dig?
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