Avatar billede spil-eksperten Nybegynder
30. november 2010 - 14:18 Der er 15 kommentarer og
1 løsning

Åbenbart fejl i PHP... get image from mysql

Hej ...
Jeg troede at jeg sagtens kunne lave det her.. men den kommer frem med fejl:
Parse error: parse error in C:\wamp\www\dddd\viewimage.php on line 8
1  <?php
2  if(isset($_REQUEST['id']))
3  {
4      include "connect.php";
5     
6   
7
8      $id = $_ REQUEST['id']);
9      $query = mysql_query("SELECT 'img_name', 'img_type', 'img_size', 'img_data' FROM img_tbl            WHERE id=$id");
10
11    $result = mysql_query($query) or die(mysql_error());
12    list($name, $type, $size, $content) = mysql_fetch_array($result);
13
14      header("Content-length: $size");
15      header("Content-type: $type");
16      print $content;
17
18      mysql_close($dbconn);
19 }
20 ?>

kan få lagt billeder op i mysql men kan ikke få dem ned igen!..
håber der er en som kan hjælpe..
Avatar billede repox Seniormester
30. november 2010 - 14:23 #1
På linie 8: $id = $_ REQUEST['id'];
Avatar billede danco Nybegynder
30. november 2010 - 14:23 #2
I linje 8 har du:

$id = $_ REQUEST['id']);

Skift det ud med:

$id = $_ REQUEST['id'];

får du stadig en fejl? i så fald, hvilken?
Avatar billede spil-eksperten Nybegynder
30. november 2010 - 14:30 #3
rookie mistake... :)
men det har bare været en tastefejl herinde.. har ikke den ")" med i .php filen...
og ja den siger stadig det samme
Avatar billede danco Nybegynder
30. november 2010 - 14:35 #4
Har du bestemt grund til at bruge $_REQUEST frem for $_GET og så bruge:
viewimage.php?id=213
Avatar billede spil-eksperten Nybegynder
30. november 2010 - 15:04 #5
nej ikke rigtig..
har bare lært at bruge $_REQUEST...
men $_GET siger samme fejl...

det er jo heller ikke sikkert at det er linie 8 der er fejl i.. men kan simpelhen ikke gennemskue det..
har selvfølgelig et table som hedder

---img_tbl----
id
img_name
img_type
img_size
img_data

så vidt jeg kan forstå er der fejl med de 2 sætninger med at få fat i 'id' ...
altså..

2  if(isset($_REQUEST['id']))
8      $id = $_ REQUEST['id'];

er bare ikke så rutineret til at forstå hvorfor.. :(

forstår ikke hvad du mener med viewimage.php?id=213
Avatar billede Slettet bruger
30. november 2010 - 15:52 #6
Husk også sikkerheden...
Hvis du sender en udefrakommende værdi direkte til din SQL-server via en query, er du fuldstændigt åben over for SQL injections. Hvis der er tale om heltal, kan du f.eks. sikre dig ved at gennemtvinge typen via casting med (int)$_REQUEST['id'].
Avatar billede spil-eksperten Nybegynder
30. november 2010 - 16:03 #7
ja, jeg har tænkt over det...
men lige nu er det på WAMP .. og skal bare have det til at fungere..
har prøvet i mere end en uge at uploade et billede til mysql...
virker fint..
men at få det ned på en (anden end den man uploader fra) webpage kan åbenbart ikke lade sig gøre..(jeg kan ihvertfald ikke)
Avatar billede repox Seniormester
30. november 2010 - 19:27 #8
er du sikker på du får de rigtige headers med ud? (læs: fortæl os hvilkere headere du præsenterer dit data med)
Avatar billede cronaldo Nybegynder
30. november 2010 - 21:29 #9
Hvad med det mellemrum der er mellem $_ og REQUEST?
Avatar billede danco Nybegynder
30. november 2010 - 22:09 #10
Jeg tænker at det kunne være relevant at vide hvad du overhovedet får ud fra databasen. Hvilken datatyper ligger dine data som?
Her tænker jeg om billederne ligger gemt ned som BLOB eller det er en varchar indeholdende filsti eller hvordan databasen ser ud.

Hvad jeg mente med $_GET tidligere var blot at du kunne hente din id fra URL'en vha. GET frem for REQUEST. Således at din url på et billede kunne være viewimage.php?id=4223

Det er korrekt at du skal være særdeles varsom med at bruge variable direkte i SQL forespørgsler uden at "vaske" dem først. Hvis dit billede har et id vil det altid være et tal og derfor kunne du fx bruge is_numeric() funktionen til det trick.
Avatar billede cronaldo Nybegynder
30. november 2010 - 22:11 #11
1  <?php
2  if(isset($_REQUEST['id']))
3  {
4      include "connect.php";
5     
6   
7
8      $id = $_REQUEST['id'];
9      $query = mysql_query("SELECT 'img_name', 'img_type', 'img_size', 'img_data' FROM img_tbl            WHERE id="'.mysql_real_escape_string($id)."'");
10
11    $result = mysql_query($query) or die(mysql_error());
12    list($name, $type, $size, $content) = mysql_fetch_array($result);
13
14      header("Content-length: $size");
15      header("Content-type: $type");
16      print $content;
17
18      mysql_close($dbconn);
19 }
20 ?>

prøv det der :)
Avatar billede spil-eksperten Nybegynder
30. november 2010 - 23:13 #12
#cronaldo .. Thank u.. another rookie mistake :)
smid et svar
selvom jeg ikke er færdig med koden så var det den fejl jeg ledte efter...

er nu kommet frem til næste fejl.. så hvis der er nogen som vil hjælpe alligevel, ville det være cool..

Warning:  mysql_fetch_array() expects parameter 1 to be resource, boolean given in on line 12

12      list($name, $type, $size, $content) = mysql_fetch_array($result);

#danco ..
id = int AI primary
img_name = varchar
img_type = varchar
img_size = int
img_data = blob

skulle være fint nok..
Avatar billede cronaldo Nybegynder
30. november 2010 - 23:25 #13
Svar :)
Avatar billede alphabits Nybegynder
01. december 2010 - 01:48 #14
Ang. din nye fejl, skyldes det at du kalder mysql_query to gange, og så mener jeg også at mysql brokker sig når man bruger ' omkring kolonnenavne. Istedet kan du bruge ` eller ingen ting.

<?php

    if(isset($_REQUEST['id']))
    {
        include "connect.php";

        $id = $_REQUEST['id'];
        $query = "SELECT img_name, img_type, img_size, img_data
            FROM img_tbl WHERE id="'.mysql_real_escape_string($id)."'";

        $result = mysql_query($query) or die(mysql_error());
        list($name, $type, $size, $content) = mysql_fetch_array($result);

        header("Content-length: $size");
        header("Content-type: $type");
        print $content;

        mysql_close($dbconn);
    }
Avatar billede alphabits Nybegynder
01. december 2010 - 01:52 #15
Der er en lille fejl i mit forrige indlæg. Kom til at bytte om på anførselstegnene. Istedet for:


$query = "SELECT img_name, img_type, img_size, img_data
    FROM img_tbl WHERE id="'.mysql_real_escape_string($id)."'";


skulle der stå


$query = "SELECT img_name, img_type, img_size, img_data
    FROM img_tbl WHERE id='".mysql_real_escape_string($id)."'";
Avatar billede spil-eksperten Nybegynder
01. december 2010 - 02:37 #16
ahh tak..
men nu viser den blank side...
ved du hvorfor den gør det?.. burde der ikke komme et billede frem?
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