Avatar billede janjacobsen Nybegynder
14. marts 2004 - 17:50 Der er 36 kommentarer og
1 løsning

Fejl i uploadscript

Jeg har dette uploadscript, som skal lave en sti i databasen, men
jeg får følgende fejl i script..
Og hvor skal jeg placere: $_FILES['upfile']['name']);

You have an error in your SQL syntax near 'name']') WHERE id = '2' ORDER BY id desc' at line 1

Scriptet ser således ud:

<?php

$db = mysql_connect("localhost", "xxx", "xxx") or die ("Desværre ingen forbindelse til databasen");
mysql_select_db("afx", $db) or die ("Kunne ikke vælge databasetabel");

$query = mysql_query("INSERT INTO temp (`picture`) VALUES ('$_FILES['upfile']['name']') WHERE id = '$_GET[id]' ORDER BY id desc") or
die(mysql_error());

if (isset($_FILES['upfile'])) {

    if (isset($_FILES['upfile']['name']) && $_FILES['upfile']['name'] !="") {

        if(is_uploaded_file($_FILES['upfile']['tmp_name'])) {

        $dist = $_SERVER['DOCUMENT_ROOT'] ."/upload/";

        move_uploaded_file($_FILES['upfile']['tmp_name'], $dist . $_FILES['upfile']['name']);
        $besked = $_FILES['upfile']['name'] ." er blevet uploadet med succes!";
    }else{
        $besked = "Sorry, men upload skete IKKE!";
    }

}else{

$besked = "Du har ikke valgt en fil!";
    }

}else{

$besked = "V&aelig;lg en fil til upload:";
}

?>
<html><head><title>Upload fil</title>
<link href="/css/greenstyle2.css" rel="stylesheet">
</head>
<body>
<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <div align="left"></div>
  <table>
    <tr>
      <td><?php echo $besked; ?><br> <input name="upfile" type="file" size="40">
        <p>
          <center>
          </center>
      </td>
    </tr>
    <tr>
      <td><div align="right">
          <input name="submit" type="submit" class="submit" value="Upload">
        </div></td>
    </tr>
  </table>

</form>
</body></html>
Avatar billede danino Nybegynder
14. marts 2004 - 17:53 #1
$query = mysql_query("INSERT INTO temp (`picture`) VALUES ('$_FILES['upfile']['name']') WHERE id = '$_GET[id]' ORDER BY id desc") or
die(mysql_error());
ændres til:
$filename = $_FILES['upfile']['name'];
$query = mysql_query("INSERT INTO temp (`picture`) VALUES ('$filename') WHERE id = '$_GET[id]' ORDER BY id desc") or
die(mysql_error());
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:03 #2
Av, jeg får følgende fejl:

You have an error in your SQL syntax near 'WHERE id = '2' ORDER BY id desc' at line 1
Avatar billede detox Nybegynder
14. marts 2004 - 18:07 #3
Du skal/kan ikke bruge en WHERE betingelse i en INSERT forespørgsel. Bare brug:

$query = mysql_query("INSERT INTO temp (`picture`) VALUES ('".$_FILES['upfile']['name']."')") or
die(mysql_error());
Avatar billede danino Nybegynder
14. marts 2004 - 18:07 #4
så prøv dette:
$id = $_GET["id"];
$filename = $_FILES['upfile']['name'];
$query = mysql_query("INSERT INTO temp (`picture`) VALUES ('$filename') WHERE id = '$id'") or
die(mysql_error());
Avatar billede danino Nybegynder
14. marts 2004 - 18:08 #5
... lyt til detox.... :)
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:15 #6
Jo, nu indsætter scriptet et filnavn - men i en ny post. Den skal indsætte i en eksisterende post.
Avatar billede detox Nybegynder
14. marts 2004 - 18:20 #7
Så skal du bruge UPDATE:

$query = mysql_query("UPDATE temp SET `picture`='".$_FILES['upfile']['name']."' WHERE id = '".$_GET['id']."'") or
die(mysql_error());
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:28 #8
Ahhh, det virker fint! Mange tak - smider du et svar?
I databasen vises kun filnavnet - det burde egentlig være sti/til/fil
Ved du tilfældigvis hvordan man så også får vist det billede man uploader?
Jeg laver et nyt spm. ell. jeg sætter flere point til her.
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:35 #9
Hov, den indsatte ikke nogen post..
Avatar billede detox Nybegynder
14. marts 2004 - 18:37 #10
Hvis du ligger dem i samme mappe behøver du jo ikke gemme stien. Du kan bare bruge det samme trix når du skal vise dine billeder:

$query = mysql_query("SELECT picture FROM temp WHERE id = '".$_GET['id']."'") or
die(mysql_error());
$pic = mysql_result($query,0);
$dist = $_SERVER['DOCUMENT_ROOT'] ."/upload/";
echo "<img src='".$dist.$pic."' alt='' />";

Men vil du gemme hele stien, er det:

$sti = $dist.$_FILES['upfile']['name'];

og så indsætter du $sti.
Avatar billede detox Nybegynder
14. marts 2004 - 18:38 #11
Har den ikke opdateret rækken med: $_GET['id']?
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:39 #12
Hmm, den uploader ikke nogen billeder.
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:40 #13
Jamen, jeg kigger direkte i phpmyadmin og der er ingenting i feltet.
Avatar billede detox Nybegynder
14. marts 2004 - 18:43 #14
Hvis den ikke uploader nogen fil, bliver der jo heller ikke indsat noget navn. I øvrigt bør du nok flytte den del der indsætter i databasen ned under linien:

$besked = $_FILES['upfile']['name'] ." er blevet uploadet med succes!";

så den kun indsætter data når det går godt.
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:45 #15
Billedet er havnet i uploadmappen, men intet i databasen.
Avatar billede detox Nybegynder
14. marts 2004 - 18:45 #16
I din FORM's action har du jo heller ikke noget id?
Avatar billede detox Nybegynder
14. marts 2004 - 18:46 #17
Hvad er egentlig idéen med at opdatere istedet for at indsætte nye rækker?
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:49 #18
Fordi at det er sjældent, at billedet vil være tilstede ved oprettelsen af posten, så jeg tænkte at det ville være smart med et defaultbillede og at man kan uploade et senere.
Avatar billede detox Nybegynder
14. marts 2004 - 18:56 #19
Ok, I see. Men i dit eksempel skal du jo på en eller anden måde have fat i det korrekte id og det skal så tilføjes linket i formens action. Kalder du scriptet fra en anden side med i linket?
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 18:59 #20
Ja, jeg kalder det fra denne her:
Jeg har tilføjet dine linier som laver et fint link.

<?php require_once('../Connections/afx.php'); ?>
<?php
mysql_select_db($database_afx, $afx);
$query_Recordset1 = "SELECT *, DATE_FORMAT(`data_pub`, '%d-%m-%Y') AS dato FROM temp ORDER BY id DESC LIMIT 1";
$Recordset1 = mysql_query($query_Recordset1, $afx) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$pic = mysql_result($Recordset1,0);
$dist = $_SERVER['DOCUMENT_ROOT'] ."/upload/";

?>
<html>
<head>
<title>showtemp</title>
<link href="/css/greenstyle2.css" rel="stylesheet">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<p><em><strong><font size="3">Medarbejderdata:</font></strong></em></p>
<table width="82%" border="0" align="center">
  <tr>
    <td width="18%">Navn:</td>
    <td width="24%"><?php echo $row_Recordset1['name']; ?></td>
    <td width="26%">Billede:</td>
    <td width="32%"><a href="/sec/uploadtest.php?id=<?php echo $row_Recordset1['id']?>" onclick="window.open(this.href,'vindue','height=100,width=350');return false"</a><input name="Submit" type="submit" id="Submit" value="Inds&aelig;t billede"></td>
  </tr>
  <tr>
    <td>Adresse:</td>
    <td><?php echo $row_Recordset1['street']; ?></td>
    <td rowspan="5"><?php echo "<img src='".$dist.$pic."' alt='' />"; ?></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Postnr. og by</td>
    <td><?php echo $row_Recordset1['postnumber']; ?><?php echo $row_Recordset1['city']; ?> </td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Telefon:</td>
    <td><?php echo $row_Recordset1['telephone']; ?></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Mobil:</td>
    <td><?php echo $row_Recordset1['mobile']; ?></td>
    <td></td>
  </tr>
  <tr>
    <td>Fax:</td>
    <td><?php echo $row_Recordset1['fax']; ?></td>
    <td>CPR nr.</td>
    <td><?php echo $row_Recordset1['cpr_number']; ?></td>
  </tr>
  <tr>
    <td>E-mail:</td>
    <td><?php echo $row_Recordset1['e_mail']; ?></td>
    <td>Land:</td>
    <td><?php echo $row_Recordset1['country']; ?></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>K&oslash;n:</td>
    <td><?php echo $row_Recordset1['sex']; ?></td>
  </tr>
  <tr>
    <td>Transport:</td>
    <td><?php echo $row_Recordset1['transport']; ?></td>
    <td>Oprettet:</td>
    <td><?php echo $row_Recordset1['dato']; ?></td>
  </tr>
  <tr>
    <td>Ryger:</td>
    <td><?php echo $row_Recordset1['smoking']; ?></td>
    <td>Tilknyttet afdeling:</td>
    <td><?php echo $row_Recordset1['dep_connect']; ?></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>Tilknyttet konsulent:</td>
    <td><?php echo $row_Recordset1['resp_contact']; ?></td>
  </tr>
  <tr>
    <td>Arbejdsomr&aring;der:</td>
    <td><?php echo $row_Recordset1['work_areas']; ?></td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Aktiv:</td>
    <td><?php echo $row_Recordset1['active_inactive']; ?></td>
    <td>Fagforening:</td>
    <td><?php echo $row_Recordset1['union']; ?></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>A-kasse:</td>
    <td><?php echo $row_Recordset1['a_box']; ?></td>
  </tr>
  <tr>
    <td>Noter:</td>
    <td colspan="3"><?php echo $row_Recordset1['notes']; ?></td>
  </tr>
</table>
<div align="center"></div>
</body>
</html>
<?php
mysql_free_result($Recordset1);
?>
Avatar billede detox Nybegynder
14. marts 2004 - 19:03 #21
Ok, så prøv med et hidden felt i din form, sådan her:

<?php
if (isset($_FILES['upfile'])) {

    if (isset($_FILES['upfile']['name']) && $_FILES['upfile']['name'] !="") {

        if(is_uploaded_file($_FILES['upfile']['tmp_name'])) {

        $dist = $_SERVER['DOCUMENT_ROOT'] ."/upload/";

        move_uploaded_file($_FILES['upfile']['tmp_name'], $dist . $_FILES['upfile']['name']);
        $besked = $_FILES['upfile']['name'] ." er blevet uploadet med succes!";
        $db = mysql_connect("localhost", "xxx", "xxx") or die ("Desværre ingen forbindelse til databasen");
        mysql_select_db("afx", $db) or die ("Kunne ikke vælge databasetabel");

        $query = mysql_query("UPDATE temp SET `picture`='".$_FILES['upfile']['name']."' WHERE id = '".$_POST['id']."'") or
        die(mysql_error());
    }else{
        $besked = "Sorry, men upload skete IKKE!";
    }

}else{

$besked = "Du har ikke valgt en fil!";
    }

}else{

$besked = "V&aelig;lg en fil til upload:";
}

?>
<html><head><title>Upload fil</title>
<link href="/css/greenstyle2.css" rel="stylesheet">
</head>
<body>
<form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="id" value="<?php echo $_GET['id'];?>" />
  <div align="left"></div>
  <table>
    <tr>
      <td><?php echo $besked; ?><br> <input name="upfile" type="file" size="40">
        <p>
          <center>
          </center>
      </td>
    </tr>
    <tr>
      <td><div align="right">
          <input name="submit" type="submit" class="submit" value="Upload">
        </div></td>
    </tr>
  </table>

</form>
</body></html>
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 19:13 #22
Ok, nu kom der noget i databasen, men scriptet som der også kaldes fra længere oppe fungere også som visning af posten - den prøvede jeg at reloade - det fandt intet billede.
proberties for billede: file:///c:/program%20files/ez%20systems/ezpublish/upload/4
Avatar billede detox Nybegynder
14. marts 2004 - 19:22 #23
Den her:

$pic = mysql_result($Recordset1,0);

skal ændres til:

$pic = $row_Recordset1['picture'];
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 19:26 #24
Kanon, det hele virker nu! Mange tak for hjælpen!
Ved du tilfældigvis lige hvordan man kan få uploadscriptet til at resize billedet?
Smider du et svar?
Avatar billede detox Nybegynder
14. marts 2004 - 19:31 #25
Her er en funktion der kan resize billeder til en maximum bredde/højde:

function Thumb($sourcefile, $targetfile, $size) {
    $source_id = imageCreateFromJPEG($sourcefile);
    $source_x = imagesx($source_id);
    $source_y = imagesy($source_id);
    $delta = $size/max($source_x, $source_y);
    $dest_x = round($source_x*$delta);
    $dest_y = round($source_y*$delta);
    $target_id=imagecreatetruecolor($dest_x, $dest_y);
    imagecopyresampled($target_id,$source_id,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
    imagejpeg($target_id,$targetfile,100);
}

Hvis du vil resize skal du kalde funktionen med samme parameter for $sourcefile og $targetfile. Fx i dette tilfælde:

Thumb($dist . $_FILES['upfile']['name'], $dist . $_FILES['upfile']['name'], 120);
Avatar billede detox Nybegynder
14. marts 2004 - 19:33 #26
Ps: den er kun beregnet til jpg billeder, men kan nemt ændres til også at håndtere fx png.
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 19:38 #27
Skal jeg bare smide den ind i uploadscriptet?
Avatar billede detox Nybegynder
14. marts 2004 - 19:42 #28
Ja, funktionen kan du bare tilføje og kaldet kan du ligge fx her (max bredde/højde: 120):

$besked = $_FILES['upfile']['name'] ." er blevet uploadet med succes!";
Thumb($dist . $_FILES['upfile']['name'], $dist . $_FILES['upfile']['name'], 120);
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 19:46 #29
Av, jeg fik denne:
Fatal error: Call to undefined function: imagecreatefromjpeg() in c:\program files\ez systems\ezpublish\sec\uploadtest.php on line 32

Jeg har smidt den ind her:

$besked = "V&aelig;lg en fil til upload:";
}
function Thumb($sourcefile, $targetfile, $size) {
    $source_id = imageCreateFromJPEG($sourcefile);        <-------------linie 32
    $source_x = imagesx($source_id);
    $source_y = imagesy($source_id);
    $delta = $size/max($source_x, $source_y);
    $dest_x = round($source_x*$delta);
    $dest_y = round($source_y*$delta);
    $target_id=imagecreatetruecolor($dest_x, $dest_y);
    imagecopyresampled($target_id,$source_id,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
    imagejpeg($target_id,$targetfile,100);
}
?>
Avatar billede detox Nybegynder
14. marts 2004 - 19:47 #30
Så har du nok ikke adgang til GDlib. Hvilken version af php bruger du og hvilket styresystem?
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 19:54 #31
Ahh, til at lave det her kører jeg windoze xp med PHP Version 4.3.1.
På server er det Fedora Core og php ver. 4.3.4 m. GDlib.
Avatar billede detox Nybegynder
14. marts 2004 - 19:57 #32
Så burde det da hvert fald virke på serveren. Hvis du i din PHP/extensions mappe har en fil der hedder: "php_gd2.dll" kan du slå den til ved at sørge for at du har linien:

extension=php_gd2.dll

i din php.ini. Husk at genstarte serveren.
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 20:00 #33
Det har jeg ikke. Den vil jeg lige finde...
Avatar billede detox Nybegynder
14. marts 2004 - 20:09 #34
Ellers er det måske tid til at opgradere ;O)
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 20:22 #35
Hmm, den er sat til, men er ikke at finde hvis jeg tager PHP-information fra phpmyadmin. Ergo er den ikke loadet...
Avatar billede janjacobsen Nybegynder
14. marts 2004 - 21:41 #36
Jeg har lige installeret apache2triad og det virker bare!
Scriptet er bare blevet super - og tusind tak for hjælpen!
Avatar billede detox Nybegynder
14. marts 2004 - 23:32 #37
Velbekommen
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