Avatar billede raan Nybegynder
09. oktober 2006 - 21:54 Der er 40 kommentarer og
1 løsning

profilbillede upload

nu er jeg ved at gå kold i billed upload
har kigget i virkelig mange spm, men kan ikke finde en . fx http://www.eksperten.dk/spm/437773

men jeg leder efter en upload funktion som gør at man uploadet et billede med samme navn som brugetnavnet, også skal den slette den gamle fil også uploade det nye billede?
Avatar billede jakobdo Ekspert
10. oktober 2006 - 07:52 #1
Skal billedet uploadet til database eller en mappe?

Til at starte med skal du lave en formular, som kan tage imod et billede.

F.eks.:

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<table>
    <tr><td>Billede:</td><td><input name="userFile" type="myFile" /></td></tr>
    <tr><td colspan="2"><input type="submit" value="Upload" /></td></tr>
</table>
</form>

Og så skal du behandle filen efterfølgende...
$_FILES['myFile'];
move_uploaded_file();
og hvad du ellers måtte have lyst til at lave.
Avatar billede raan Nybegynder
10. oktober 2006 - 08:17 #2
Den skal faktisk begge dele, altså den skal gemme billedet i en mappe, også skal den smide det ind i databsen hvad navn den har.
men den skal ha' username's navn.
Avatar billede jakobdo Ekspert
10. oktober 2006 - 08:23 #3
Hvor har du username i dag?
I en session?
Avatar billede jakobdo Ekspert
10. oktober 2006 - 08:23 #4
Og kan du selv noget php?
Avatar billede raan Nybegynder
10. oktober 2006 - 08:45 #5
Ja, jeg har det i en session.

Ja lidt, men ikke det vilde ..
Avatar billede jakobdo Ekspert
10. oktober 2006 - 08:49 #6
Vil du have et færdigt script eller selv prøve at bygge noget op?
Avatar billede raan Nybegynder
10. oktober 2006 - 08:51 #7
hvis du har tid, kunne det være perfekt, hvis du ville forklare hvad de forskellige ting gør.
Avatar billede jakobdo Ekspert
10. oktober 2006 - 09:04 #8
Jeg synes nu hellere du skulle prøve selv, og så kan jeg rette og guide dig...
Avatar billede raan Nybegynder
10. oktober 2006 - 09:08 #9
okay, jeg skal starte med noget db.

<?
include("sql.php");

hvad så ? :)
Avatar billede jakobdo Ekspert
10. oktober 2006 - 09:39 #10
Du skal også have en form! :o)
Brug min kode fra før.
Avatar billede raan Nybegynder
10. oktober 2006 - 11:57 #11
<?
include("sql.php");

phpkode her?

?>

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<table>
    <tr><td>Billede:</td><td><input name="userFile" type="myFile" /></td></tr>
    <tr><td colspan="2"><input type="submit" value="Upload" /></td></tr>
</table>
</form>
Avatar billede jakobdo Ekspert
10. oktober 2006 - 12:18 #12
Jep, du er på vej! :o)
Så skal du finde ud af hvad $_FILES indeholder.
Avatar billede raan Nybegynder
10. oktober 2006 - 15:48 #13
det ved jeg ikke hvordan man gør :)
Avatar billede jakobdo Ekspert
10. oktober 2006 - 16:14 #14
du kan starte med:

<?
include("sql.php");

if(isset($_POST['upload']))
{
    echo '<pre>';
    print_r($_FILES);
    echo '</pre>';
}

?>

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<table>
    <tr><td>Billede:</td><td><input name="userFile" type="myFile" /></td></tr>
    <tr><td colspan="2"><input type="submit" name="upload" value="Upload Fil" /></td></tr>
</table>
</form>
Avatar billede raan Nybegynder
10. oktober 2006 - 17:09 #15
og den finder så ud af hvilken fil man er igang med at upload?
.. hvad er så det næste? :)
Avatar billede jakobdo Ekspert
10. oktober 2006 - 17:44 #16
Så skal du finde ud af at flytte filen fra tmp til sin endelige plads.
Kig på www.php.net/move_uploaded_file
Avatar billede raan Nybegynder
10. oktober 2006 - 19:34 #17
<?php
$uploaddir = '';
$uploadfile = $uploaddir . basename($_FILES['upfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
  echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

noget i den stil ?
Avatar billede jakobdo Ekspert
10. oktober 2006 - 19:39 #18
<?php
$uploaddir = '/pictures/'; //Det DIR som dine billeder skal gemmes i.
$uploadfile = $uploaddir . basename($_FILES['upfile']['name']); //Skulle vi ikke omdøbe filen til brugerens navn?

if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile))
{
    echo "File is valid, and was successfully uploaded.\n";
}
else
{
    echo "Possible file upload attack!\n";
}
?>
Avatar billede raan Nybegynder
10. oktober 2006 - 19:41 #19
Jo, det skulle vi da, men hvordan går vi smidt brugernavnet ind der ? :)
Avatar billede jakobdo Ekspert
10. oktober 2006 - 19:43 #20
session_start();
$_SESSION['brugernavn']
Avatar billede raan Nybegynder
10. oktober 2006 - 19:49 #21
<?php
session_start();

$uploaddir = '/pictures/'; //Det DIR som dine billeder skal gemmes i.
$uploadfile = $uploaddir . basename($_FILES['upfile']$_SESSION['brugernavn']); //Skulle vi ikke omdøbe filen til brugerens navn?

if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile))
{
    echo "File is valid, and was successfully uploaded.\n";
}
else
{
    echo "Possible file upload attack!\n";
}
?>

sådan ?
Avatar billede jakobdo Ekspert
10. oktober 2006 - 19:54 #22
Næsten ja!
basename($_FILES['upfile']) vil give dig:

filnavn.jpg eller filnavn.php eller lign...
Så du skal på en måde have fat i filnavn og .jpg.
Prøv at kig på funktionen: pathinfo() og så basename('filnavn.jpg','.jpg');

$uploadfile = $uploaddir . basename($_FILES['upfile']$_SESSION['brugernavn']); //Skulle vi ikke omdøbe filen til brugerens navn?
Avatar billede raan Nybegynder
10. oktober 2006 - 20:47 #23
hm ..
- forstår jeg ikke meget af.
Avatar billede jakobdo Ekspert
10. oktober 2006 - 21:12 #24
Og, jeg forsøger lige så! :o)
$fil = pathinfo($_FILES['upfile']['name']);

$fil_endelse = fil['extension'];
$uploadfile = $uploaddir . $_SESSION['brugernavn'] . '.' . $fil_endelse;
Avatar billede raan Nybegynder
10. oktober 2006 - 21:17 #25
<?php
session_start();

$uploaddir = '/pictures/'; //Det DIR som dine billeder skal gemmes i.
$fil_endelse = fil['extension'];
$uploadfile = $uploaddir . $_SESSION['brugernavn'] . '.' . $fil_endelse;

if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile))
{
    echo "File is valid, and was successfully uploaded.\n";
}
else
{
    echo "Possible file upload attack!\n";
}
?>

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<table>
    <tr><td>Billede:</td><td><input name="userFile" type="myFile" /></td></tr>
    <tr><td colspan="2"><input type="submit" name="upload" value="Upload Fil" /></td></tr>
</table>
</form>
Avatar billede jakobdo Ekspert
10. oktober 2006 - 21:19 #26
Delvist ja!
Du mangler noget kontrol på om filen rent faktisk er et billede.
Jeg kunne f.eks. uploade filen:

<?php
funktion som sletter alle filer i dit webhotel
?>

Så du bør tjekke om $fil_endelse er jpg, gif, jpeg, bmp osv...
Avatar billede raan Nybegynder
10. oktober 2006 - 21:46 #27
hvordan det så ? :)

if(isset($_POST['upload']))
{
    echo '<pre>';
    print_r($_FILES);
    echo '</pre>';
}
Avatar billede jakobdo Ekspert
10. oktober 2006 - 21:56 #28
isset er korrekt ja!
Men når vi har fundet $fil_endelse, så skal vi tjekke om det f.eks. er jpg, png, gif osv..
Det kan man f.eks. lave sådan:
if($fil_endelse == 'jpg' || $fil_endelse == 'png' || $fil_endelse == 'gif')
{
echo "Filen er ok";
}
else
{
echo "Filen er ikke god nok, prøv igen";
}
?>

Jeg kan nu godt lide at lave:
if($fil_endelse == 'jpg' || $fil_endelse == 'png' || $fil_endelse == 'gif')
sådan her:

$ok_filer = array('jpg','jpeg','gif','png','bmp');
if(in_array($fil_endelse,$ok_filer))
{
echo "Filen er ok";
}
else
{
echo "Filen er ikke god nok, prøv igen";
}
Avatar billede raan Nybegynder
10. oktober 2006 - 22:58 #29
hvordan skal alt det der sættes sammen så ? :D
Avatar billede raan Nybegynder
11. oktober 2006 - 13:18 #30
kan det her ikke bruges ?
- der skal vel bare laves om på hvad billedets navn bliver ?

<?PHP
if($_POST['up']){
   
    // Her flyttes filen fra.
    $fra = $_FILES['upfil']['tmp_name'];
   
    // Hvad er det for en fil vi har.
    $ext = strtolower(end(explode(".", $_FILES['upfil']['name'])));   
   
    // hvad hedder billedet
    $billede = $_FILES['upfil']['name'];
   
    // Vi skal have noget information fra databasen
    $connection = mysql_pconnect("xxx","xxx","xxx");
    mysql_select_db("xxx");
   
    // vi henter fra databasen hvor brugernavnet er det samme som brugeren.
    $query = mysql_query("SELECT * from persprofil WHERE brugernavn = '$user'") or die(mysql_error());
    $row = mysql_fetch_array($query);
   
    // vi tager navnet fra den tidligere fil
    list($et,$to) = explode(".",$row[profilbillede]);   
   
    // Vi giver vores billede et nyt navn
    $nytNavn = "$et.$ext";
   
    // her er vores destination
    $til = "".$_SERVER["DOCUMENT_ROOT"]."godjamit/image/" . $nytNavn;
   
    // inden vi uploader, sletter vi lige det gamle billede
    unlink($_SERVER["DOCUMENT_ROOT"] ."godjamit/image/$row[profilbillede]");
   
    // her sker det magiske
    move_uploaded_file($fra, $til);
   
    // vi henter højden og breden fra billedet
    $info = getimagesize("$til");
    $width = $info[0];
    $height = $info[1];   
   
    // Vi opdatere databasen, istedet for blot at indsætte noget nyt.
    mysql_query("update persprofil set profilbillede = '$nytNavn',imgheight = '$height',imgwidth = '$width' WHERE brugernavn = '$user'") or die (mysql_error());

    echo "Din fil er nu uploadet<br><br>";
}
?>
Avatar billede jakobdo Ekspert
11. oktober 2006 - 14:24 #31
Virker den kode du har der?
Avatar billede raan Nybegynder
11. oktober 2006 - 15:43 #32
nej, der var jeg vidst lidt for hurtig ude ..
Avatar billede jakobdo Ekspert
11. oktober 2006 - 15:51 #33
Hvad får du af fejl?
Avatar billede raan Nybegynder
11. oktober 2006 - 15:54 #34
jamen den viser ingen fejl, den henter bare den samme side :s
Avatar billede jakobdo Ekspert
11. oktober 2006 - 16:25 #35
Prøv at debug din kode.
Avatar billede raan Nybegynder
11. oktober 2006 - 17:43 #36
<?php
session_start();

$uploaddir = '/pictures/'; //Det DIR som dine billeder skal gemmes i.
$fil_endelse = fil['extension'];
$uploadfile = $uploaddir . $_SESSION['brugernavn'] . '.' . $fil_endelse;

if (move_uploaded_file($_FILES['upfile']['tmp_name'], $uploadfile))
{
    echo "File is valid, and was successfully uploaded.\n";
}
else
{
    echo "Possible file upload attack!\n";
}

$ok_filer = array('jpg','jpeg','gif','png','bmp');
if(in_array($fil_endelse,$ok_filer))
{
echo "Filen er ok";
}
else
{
echo "Filen er ikke god nok, prøv igen";
}

?>

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<table>
    <tr><td>Billede:</td><td><input name="userFile" type="myFile" /></td></tr>
    <tr><td colspan="2"><input type="submit" name="upload" value="Upload Fil" /></td></tr>
</table>
</form>

sådan der ?
Avatar billede raan Nybegynder
11. oktober 2006 - 17:51 #37
fejl i linje 5 ? ;s

Parse error: syntax error, unexpected '[' in /customers/randersen.dk/randersen.dk/httpd.www/cms/profil_rediger_billede.php on line 5
Avatar billede jakobdo Ekspert
12. oktober 2006 - 08:01 #38
Over linien:
$fil_endelse = fil['extension'];
Skal du huske:
$fil = pathinfo($_FILES['upfile']['name']);
Avatar billede raan Nybegynder
12. oktober 2006 - 11:14 #39
har fundet ud af det selv, men vil du ha' dine point ? :)
Avatar billede jakobdo Ekspert
12. oktober 2006 - 11:56 #40
Svar!
Avatar billede jakobdo Ekspert
15. oktober 2006 - 13:09 #41
Takker for point.
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