Avatar billede fihl Nybegynder
18. oktober 2009 - 22:27 Der er 13 kommentarer og
1 løsning

Visning af billeder

Jeg har et lille CMS site hvor alt indholdet ligger i en MySql database. Med en upload funktion kan man ligger billeder op også.
Desværre er der noget der ikke er lavet helt korrekt da jeg ikke kan få billederne vist efter de er uploadet, men der vises blot et rødt kryds.

Se evt. en af siderne her:

http://www.toftebaekhus.dk/test/index.php?id=14&mainid=2

Håber der er nogen der kan hjælpe.

Her er koden for upload.php, til upload af billeder:

-----------------------------------------------------------------
<?php require_once('../Connections/cms.php');
  mysql_select_db($database_cms, $cms);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Upload billede</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<?php

if (isset($_FILES['filnavn'])) {
    print "Fil, der er blevet overført:    {$_FILES['filnavn']['name']}<p>\n";
   
    $query = "INSERT INTO billeder SET billednavn='".$_FILES['filnavn']['name']."'";
   
    $Result1 = mysql_query($query, $cms) or die(mysql_error());
}

{
$tempfile = $_FILES['filnavn']['tmp_name'];
$destination = "/test/billeder/{$_FILES['filnavn']['name']} ";
copy($tempfile, $destination);

}

?>
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
  <p>Fil, der skal overføres:
    <input name="filnavn" type="file" id="filnavn">
</p>
  <p>
    <input type="submit" name="Submit" value="Overfør">
</p>
</form>
</body>
</html>
-----------------------------------------------------------------


Her er koden for gallery.php

-----------------------------------------------------------------

<?php require_once('../Connections/cms.php'); ?>
<?php
session_start();
$MM_authorizedUsers = "";
$MM_donotCheckaccess = "true";

// *** Restrict Access To Page: Grant or deny access to this page
function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) {
  // For security, start by assuming the visitor is NOT authorized.
  $isValid = False;

  // When a visitor has logged into this site, the Session variable MM_Username set equal to their username.
  // Therefore, we know that a user is NOT logged in if that Session variable is blank.
  if (!empty($UserName)) {
    // Besides being logged in, you may restrict access to only certain users based on an ID established when they login.
    // Parse the strings into arrays.
    $arrUsers = Explode(",", $strUsers);
    $arrGroups = Explode(",", $strGroups);
    if (in_array($UserName, $arrUsers)) {
      $isValid = true;
    }
    // Or, you may restrict access to only certain users based on their username.
    if (in_array($UserGroup, $arrGroups)) {
      $isValid = true;
    }
    if (($strUsers == "") && true) {
      $isValid = true;
    }
  }
  return $isValid;
}

$MM_restrictGoTo = "login.php";
if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { 
  $MM_qsChar = "?";
  $MM_referrer = $_SERVER['PHP_SELF'];
  if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&";
  if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0)
  $MM_referrer .= "?" . $QUERY_STRING;
  $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer);
  header("Location: ". $MM_restrictGoTo);
  exit;
}
?>
<?php
mysql_select_db($database_cms, $cms);
$query_rsBilleder = "SELECT * FROM billeder";
$rsBilleder = mysql_query($query_rsBilleder, $cms) or die(mysql_error());
$row_rsBilleder = mysql_fetch_assoc($rsBilleder);
$totalRows_rsBilleder = mysql_num_rows($rsBilleder);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Billedgalleri</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../css/styles.css" rel="stylesheet" type="text/css">
</head>

<body>
<table width="100%"  border="0" cellspacing="2" cellpadding="2">
  <?php do { ?>
  <tr>
    <td width="50%"><?php echo '<img height="100" src="/test/billeder/'.$row_rsBilleder['billednavn'].'">'; ?></td>
    <td width="50%"><?php echo $row_rsBilleder['billednavn']; ?></td>
  </tr>
  <tr>
    <td colspan="2"><hr size="1" noshade></td>
  </tr>
  <?php } while ($row_rsBilleder = mysql_fetch_assoc($rsBilleder)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($rsBilleder);
?>
-----------------------------------------------------------------
19. oktober 2009 - 20:58 #1
Det var ikke mange svar du fik.

Jeg er ved at laere mig selv php.  En strategi er at laese de spoergsmaal der kommer her paa eksperten og forsoege at finde svar ved at studere alverdens tutorials og guides.  Et stykke vej er det lykkedes, og til min forbavselse har jeg kunnet svare paa flere spoergsmaal og derved ikke alene laert php men ogsaa optjent punkter til selv at kunne stille spoergsmaal naar jeg kommer saa langt at jeg selv skal til at udvikle noget.

Jeg tog saa dit spoergsmaal som en anledning til at laere om at oploade og downloade filer i php/mysql.  I dagens loeb er jeg kommet et stykke vej.  Jeg kigger saa igen paa dit spoergsmaal, og jeg kan nu bedre forstaa strukturen af dine php filer.  Tillad mig de foelgende kommentarer/spoergsmaal fra en amatoer:

Du siger at alt indholdet ligger i en mysql database.  Men hvad angaar dine billeder saa synes du kun at opbevare navnet i mysql.  Indholdet opbevarer du i et direktory /test/billeder hvor du har en fil for hvert billede med filnavn lig med billednavn.  Database tabellen bruger du til at danne dit billedgaleri saaledes at for hvert navn i databasen kopierer du billedet fra /test/billeder/[navnet paa billedet].

Saa faar du et roedt kryds naar du proever at indsaette et billede i en hjemmeside for eksempel i http://www.toftebaekhus.dk/test/index.php?id=14&mainid=2.

Jeg gaar ud fra at billederne er synlige i billedgalleriet, saa du har oploaded dem korrekt.  Problemet kan (saa vidt jeg kan se) heller ikke have noget at goere med databasen da du ikke bruger databasen naar du laver hjemmesiden.

En aarsag (der nok er for simpel til at vaere korrekt men lad mig fyre den af alligevel) kunne vaere at hjemmesiden ikke kan finde billedet.  I hjemmesider siger du "img src=billeder/[billednavn]".  Ligger subdirektiv billeder i det samme subdirektiv som hjemmesiden eller skulle du have sagt "img src=/test/billeder[billednavn]"?
Avatar billede fihl Nybegynder
19. oktober 2009 - 21:54 #2
ja det er rigtig at billederne bliver uploadet til en mappe (test/billeder) og det ser ud til at billederne bliver uploadet korrekt, da de ligger i mappen efterfølgende. Men når jeg åbner gallery.php (billede galleriet med alle billederne), får jeg kun røde kryds men billedenavnene bliver vist.
Det vil sige jeg kan overhovdet ikke få vist billederne på mine sider.
Min index.php som er selve siden som henter indhold fra databasen ligger i samme mappe som billeder-mappen.
19. oktober 2009 - 22:50 #3
Saa det er ikke alene paa toftebaekhus hjemmesiden at du kun faar roede krydser.  Jeg er interesseret i at finde grunden.  Det maa blive i morgen, det er ved at vaere sengetid i Belgien.
20. oktober 2009 - 09:42 #4
Jeg proever trin for trin:

Du siger at billederne bliver uploadet korrekt til /test/billeder.

Du har velsagtens ogsaa kikket i database tabellen at billedernes navne er der.

Saa siger dit script "
$rsBilleder = mysql_query($query_rsBilleder, $cms) or die(mysql_error());"

Saa hvis du ikke faar fejlmelding paa det tidspunkt maa det betyde at billedernes navne er fundet og sidder i $rsbilleder.

Saa laver du en tabel med to kolonner hvor i den foerste kolonne billederne skulle vaere og i den anden kolonne navnene paa billederne.  Du naevner kun at billederne ikke er der, saa jeg gaar ud fra at navnene er der.

Saa maa problemet ligge i at programmet ikke finder billederne i /test/billeder.

Maaske ligger det i den maade du opbygger din img tag som du concatenerer af 3 strings.  Jeg bliver altid selv forvirret af ' og '' saa maaske er min logik forkert, men jeg proever at opbygge det:

<?php echo
(1) '< img height="100" src="/test/billeder/" '
.
(2) $row_rsBilleder['billednavn']
.
(3) '>'
; ?>

eller ud i et:

<?php echo '<  img height="100" src= "/test/billeder/"' . $row_rsBilleder['billednavn'] . '>' ; ?>

Saa hvis jeg har ret saa mangler du en " efter billeder/ og du har en " for meget foer >

Proev om det virker og fortael mig resultatet.
21. oktober 2009 - 09:20 #5
fihl, fik du mit indlaeg?  Proevede du at tilpasse din img tag som jeg foreslog?  Jeg er spaendt paa resultatet.
Avatar billede fihl Nybegynder
21. oktober 2009 - 23:04 #6
Hej du
jeg takker for din ihærdighed.
Desværre virkede det ikke i første omgang.

Jeg har nu slået PHP error messages til og får denne når jeg starter upload.php
-------------
Warning: copy() [function.copy]: Unable to access in /customers/toftebaekhus.dk/toftebaekhus.dk/httpd.www/test/admin/upload.php on line 68
-------------
22. oktober 2009 - 12:08 #7
Jeg saa dit triste svar.  Fordi jeg er interesseret i selv at kende svaret (fordi jeg nok faar brug for den viden paa et tidspunkt) saa har jeg forsket videre men indtil nu uden resultat.  Jeg synes lige at jeg ville give dig en status rapport.

Jeg er forvirret.  Hvornaar faar du den fejlmelding?  Jeg kan kun se at du bruger copy() et sted, nemlig haar du har uploaded en fil og vil placere den i /test/billeder/.  Men det ville jo mene at filerne ikke bliver gemt der (og derfor heller ikke kan hentes fra der.)  Du sagde:  "..det ser ud til at billederne bliver uploadet korrekt, da de ligger i mappen efterfølgende."  Kan du rent faktisk aabne og kigge paa billederne i /test/billeder eller er der ogsaa kun et roedt kryds?
Avatar billede fihl Nybegynder
22. oktober 2009 - 22:35 #8
Hej Du

Billederne bliver uploadet til mappen test\billeder.
Jeg kan efterfølgende se dem i mappen.

Kan du ikke lige sende mig en mail på jfj@rosendahls.dk så kan jeg smide dig et midlertidig login til toftebaekhus.dk/test så kan du se upload og gallery funktionerne.
Avatar billede fihl Nybegynder
22. oktober 2009 - 23:07 #9
Hej igen

Nu var jeg lige inde og tjekke gallery.php igen og nu kan jeg få billederne frem.
Sad lige og rettede lidt i koden så den ser sådan ud nu:


gallery.php
----------------------------------------------------------------
<body>
<table width="100%"  border="0" cellspacing="2" cellpadding="2">
  <?php do { ?>
  <tr>
    <td width="50%"><?php echo '<img height="100" src="/test/billeder/'.$row_rsBilleder['billednavn'].'">'; ?></td>
    <td width="50%"><?php echo $row_rsBilleder['billednavn']; ?></td>
  </tr>
  <tr>
    <td colspan="2"><hr size="1" noshade></td>
  </tr>
  <?php } while ($row_rsBilleder = mysql_fetch_assoc($rsBilleder)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($rsBilleder);
?>


index.php
-----------------------------------------------------------------


Men stadig problemer på selve hovedsiden hvor den ikke viser billederne måske det kan se problemet?


<td align="left"><p>&nbsp;</p>          </td>
        </tr>
        <tr>
          <td align="left"><h1><?php echo $row_rsSideindhold['overskrift']; ?></h1></td>
        </tr>
        <tr>
          <td height="23"><?php echo nl2br( $row_rsSideindhold['tekst1']); ?></td>
        </tr>
        <tr>
          <td><?php  if ($row_rsSideindhold['billede'])
          {
          echo '<img src= "/test/billeder/' . $row_rsBilleder['billedenavn'] . '">' ;} ?>
       
       
          </td>
        </tr>
        <tr>
          <td><?php echo nl2br ($row_rsSideindhold['tekst2']); ?></td>
        </tr>
        <tr>
          <td>&nbsp;</td>
        </tr>
        <tr>
          <td>&nbsp;</td>

<body>
<table width="100%"  border="0" cellspacing="2" cellpadding="2">
  <?php do { ?>
  <tr>
    <td width="50%"><?php echo '<img height="100" src="/test/billeder/'.$row_rsBilleder['billednavn'].'">'; ?></td>
    <td width="50%"><?php echo $row_rsBilleder['billednavn']; ?></td>
  </tr>
  <tr>
    <td colspan="2"><hr size="1" noshade></td>
  </tr>
  <?php } while ($row_rsBilleder = mysql_fetch_assoc($rsBilleder)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($rsBilleder);
?>
<body>
<table width="100%"  border="0" cellspacing="2" cellpadding="2">
  <?php do { ?>
  <tr>
    <td width="50%"><?php echo '<img height="100" src="/test/billeder/'.$row_rsBilleder['billednavn'].'">'; ?></td>
    <td width="50%"><?php echo $row_rsBilleder['billednavn']; ?></td>
  </tr>
  <tr>
    <td colspan="2"><hr size="1" noshade></td>
  </tr>
  <?php } while ($row_rsBilleder = mysql_fetch_assoc($rsBilleder)); ?>
</table>
</body>
</html>
<?php
mysql_free_result($rsBilleder);
?>

----------------------------------------------------------------
23. oktober 2009 - 10:21 #10
Saa min analyse af den streng hvor du henter billedet var forkert. 
echo '<img src="/test/billeder/'.$row_rsBilleder['billednavn'].'">';  er saaledes korrekt.

Hvad problemet med din main side angaar kan jeg for oejeblikket kun taenke paa at der siger du

if ($row_rsSideindhold['billede'])
          {
          echo '<img src= "/test/billeder/' . $row_rsBilleder['billedenavn'] . '

altsaa ['billedenavn'] i stedet for ['billednavn'].
25. oktober 2009 - 08:16 #11
Fik du mit indlaeg?  Var det billedenavn versus billednavn?  Eller der der stadig problemer?
Avatar billede fihl Nybegynder
25. oktober 2009 - 16:16 #12
Har fået dit indlæg tak for det, og selv testet lidt mere.
Nu har jeg fået sporet problemet ind til genkendelsen af filen som et billede.

Dvs. når jeg har uploadet et billede via upload.php, lægger billedet sig i billed-mappen, men vises kun som rødt kryds i både gallery og index. Se her
http://www.toftebaekhus.dk/test/index.php
Downloader jeg billedet lokalt til min pc og uploader igen til serveren vil den godt vise billedet uden problemer. Se her
http://www.toftebaekhus.dk/test/index.php?id=3&mainid=3

Så måske det er noget med upload scriptet alligevel.


upload script:
---------------
<?php

if (isset($_FILES['filnavn'])) {
    print "Fil, der er blevet overført:    {$_FILES['filnavn']['name']}<p>\n";
   
    $query = "INSERT INTO billeder SET billednavn='".$_FILES['filnavn']['name']."'";
    $Result1 = mysql_query($query, $cms) or die(mysql_error());
}

{
$tempfile = $_FILES['filnavn']['tmp_name'];
$destination = "../billeder/{$_FILES['filnavn']['name']} ";
copy($tempfile, $destination);

}
?>
<form action="upload.php" method="post" enctype="multipart/form-data" name="form1">
  <p>Fil, der skal overf&oslash;res:
    <input name="filnavn" type="file" id="filnavn">
</p>
  <p>
    <input type="submit" name="Submit" value="Overfør">
</p>
</form>
</body>
</html>
---------------
fra index.php blot til info fra tidligere.


---------------
        <tr>
          <td><?php  if ($row_rsSideindhold['billede'])
          {
          echo '<img src= "billeder/'.$row_rsSideindhold['billede'].'">';} ?>
        </td>
        </tr>
---------------
Avatar billede fihl Nybegynder
25. oktober 2009 - 22:22 #13
Jeg har nu fundet løsningen.
Det var at bruge

move_uploaded_file($tempfile, $destination);
istedet for
copy($tempfile, $destination);

Jeg ved ikke præcis hvorfor det gør en forskel men nu virker det ihvertfald.


<?php

if (isset($_FILES['filnavn'])) {
    print "Fil, der er blevet overført:    {$_FILES['filnavn']['name']}<p>\n";
   
    $query = "INSERT INTO billeder SET billednavn='".$_FILES['filnavn']['name']."'";
    $Result1 = mysql_query($query, $cms) or die(mysql_error());
}

{
$tempfile = $_FILES['filnavn']['tmp_name'];
$destination = "../billeder/{$_FILES['filnavn']['name']}";
move_uploaded_file($tempfile, $destination);
}
?>
Avatar billede fihl Nybegynder
25. oktober 2009 - 22:26 #14
Hej Christian_Belgien

Tak for din ihærdighed.
Du får pointene.
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
Computerworld tilbyder specialiserede kurser i database-management

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