Avatar billede Slettet bruger
28. oktober 2005 - 21:05 Der er 15 kommentarer og
1 løsning

Problemer med en variabel

Hej
Jeg har et script, som upload et billede og smider filnavn og et id-nummer ind i en DB.

id-nummeret hentes fra adresselinien (www.domain.dk/upload.php?id=10). Det henter jeg så ved hjælp af en GET og sætter lig med en ny variabel. Den variabel skal så indsættes i DB, men det virker bare ikke. Jeg kan dog godt udskrive variablen (som kan se i bunden af koden). Jeg får ingen fejl, men i DB er der kun filnavnet som er indsat.

Her kommer koden:


<?php
session_start(); // Bruges kun til vise en besked ved fejl/vellykket upload

$dykker_nummer = $_GET['nummer']; //Henter logbogs nummer, som billedet tilhører

include("config.php");


// Navn på session som viser beskeder
$sess_navn = "besked";

// ca. 80 Kb må billedet fylde
$max_kb = 8000;

// Sti til roden af dit domæne. En "defineret" sti kan også bruges:
// $base_path = "/disksti/til/roden/af/domain/";
$base_path = $_SERVER["DOCUMENT_ROOT"];

// Det dir som der skal uploades til
$image_dir = "billeder";


// Filtyper man kan uploade. Husk på dette uploadscript KUN er til billeder!
// Ved upload tjekkes om getimagesize() er sand, og bruges så sammen med strtr() til at navngive uploaded fil med filtypen
// http://dk.php.net/manual/da/function.getimagesize.php

$filtyper = array(1 => "gif", 2 => "jpg", 3 => "png", 4 => "swf");

// Tjek for skriverettigheder til uploaddir? 1 = ja, 0 = nej
$tjek_skriv = 1;


// HERUNDER BEHØVER/SKAL DU IKKE ÆNDRE !!!!!

function check_perms($var) {

// http://dk.php.net/manual/da/function.fileperms.php

$perms = fileperms($var);

if (($perms & 0xC000) == 0xC000) {
  // Socket
  $info = 's';
} elseif (($perms & 0xA000) == 0xA000) {
  // Symbolic Link
  $info = 'l';
} elseif (($perms & 0x8000) == 0x8000) {
  // Regular
  $info = '-';
} elseif (($perms & 0x6000) == 0x6000) {
  // Block special
  $info = 'b';
} elseif (($perms & 0x4000) == 0x4000) {
  // Directory
  $info = 'd';
} elseif (($perms & 0x2000) == 0x2000) {
  // Character special
  $info = 'c';
} elseif (($perms & 0x1000) == 0x1000) {
  // FIFO pipe
  $info = 'p';
} else {
  // Unknown
  $info = 'u';
}

// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
          (($perms & 0x0800) ? 's' : 'x' ) :
          (($perms & 0x0800) ? 'S' : '-'));

// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
          (($perms & 0x0400) ? 's' : 'x' ) :
          (($perms & 0x0400) ? 'S' : '-'));

// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
          (($perms & 0x0200) ? 't' : 'x' ) :
          (($perms & 0x0200) ? 'T' : '-'));

return $info;
}

function badchar($var) { // Fjerner "bad" tegn i filnavn

$bad = "\\\"'*^´`+}{][£!§½%¤#=¨áàãââçéèêëìíîïñòóôõöùúûüýÿ?,\$";

    for($i = 0; $i < strlen($bad); $i++) {
    $var = str_replace($bad[$i], "", $var);
    }

$replace = array("æ" => "ae", "ø" => "oe", "å" => "aa", "Æ" => "Ae", "Ø" => "Oe", "Å" => "AA", " " => "_");

    foreach($replace as $key => $value) {
    $var = str_replace($key, $value, $var);
    }

return $var;
}

$errors = array(); // array for at vise evt. fejl i dir m.m.

if(!is_dir($base_path ."/". $image_dir)) {
    if(is_dir($image_dir)) {

    $moveto = $image_dir ."/";

        if(true == $tjek_skriv) {
        $rettigheder = strtolower(check_perms($moveto));
            if($rettigheder != "drwxrwxrwx") {
            $errors[] = "Tjek at der er skriverettigheder til uploaddir, \$image_dir = ". $image_dir;
            }
        }
       
    }else{
    $errors[] = "Dir som der skal uploades til findes ikke!!! \$image_dir = \"". $image_dir ."\"";
    }

}else{

$moveto = $base_path ."/". $image_dir ."/";

    if(true == $tjek_skriv) {
    $rettigheder = strtolower(check_perms($moveto));
        if($rettigheder != "drwxrwxrwx") {
        $errors[] = "Tjek at der er skriverettigheder til uploaddir, \$image_dir = ". $image_dir;
        }
    }
}


$ver = phpversion();

if($ver < 4.1) {
$errors[] = "Scriptet kan kun bruges fra PHP ver. 4.1.0 og op";
}

$error_code = true;
if($ver < 4.2) {
$error_code = false;
}



if (isset($_FILES["upfile"]) && empty($errors)) {


    if(true == $error_code) { // Fra PHP ver. 4.2.0 får man også ["error"] med ved upload
    $arg = array(1 => "Filen er større end tilladt upload i php.ini", 2 => "Filen er større end ". floor(($max_kb*1024)/1000) ." Kb", 3 => "Sorry, men kun en del af filen blev uploadet", 4 => "Vælg en fil til upload!", 6 => "upload_tmp_dir er ikke defineret korrekt!");

        if($_FILES["upfile"]["error"] > 0) {
        $_SESSION[$sess_navn] = "Fejl ved upload: ". strtr($_FILES["upfile"]["error"], $arg);
        header("Location:". $_SERVER["PHP_SELF"]);
        exit();
        }

    }else{

        if(trim($_FILES["upfile"]["name"]) == "") {
        $_SESSION[$sess_navn] = "Du skal vælge en fil til upload!!!";
        header("Location:". $_SERVER["PHP_SELF"]);
        exit();
        }
    }


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

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

    if(!array_key_exists($str[2], $filtyper)) {
    $_SESSION[$sess_navn] = "Filtypen er ikke tilladt for upload!";
    header("Location:". $_SERVER["PHP_SELF"]);
    exit();
    }

    $file_name = $_FILES["upfile"]["name"];

    $typen = end(explode(".", $file_name));
    $filnavn = substr($file_name, 0, -strlen($typen));

        if(empty($filnavn)) {
        $filnavn = $file_name;
        }

        if(substr($filnavn, -1, 1) !=".") {
        $filnavn = $filnavn .".";
        }

    $filnavn = $filnavn . strtr($str[2], $filtyper);
    $filnavn = badchar($filnavn);

        if(is_file($moveto . $filnavn)) {
            $i = 0;
            while (is_file($moveto . $filnavn)) {
            $i++;
            $filnavn = sprintf("%03u", $i) ."_". $filnavn;
            }
        }

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"], $moveto . $filnavn)) {
    chmod($moveto . $filnavn, 0644);

$dyk_nummer = $GLOBALS['dykker_nummer'];

$insertSQL = ("INSERT into logbog_billeder (`dyk_nummer`, `fil`) values ('$dyk_nummer', '$filnavn')");
            mysql_query($insertSQL) or die (mysql_error());

 
    $_SESSION[$sess_navn] = "Billedet er blevet uploadet!";




    }else{
    $_SESSION[$sess_navn] = "Billedet kunne desværre ikke flyttes!";
    }


    header("Location:". $_SERVER["PHP_SELF"]);
    exit();
}

?><html><head><title>Billed upload</title>
</head>

<body>

<?php




if(!empty($errors)) {
$tekst = implode("\n\r", $errors);
echo nl2br(htmlentities($tekst));

}else{

?>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">

Accepterede filtyper for upload er <?php echo implode(", ", $filtyper); ?><br />
Max. filst&oslash;rrelse for upload er <?php echo floor(($max_kb*1024)/1000); ?> Kb<br /><br />
Billederne bliver upload til følgende dyknummer: <?php echo $dykker_nummer ?> <br>

<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo($max_kb*1024); ?>">
<input name="upfile" type="file" size="32"> <input type="submit" value="Upload">
</form>

<?php


  // Viser en evt. besked sat med session
    if(isset($_SESSION[$sess_navn])) {
    echo htmlentities($_SESSION[$sess_navn]);
    unset($_SESSION[$sess_navn]);

    }
}
?>

</body></html>
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:12 #1
$_GET['nummer']    ?? Men du siger den hedder: id
Avatar billede Slettet bruger
28. oktober 2005 - 21:16 #2
Ja ok. Men den hedder rigtig nummer. Jeg kan også godt udskrive værdien på siden. Det gør jeg i den 13 linie fra brunden (Billederne bliver upload til følgende dyknummer: <?php echo $dykker_nummer ?> <br>) og der bliver den udskrevet.

Men jeg kan ikke sætte den ind i min sql sætning. Det er der problemet ligger.

Men ellers godt set
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:20 #3
Ok, men så er der ikke andet der er forkert fra din side?

Hvorfor ikke bare bruge $dykker_nummer. Er det i en funktion skriver du blot
    global $dykker-nummer;

(jeg kan ikke gennemskue om du er i en funktion - rimeligt uoverskueligt ;)
Avatar billede Slettet bruger
28. oktober 2005 - 21:28 #4
Ja det er i en funktion, at jeg indsætter det i en DB, men variablen er jo uden for funktionen og så kan man jo godt benytte den inde i funktionen (eller det kan man i C). Jeg har prøvet global, men det er muligt at jeg bruger den forkert.
Er det sådan her?


$dykker-nummer = $_GET['nummer'];
global $dykker-nummer;

function upload {
bla
bla

//henter variabel
echo $dykker-nummer;

eller hvordan skal jeg bruge den?
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:33 #5
Inde i den funktion hvor du bruger $dykker_nummer, skal du skrive
    global $dykker_nummer;

Glem så lige den der
    $dykker_nummer = $_GET['nummer'];
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:34 #6
Nej, den skal du have. Det er
    $dyk_nummer = $GLOBALS['dykker_nummer'];
du skal glemme
Avatar billede Slettet bruger
28. oktober 2005 - 21:37 #7
ok. Det skal jeg så skrive lige efter jeg har hente dykker_nummer fra min $_GET['dykker_nummer'] ikke?
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:38 #8
Inde i den funktion hvor du bruger $dykker_nummer, skal du skrive
    global $dykker_nummer;
Avatar billede jakobdo Ekspert
28. oktober 2005 - 21:39 #9
Hvorfor bruger du ikke "bare":
$dyk_nummer = mysql_escape_string($_GET["dykker_nummer"]);
lige inden du kalder INSERT INTO...
Avatar billede Slettet bruger
28. oktober 2005 - 21:52 #10
Fandt en løsning. Måske ikke så smart, men hvad. Hvis I smider et svar så få I point
Avatar billede erikjacobsen Ekspert
28. oktober 2005 - 21:52 #11
Ingen point til mig, tak.
Avatar billede jakobdo Ekspert
28. oktober 2005 - 22:03 #12
Jeg vil kun have point hvis det var mit svar som kunne bruges, eller behold dem selv.
Avatar billede Slettet bruger
28. oktober 2005 - 22:10 #13
Jeg brugte ikke dit svar, da det var en anden fejl, som var grunden til det ikke virkede.
Det var fordi, at når jeg klikker upload, så loader siden sig selv, men uden ?nummer=12 og derved er nummer tom og derfor kommer der et nul ind.

Min løsning blev så at lave et hidden input felt, som får tallet og så requester jeg det når siden bliver loadet. Hvis I forstår.

Vi dog sige at jeres forslag ville have virket, hvis jeg ikke havde lavet en fejl i koden. Så synes nu I skulle smide et svar
Avatar billede jakobdo Ekspert
28. oktober 2005 - 22:13 #14
Så skidt da! :o)
Avatar billede Slettet bruger
28. oktober 2005 - 22:14 #15
Jeg er så god til at overtale folk :-P
Avatar billede jakobdo Ekspert
28. oktober 2005 - 22:22 #16
Jeg takker for point! :o)
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