Avatar billede brianmilan Juniormester
06. juni 2016 - 13:13 Der er 10 kommentarer og
1 løsning

Udtrække data fra MySQL når de indeholder \'

Hej Eksperter.

Ved I evt. hvordan jeg kan søge på / udtrække f.eks en titlen på en film fra min MySQL database via PHP?

Indholdet som jeg gerne vil søge på / udtrække hedder:

Ferris Bueller\'s Day Off

Min kode ser sådan ud:

<?php
$titel = isset($_POST['titel']) ? $_POST['titel'] : '';
$sql = "SELECT * FROM film WHERE original_titel LIKE '%$_POST[titel]%' OR dansk_titel LIKE '%$_POST[titel]%'";
$query = mysql_query($sql);
if (mysql_num_rows($query) > 0) {
             
echo "Der er fundet <strong>$antal_poster</strong>";?> film hvor <strong>"<?php echo "$titel";?>"</strong> indgår i.<br><br>

<p class='skrifttype1'>(Filmene er sorteret efter biograf premiere - Nyeste øverst)</p><br><br>";
        }
        else
        {
        echo "Der er desværre ikke nogen fundet nogen film med titlen <br><br><strong>'%$_POST[titel]%'</strong>";
        }
        ?>

Jeg har prøvet med echo stripslashes ($_POST['titel']); og så kan jeg godt få det rigtigt ud, men når jeg til if (mysql_num_rows($query) > 0) {
så kommer der ikke nogen data ud.

Kan I se hvad jeg gør forkert?  ;-)
Venlig hilsen
Brian
Avatar billede keysersoze Guru
06. juni 2016 - 13:32 #1
Ikke at det direkte hjælpe på dit spørgsmål - men hvorfor gemme data på den måde fremfor helt rene data?
Avatar billede olsensweb.dk Ekspert
06. juni 2016 - 13:49 #2
du kan vel kører det igennem mysql-real-escape-string
http://php.net/manual/en/function.mysql-real-escape-string.php


$titel = isset($_POST['titel']) ? $_POST['titel'] : '';
skal se sådan ud (utested)
$titel = isset($_POST['titel']) ? mysql_real_escape_string($_POST['titel']) : '';


eller har jeg misforstået dit spm ??


nb: du er opmærksom på at det mysql API du anvender er fjernet i PHP7.
få opdateret din mysql til mysqli eller PDO.
kig på Prepare Statement, som er noget af det nye der er kommet til i mysqli og forbedret i PDO
Avatar billede arne_v Ekspert
06. juni 2016 - 15:13 #3
Jeg vil tro at du skal:
- escape som ronolds foreslaar for at kunne klare single quote
- sikre dig at enten har du den backslash baade i database og i soegevaerdi eller saa har du ikke den backslash nogen af stederne
Avatar billede arne_v Ekspert
06. juni 2016 - 16:53 #4
Og naturligvis vil et skift til mysqli eller PDO og brug af parameters vaere det eneste rigtige paa lidt laengere sigt.
Avatar billede brianmilan Juniormester
07. juni 2016 - 13:33 #5
Tak for jeres hurtige hjælp, jeg fik kørt den igennem mysql-real-escape-string, og fjernede backslash'en i MySQL databasen så der nu står Ferris Bueller's Day Off :-)

Jeg kan se at i min PHP.ini er extension for PHP_MYSQLI aktiveret. Kan jeg evt. gøre mere for at det kører fint med MySQLi?

Jeg bruger WampServer 3.0
Avatar billede olsensweb.dk Ekspert
07. juni 2016 - 14:02 #6
>Kan jeg evt. gøre mere for at det kører fint med MySQLi?
så mangler du bare at opdaterer alle dine mysql functioner !! til enten mysqli eller PDO

*************
det nemmeste er at skifte til mysqli, i mysqli kan du anvende 2 styles frit som du har lyst

procedural style: som du kender fra det gamle mysql, der er grundlæggende bare tilføjet et i, i alle mysql_ kommandoerne så de hedder mysqli_, og ved mange af dem skal du også angive din connection

OOP style: dette er det der anvendes mest, og er fremtiden

Prepare Statement: er noget af det nye der er kommet til i mysqli, en kvik guide *) http://www.eksperten.dk/guide/1480
du har kun numbered place holders

*) guiden er ikke længere tilgængelig på E, men kommer muligvis i en eller anden form
ref http://www.computerworld.dk/eksperten/spm/1010963?k=8221475 og resten af tråden
*************
PDO: dette ser jeg som det fremtidige ext (API), du kan kun anvende OOP style, tilgengæld har du alle fordele fra ODBC men ikke ulemperne ved at skulle installerer en system driver

Prepare Statement: er klart forbedret i forhold til mysqli
du har numbered placeholders og named placeholders, sidst nævnte er klart nemmere at læse IMHO
********************
Avatar billede arne_v Ekspert
08. juni 2016 - 04:12 #7
@Brian

Du accepterede dit eget svar!?!?!?!?
Avatar billede arne_v Ekspert
08. juni 2016 - 04:13 #8
@ronols

PDO kraever ogsaa en database specifik driver.

PS: Guide linket virker stadig ikke.
Avatar billede olsensweb.dk Ekspert
08. juni 2016 - 06:26 #9
>PDO kraever ogsaa en database specifik driver.
ja men det ligger i PHP, og skal enables i php.ini, hvis den ikke er det. (er det default i nyere installationer)
denne linje i php.ini skal enables hvis den ikke er det
extension=php_pdo_mysql.dll


>PS: Guide linket virker stadig ikke.
nej det skriver jeg også
citat
*) guiden er ikke længere tilgængelig på E, men kommer muligvis i en eller anden form
/citat
Avatar billede arne_v Ekspert
08. juni 2016 - 16:42 #10
Det er ikke helt saa simpelt med den driver.

PHP kommer med drivere til nogle databaser. Men til andre databaser skal man selv hente og installere den driver.

Nogle af de drivere kraever at der er native client libs til den paagaeldende database installeret.
Avatar billede arne_v Ekspert
08. juni 2016 - 16:43 #11
Og dyb undskyldning for den med guide - jeg havde ikke laest den del ordentligt.
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

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



IT-JOB

Cognizant Technology Solutions Denmark ApS

Senior Test Engineer

Optum Computational Engineering ApS

SW developer