Avatar billede mr-xmas Nybegynder
11. april 2006 - 20:34 Der er 22 kommentarer

Uploadscript gider ikke UPDATE i mysql

Hejsa
har et uploadsystem som uploader og det hele det eneste problem er at den ikke går ind og skriver navnet på den nye fils navn inde underbrugeren profil

koden ser sådan ud som skulle update det

    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
    $_SESSION["besked"] = "Billedet er blevet uploadet!";
    require("config.php");
    mysql_connect($mysql_host, $mysql_user, $mysql_pw);
    mysql_select_db($mysql_db);
    $upname = &$HTTP_POST_VARS['upname'];
    mysql_query("UPDATE bruger SET  upname = '". $upname ."' WHERE WHERE brugernavn = '" . $_SESSION['brugernavn'] . "' LIMIT 1");
    }else{
    $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>
Avatar billede mr-xmas Nybegynder
11. april 2006 - 20:38 #1
den skriver disse fejl

Warning: move_uploaded_file(/customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/foto/): failed to open stream: Is a directory in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 80

Warning: move_uploaded_file(): Unable to move '/tmp/phpmzMUig' to '/customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/foto/' in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 80

Warning: Cannot modify header information - headers already sent by (output started at /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php:80) in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 91

og i 80 står der
    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
og i 91 står der
    header("Location:". $redir ."");
Avatar billede erikjacobsen Ekspert
11. april 2006 - 20:39 #2
Det skulle være rigeligt med een "WHERE", LIMIT synes også overflødigt men i nyere mysql-er dog lovligt. Men sørg for at få fejlen at vide selv:

mysql_query("UPDATE ...") or die(mysql_error());
Avatar billede mr-xmas Nybegynder
11. april 2006 - 20:54 #3
den laver stadig fejl hele koden ser sådan ud

<?php
session_start();

function alert() {
if(isset($_SESSION["besked"])) {
echo" onload=\"alert('". htmlentities($_SESSION["besked"]) ."');\"";
unset($_SESSION["besked"]);
}else{
echo"";
}
}

// ca. Kb må billedet fylde
$kb = 200;

// min. bredde og højde (minimum???)
$minw = 10;
$minh = 10;

// Det dir som der skal uploades til, med skråstreger
$galleridir = "/privat/bruger/foto/";

// Fuld sti til galleridir
$moveto = $_SERVER["DOCUMENT_ROOT"] . $galleridir;

// Hvor sendes man hen efter upload?
$redir = $_SERVER["PHP_SELF"];

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

// Array med fejlbeskeder sat med $_FILES["upfile"]["error"]
$arg = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". round(($kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!");

// Array med filtyper, til brug for det endelige filnavn
$filetypes = array(1 => "gif", 2 => "jpg", 3 => "png");


    if($_FILES["upfile"]["error"] > 0) {
    $_SESSION["besked"] = strtr($_FILES["upfile"]["error"], $arg);
    header("Location:". $redir ."");
    exit();
    }

    if($_FILES["upfile"]["size"] > ($kb*1024)) {
    $_SESSION["besked"] = "Filen er for stor til upload!!!";
    header("Location:". $redir ."");
    exit();
    }

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    $_SESSION["besked"] = "Valgte fil til upload er ikke en billedfil!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[2] > 3) {
    $_SESSION["besked"] = "Kun gif, jpg og png filer kan uploades!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[0] < $minw) {
    $_SESSION["besked"] = "Billedet er under ". $minw ." px. i bredden!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[1] < $minh) {
    $_SESSION["besked"] = "Billedet er under ". $minh ." px. i højden!";
    header("Location:". $redir ."");
    exit();
    }

    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
    $_SESSION["besked"] = "Billedet er blevet uploadet!";
    require("config.php");
    mysql_connect($mysql_host, $mysql_user, $mysql_pw);
    mysql_select_db($mysql_db);
    $upname = &$HTTP_POST_VARS['upname'];
    mysql_query("UPDATE artobruger SET upname = '".$upname."' WHERE brugernavn = '" . $_SESSION['brugernavn'] . "'") or die(mysql_error());
    }else{
    $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>
Avatar billede erikjacobsen Ekspert
11. april 2006 - 21:04 #4
Må man skrive i dit foto katalog?  "laver stadig fejl" - hvilke fejl?
Avatar billede mr-xmas Nybegynder
11. april 2006 - 21:06 #5
ja den er gjordt til det der "777"

den skriver:

Warning: move_uploaded_file(/customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/foto/): failed to open stream: Is a directory in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 80

Warning: move_uploaded_file(): Unable to move '/tmp/php9CEcKx' to '/customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/foto/' in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 80

Warning: Cannot modify header information - headers already sent by (output started at /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php:80) in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 91
Avatar billede erikjacobsen Ekspert
11. april 2006 - 21:09 #6
Det ku' være $upname sku' indeholde noget.
Avatar billede mr-xmas Nybegynder
11. april 2006 - 21:50 #7
nu har jeg fået lavet så den kun skriver

Warning: Cannot modify header information - headers already sent by (output started at /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/config.php:9) in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 93

men den opdatere ikkke i mysql :(

i linje 93 står der

    header("Location:". $redir ."");
Avatar billede erikjacobsen Ekspert
11. april 2006 - 22:00 #8
Så har du sikkert en tom linie stående i config.php på linie 9 (den fortæller dig præcis hvad der er galt)
At den ikke opdaterer i databasen kan skyldes flere ting - men hvad med at udskrive din SQL-sætning. Måske er $_SESSION['brugernavn'] tom.
Og så skal du tjekke for ekstension på filen, så personer med ureelle hensigter ikke kan uploade en .php fil som et billede. Funktionen getimagesize dur ikke, for det er li'så nemt at snyde den, som at smugle en skål salat forbi en sulten afrikansk hanløve.
Avatar billede mr-xmas Nybegynder
11. april 2006 - 22:06 #9
ja nu skriver den ikke fejlen mere :-)

så det bare med at få den til at update i mysql jeg manger :(
Avatar billede mr-xmas Nybegynder
11. april 2006 - 22:19 #10
session er ikke tom når det gælder andre sider så kan den vel hel ikke være her
Avatar billede erikjacobsen Ekspert
11. april 2006 - 22:22 #11
"...men hvad med at udskrive din SQL-sætning."
Avatar billede mr-xmas Nybegynder
11. april 2006 - 22:24 #12
hvad mener du er ikke helt med :/
Avatar billede erikjacobsen Ekspert
11. april 2006 - 23:26 #13
Skriv den ud med print, så du kan se om den er rigtig
Avatar billede mr-xmas Nybegynder
12. april 2006 - 10:25 #14
hm det kan jeg ikke få til at virke :(

<?php
include("dbconnect.php");
$result = mysql_query("SELECT * FROM artobruger WHERE brugernavn = '$_SESSION[brugernavn]'");
while ($row = mysql_fetch_array($result)){
extract($row);
?>
<h4><?php echo("brugernavn"); ?> upload dit eget profilbillede her :-)</h4>

den skriver bare brugernavn :(
Avatar billede erikjacobsen Ekspert
12. april 2006 - 10:54 #15
Jeg ved ikke hvad du prøver på - mit forslag var blot at udskrive den sql-sætning med din update, som ikke virker.

Hvis du vil se hvad der står i tabellen skal du ganske rigtigt lave en SELECT. Du skal ikke bruge extract. Skriv bare

    echo $row['brugernavn'];
Avatar billede mr-xmas Nybegynder
12. april 2006 - 11:03 #16
jo den skriver mit brugernavn som den skal
Avatar billede mr-xmas Nybegynder
12. april 2006 - 11:19 #17
hva kan der så være galt?
Avatar billede erikjacobsen Ekspert
12. april 2006 - 11:27 #18
Det kommer jo an på hvad du har gjort - hvis du viser hvad du har gjort, hvor du skriver noget ud, hvad det skriver ud, så kan vi måske finde ud af det.
Avatar billede mr-xmas Nybegynder
12. april 2006 - 14:17 #19
hele koden ser sådan ud

<?php
session_start();
function alert() {
if(isset($_SESSION["besked"])) {
echo" onload=\"alert('". htmlentities($_SESSION["besked"]) ."');\"";
unset($_SESSION["besked"]);
}else{
echo"";
}
}

// ca. Kb må billedet fylde
$kb = 200;

// min. bredde og højde (minimum???)
$minw = 10;
$minh = 10;

// Det dir som der skal uploades til, med skråstreger
$galleridir = "/privat/bruger/foto/";

// Fuld sti til galleridir
$moveto = $_SERVER["DOCUMENT_ROOT"] . $galleridir;

// Hvor sendes man hen efter upload?
$redir = $_SERVER["PHP_SELF"];

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

// Array med fejlbeskeder sat med $_FILES["upfile"]["error"]
$arg = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". round(($kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!");

// Array med filtyper, til brug for det endelige filnavn
$filetypes = array(1 => "gif", 2 => "jpg", 3 => "png");


    if($_FILES["upfile"]["error"] > 0) {
    $_SESSION["besked"] = strtr($_FILES["upfile"]["error"], $arg);
    header("Location:". $redir ."");
    exit();
    }

    if($_FILES["upfile"]["size"] > ($kb*1024)) {
    $_SESSION["besked"] = "Filen er for stor til upload!!!";
    header("Location:". $redir ."");
    exit();
    }

    if(false == ($str = getimagesize($_FILES["upfile"]["tmp_name"]))) {
    $_SESSION["besked"] = "Valgte fil til upload er ikke en billedfil!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[2] > 3) {
    $_SESSION["besked"] = "Kun gif, jpg og png filer kan uploades!!!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[0] < $minw) {
    $_SESSION["besked"] = "Billedet er under ". $minw ." px. i bredden!";
    header("Location:". $redir ."");
    exit();
    }

    if($str[1] < $minh) {
    $_SESSION["besked"] = "Billedet er under ". $minh ." px. i højden!";
    header("Location:". $redir ."");
    exit();
    }


    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    $upname = $newname .".". $filtypen;

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
    $_SESSION["besked"] = "Billedet er blevet uploadet!";
    require("config.php");
    mysql_connect($mysql_host, $mysql_user, $mysql_pw);
    mysql_select_db($mysql_db);
    mysql_query("UPDATE artobruger SET (upname) values ('$upname') WHERE brugernavn = '" . $_SESSION['brugernavn'] . "'");
    }else{
    $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>

<html><head><title>Billede upload</title>

</head>

<body<?php alert(); ?>>

<?php

if(!is_dir($moveto)) {
echo"Dir som fil skal flyttes til eksisterer ikke!!!";
}else{
?>
<?php
include("dbconnect.php");
$result = mysql_query("SELECT * FROM artobruger WHERE brugernavn = '$_SESSION[brugernavn]'");
while ($row = mysql_fetch_array($result)){
extract($row);
echo $row['brugernavn'];
?>

<h4> upload dit eget profilbillede her :-)</h4>
<form action="bruger/upload_profilbillede.php" target="_blank" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo($kb*1024); ?>">
<br>
Billedet:<br>
<input name="upfile" type="file" size="32"><br>
<input type="submit" value="Upload">
</form>

<?php
}
}
?>


</body></html>
Avatar billede erikjacobsen Ekspert
12. april 2006 - 14:22 #20
Jeg kan ikke bruge det til noget.
1) Du har ikke en ... or die(mysql_error()); på som før foreslået. Altså ved du ikke en dyt om det går godt eller skidt
2) Du viser ikke at du udskriver din SQL-sætning, som før foreslået. Altså ved vi ikke en dyt om hvor vi skal lede efter fejlen.
Det er næsten som at starte helt forfra ;)
Avatar billede mr-xmas Nybegynder
12. april 2006 - 14:28 #21
er det ikke sådan her du mener det skal se ud

    // FILNAVN UDEN FILTYPE
    $newname = time() ."_". rand(1000, 9999);

    // FILTYPEN
    $filtypen = strtr($str[2], $filetypes);

    $upname = $newname .".". $filtypen;

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $upname)) {
    $_SESSION["besked"] = "Billedet er blevet uploadet!";
    require("config.php");
    mysql_connect($mysql_host, $mysql_user, $mysql_pw);
    mysql_select_db($mysql_db);

    mysql_query("UPDATE artobruger SET (upname) values ('$upname') WHERE brugernavn = '" . $_SESSION['brugernavn'] . "'") or die(mysql_error());
include("dbconnect.php");
$result = mysql_query("SELECT * FROM artobruger WHERE brugernavn = '$_SESSION[brugernavn]'");
while ($row = mysql_fetch_array($result)){
extract($row);
echo $row['brugernavn'];
    }else{
    $_SESSION["besked"] = "Billedet kunne desværre ikke flyttes!";
    }

    header("Location:". $redir ."");
    exit();

}
?>


så skriver den

Parse error: parse error, unexpected T_ELSE in /customers/mr-xmas.dk/mr-xmas.dk/httpd.www/privat/bruger/upload_profilbillede.php on line 94
Avatar billede erikjacobsen Ekspert
12. april 2006 - 15:11 #22
Du mangler en } i din while-løkke - men hvorfor vil du skrive indholdet af tabellen ud. Hvis det ikke virker er der mere fidus at skrive sql-sætningen med update ud.
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