Avatar billede cozey Nybegynder
22. juli 2009 - 11:54 Der er 15 kommentarer og
1 løsning

Uploadsystem med godkendelse

Hej.

Jeg skal bruge et uploadsystem, som kan uploade 2 billeder, samt kontaktoplysninger. men det skal blot uploades til en midlertidig mappe, hvor jeg så som administrator skal logge ind og godkende det inden det bliver publiceret på hjemmesiden, men jeg har ingen idé til hvordan sådan noget skal laves.

Er der en derude der ligger inde med et script, eller lige kort kan forklare hvordan sådan noget skal opbygges?

På forhånd tak.

/Daniel
Avatar billede mcb2001 Nybegynder
22. juli 2009 - 11:57 #1
prøv at søge på google - der er masser af guides derude til at løse fil-upload i php :-)
Avatar billede cozey Nybegynder
22. juli 2009 - 12:09 #2
ja, men jeg har ellers forsøgt... dog uden held. Der er masser af uploadscripts, men kan ikke finde nogen med godkendelse som jeg har beskevet ovenover.

Bruger forresten MySQL DB.
Avatar billede gbjensen65 Nybegynder
22. juli 2009 - 12:28 #3
Skriv et script i PHP hvor der er en html formular hvor brugeren tilføjer sine billeder mm.
de skal så gemmes i en temp folder på din server (husk at tillade at der skrives i mappen.)
De andre informationer gemmer du i din database, husk også at gemme filnavne, der evt. kan genereres automatisk, så du ikke overskriver gamle billeder.

Jeg har et script der kan ændres til dette, kan bare først vise det til dig i aften.

I din database kunne du have følgende felter:

Tabel:
id,navn, adresse, osv, fil1, fil2, godkendt (ja/nej)

hvor alle felter udfyldes når billerne uploades, og du senere godkender.

Når du så vil vise posterne, så skal du bare sortere dem der ikke er godkendt fra.
Avatar billede cozey Nybegynder
22. juli 2009 - 12:50 #4
gbjensen>>>
Takker, forstår godt hvad du mener... ser frem til at se dit script i aften.
Avatar billede gbjensen65 Nybegynder
22. juli 2009 - 21:58 #5
Her kommer et script som jeg bruger til at uploade billeder med.
der er skåret en del væk som du ikke kan bruge, men du må selv tilføje de ekstra felter du skal bruge for flere info felter med mere.

hvis du har spørgsmål så stil dem endelig.

<?php

function Get_Images($imgroot)            // lav liste af billeder
{
    $x=0;
    foreach (glob("$imgroot"."{*.jpg,*.png,*.gif}", GLOB_BRACE) as $path)
    {
        $filename[$x++]=basename($path);
    }
    sort($filename);
    return $filename;
}


$message = "";
if (!isset($_POST["loop"]))
{
    $message = "Tilf&oslash;j et nyt billede";
    $ok=0;
    $text="";
    $loop=1;
}
else
{
    $loop=$_POST['loop']+1;
}
if ($loop>2)
{
    $loop=1;
    $message = "Tilf&oslash;j et nyt billede";
    $ok=0;
}
echo ("<strong>".$message."</strong>");
switch ($loop)
{
    case 1:
   
        ?>
<p> Alle billeder der har noget med øl at gøre kan uploades. Det kan v&aelig;re
etiketter,    billeder af bryggerier og ligende.<br>
Billederne skal helst v&aelig;re i min. 150DPI p&aring; grund af kvaliteten. <br>
Der bliver automatisk lavet et &quot;Thumpnail&quot; af alle billeder der
            uploades.</p>
           
<p>Filformaterne JPG, PNG og GIF kan bruges. </p>
            <p>Et billede m&aring; maximalt fylde 100Kb, men fors&oslash;g venligst at
              komprimere billedet s&aring; meget som muligt, uden at det g&aring;r specielt
              meget ud over billedet (s&aring; bliver der plads til flere billeder)</p>
            <p>Det navn du tildeler dit billede skal helst sige noget
            om billedet f.ske. kunne en etiket fra Ceres kaldes ceres. Alle
              billeder tildeles et l&oslash;benummer, og derfor er et bryggeri navn
              nok. Undlad at bruge store bogstaver og tal til sidst i navnet. &aelig;&oslash;&aring; og
              andre special tegn må <strong>ikke</strong> bruges. Kun a-z, 0-9, - og
              _</p>
            <p>M&aring;<strong> ikke</strong> indeholde
              en extention f.eks. ceres.jpg skriv kun ceres, der tilf&oslash;jes automatisk
              et nr. + extention.</p>
            <p>Navnet som billedet har f&aring;et vises n&aring;r billedet er uploaded.</p>
            <p>Du <strong>skal</strong> v&aelig;lge det land som billedet tilh&oslash;re,
                dvs. er det fra et dansk bryggeri, s&aring; <strong>skal</strong> du
            v&aelig;lge Danmark.</p>
            <?php
            if (isset($_POST['picturename']))
                $picturename=$_POST['picturename'];
            else
                $picturename1="";
            if (isset($_POST['text']))
                $text=$_POST['text'];
            else
                $text="";
            ?>
            <form action="<?php print ($_SERVER['PHP_SELF']."?m=add"); ?>"  method="POST" enctype="multipart/form-data">
            <input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
           
            <table width="100%" border="0">
              <tr>
                <td width="28%"><p>Billedet der skal uploades<br>
                    </p>
                </td>
                <td width="72%"><input name="uploadedfile" type="file" size="60" />
            </td>
              </tr>
              <tr>
                <td>Billedenavn: </td>
                <td width="72%"><input name="picturename" type="text" value=<?php echo ($picturename); ?>>
                Min. 2 tegn. Skriv ingen ext. eller nr. Det tilf&oslash;jes automatisk.</td>
              </tr>
              <tr>
                <td><p>Beskrivelse af billede:<br>
                  f.eks. Ren Pilsner Foretiket.<br>
                  Fra Thisted Bryghus</p>
                </td>
                <td><textarea name="text" cols="60" rows="3" id="text"><?php echo ($text); ?></textarea></td>
              </tr>
            </table>
            <input type="hidden" name="loop" value="<?php echo ($loop); ?>" />
           

            <p>    <input type="submit" name="submit" value="Tilføj nyt billede" >   
            </p>
            </form>
            <?php
    break;
    case 2:
        $err=1;
        $text=addslashes($_POST['text']);
        $errtext="";
        $picturename =strtolower($_POST['picturename']);
        $dot=strpos($picturename,".");
        if ($dot!==false)
            $picturename=substr($picturename,0,$dot);
        if(ereg('[^_a-z0-9-]', $picturename)){
            $errtext="<br>Filnavn må kun indeholde a-z, 0-9, - og _ ";
            $message.="Filnavn må kun indeholde a-z, 0-9, - og _ <br>";
            $err=0;
        }
        if (!$err)
            echo $message;   
        $fileok=0;
        if (eregi('^image/p?jpeg(;.*)?$',$_FILES['uploadedfile']['type']))
        {
            $extension='.jpg';
            $fileok=1;
        }
        if (eregi('^image/png(;.*)?$',$_FILES['uploadedfile']['type']))
        {
            $extension='.png';
            $fileok=1;
        }
        if (eregi('^image/gif(;.*)?$',$_FILES['uploadedfile']['type']))
        {
            $extension='.gif';
            $fileok=1;
        }
        if (!$fileok)
        {
            $errtext.="<br>Ukendt billede format, upload kun jpg, png eller gif";
            $err=0;
        }
        if (strlen($picturename)<2)
        {
            echo ("Filnavn er for kort <br>");
            $errtext.="<br>Filnavn er for kort";
            $err=0;
        }
        if ($_FILES['uploadedfile']['size'] >=102400)
        {
            echo ("Filen er for stor <br>");
            $errtext.="<br>Filen er for stor, et billede må maximalt fylde 102400 bytes, dette her billede fylder: ".$_FILES['uploadedfile']['size']." bytes";
            $err=0;
        }           
        if ($err)
        {
           
            $sql="SELECT imgroot FROM land WHERE id='$landid'";
            $result = mysql_query($sql,$conn) or die(mysql_error());
            $newArray = mysql_fetch_array($result);
            $imgroot = "mappe til billeder";            // skal rettes til
            $nr=0;
            $images=Get_Images($imgroot);                // checker om filnavn er ok
            do
            {
                $nr++;
                $filen=$picturename.$nr.$extension;        // inc. $nr til navn er nyt
                foreach($images as $img)
                    if ($img==$filen)
                        break;
            }
            while ($img==$filen);
           
            $filename=$imgroot.$filen;                    // her gemmes billedet
            $thumb=$imgroot."thumb/".$filen;            // her gemmes et thumpnail
            $ok=1;
            if (is_uploaded_file($_FILES['uploadedfile']['tmp_name']) and copy($_FILES['uploadedfile']['tmp_name'], $filename))
            {
                echo ("<p> Billede er uploaded til www.goodbeer.dk under dette navn: $filename </p>");
               
                # Constants
                define('MAX_WIDTH', 150);                // størrelse på thumpnail
                define('MAX_HEIGHT', 150);
               
                # Load image
                $img = null;
                $ext = strtolower(end(explode('.', $filename)));
                if ($ext == 'jpg' || $ext == 'jpeg') {
                    $img = @imagecreatefromjpeg($filename);
                } else if ($ext == 'png') {
                    $img = @imagecreatefrompng($filename);
                # Only if your version of GD includes GIF support
                } else if ($ext == 'gif') {
                    $img = @imagecreatefromgif($filename);
                }
                # If an image was successfully loaded, test the image for size
                if ($img) {
               
                    # Get image size and scale ratio
                    $width = imagesx($img);
                    $height = imagesy($img);
                    $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height);
               
                    # If the image is larger than the max shrink it
                    if ($scale < 1) {
                        $new_width = floor($scale*$width);
                        $new_height = floor($scale*$height);
               
                        # Create a new temporary image
                        $tmp_img = imagecreatetruecolor($new_width, $new_height);
               
                        # Copy and resize old image into new image
                        imagecopyresampled($tmp_img, $img, 0, 0, 0, 0,
                                        $new_width, $new_height, $width, $height);
                        imagedestroy($img);
                        $img = $tmp_img;
                    }
                }
                else
                    $ok=0;
                # Copy the image
                if ($ok)
                {
                    if($extension=='.jpg')
                    {
                        if (imagejpeg($img, $thumb))
                            echo ("<p>\"Thumbnail\" af uploaded billede er gemt med dette navn: ".$thumb."</p>");
                        else
                        {
                            echo ("<p>\"Thumbnail\" af uploaded billede kunne ikke gemmes med dette navn: ".$thumb."</p>");           
                            $ok=0;
                        }
                    }
                    if($extension=='.png')
                    {
                        if (imagepng($img, $thumb))
                            echo ("<p>\"Thumbnail\" af uploaded billede er gemt med dette navn: ".$thumb."</p>");
                        else
                        {
                            echo ("<p>\"Thumbnail\" af uploaded billede kunne ikke gemmes med dette navn: ".$thumb."</p>");           
                            $ok=0;
                        }
                    }
                    if($extension=='.gif')
                    {
                        if (imagegif($img, $thumb))
                            echo ("<p>\"Thumbnail\" af uploaded billede er gemt med dette navn: ".$thumb."</p>");
                        else
                        {
                            echo ("<p>\"Thumbnail\" af uploaded billede kunne ikke gemmes med dette navn: ".$thumb."</p>");           
                            $ok=0;
                        }
                    }
                }
            }
            else
            {
                echo ("<p> Billede kunne ikke gemmes med dette filnavn: $filename </p>");
                $ok=0;
                ?>
                <form action="<?php print ($_SERVER['PHP_SELF']."?m=add"); ?>"  method="POST">
                <input type="hidden" name="picturename" value="<?php echo ($picturename); ?>" />
                <input type="hidden" name="text" value="<?php echo ($text); ?>" />
                <input type="hidden" name="loop" value="3" />

                <p>    <input type="submit" name="submit" value="Prøv igen" > </p>
                </form>
                <?php
            }
            if ($ok)
            {
                $sql = "INSERT INTO picture (id, userid, dato, text, picturename, path, landid) VALUES ('','$user',now(),'$text','$filen','$imgroot','$landid')";  // skal rettes til!
                if (mysql_query($sql,$conn))
                {
                    $message = "Billede ".$filen." Tilf&oslash;jet til databasen! <br>Du har fået 25 point for dit billede ";
                }
                else
                {
                    $message = "Det gik vist ikke så godt";
                }
                echo ($message."<br>");
                ?>
                <form action="<?php print ($_SERVER['PHP_SELF']."?m=add"); ?>"  method="POST">
                <input type="hidden" name="picturename" value="<?php echo ($picturename); ?>" />
                <input type="hidden" name="text" value="<?php echo ($text); ?>" />
                <p><input type="submit" name="submit" value="Upload endnu et billede!" > </p>
                </form>
                <?php
               
            }
        }
        else
        {
            echo ($errtext); ?>
            <form action="<?php print ($_SERVER['PHP_SELF']."?m=add"); ?>"  method="POST">
            <input type="hidden" name="picturename" value="<?php echo ($picturename); ?>" />
            <input type="hidden" name="text" value="<?php echo ($text); ?>" />
            <input type="hidden" name="loop" value="3" />
            <?php
           
            ?>
            <p>    <input type="submit" name="submit" value="Prøv igen" > </p>
            </form>
            <?php
        }
    break;
}
Avatar billede gbjensen65 Nybegynder
23. juli 2009 - 07:41 #6
Det som mit script her over gør, i første gennemløp (når $loop=1)
er at vise en formular til brugeren, så han/hun kan uploade sit billede og skrive en beskrivelse.
Her skal du tilføje de felter du har brug for i HTML formula'en. inc. et ekstra felt til billede nr. 2
i anden gennemløb (når $loop=2)
checkes billedet for om det et kendt format, ok størrelse og om det navn som det skal gemmes under er ok. er det hele ok, gemmes billedet i mappen $imgroot (hos mig er $imgroot afhængig af hvilket land som billedet er fra, der er en SQL select der henter denne info, den kan du slette)
filnavnet tilføjes et løbenummer for at sikre at der ikke er to bileder der hedder det samme.
i mappen $imgroot/thumbs gemmes der en thumpnail af billedet, den viser jeg som default og ved klik på denne thumpnail vises det oprindelige billede.
Avatar billede gbjensen65 Nybegynder
23. juli 2009 - 07:47 #7
Når billede info gemmes i din billede tabel, skal du have et felt af typen enum, som f.eks. enten kan være "ja" eller "nej" for godkendt eller ej, som naturligvis sættes til "nej" så kan du under visningen af disse poster vælge enten at vise dem er er godkendt eller til dig selv dem der ikke er godkendt, og så godkende dem du vil.

Jeg håber at det er noget du kan bruge.

Der kan godt være en fejl eller to i scriptet da jeg har klippet en del ud og rettet lidt til hen af vejen, uden at få det afprøvet.
Men lidt udfordring skal du jo også have.
Avatar billede public2 Nybegynder
23. juli 2009 - 17:38 #8
Lige en kommentar til det oprindelige spørgsmål.

For mig at se behøver du ikke at overføre billederne til en midlertidig mappe og derefter til en fast mappe når de er så godkendt.

Alt dette er meget "hverdags tankegang", men brugeren der uploader billederne ved ikke hvor placeringen er, og hvis du scripter dig ud af det med PHP, så kan du bare undlade at vise de billeder, som ikke er blevet godkendt af dig, f.eks. ved at kigge i en database hvor stien til billedet er, og så en boolean der enten kan være "godkendt" eller "ikke-godkendt".

Hvis det er så meningen at billederne der ikke godkendes skal slettes, så kan dette også nemt gøres i et admin-modul med php, hvor den så automatisk sletter de billeder du vælger ikke at godkende.

Men det script som gbjensen virker garanteret uden problemer, så det var bare en kommentar til det oprindelige spørgsmål og den tankemåde man kan gøre sig ved at programmere / scripte.

- Public2
Avatar billede mcb2001 Nybegynder
23. juli 2009 - 17:51 #9
#8 - det var pointen med gbjensens post tidligere.....???
Avatar billede gbjensen65 Nybegynder
23. juli 2009 - 20:36 #10
Jo det skrev jeg, uden at tænke nærmere over, men mit script uploader billederne til den folder som de skal gemmes i, det skal bare defineres i sql tabellen om billedet må vises eller ej
Avatar billede cozey Nybegynder
24. juli 2009 - 10:36 #11
gbjensen>>>>
Tusind tak for hjælpen, jeg har ikke brugt dit script, da jeg selv forsøgte mig inden du uploadede det, men jeg brugte opbygningen som du sagde. Jeg har dog ikke lagt billederne i en midlertidig mappen, men bare gemt dem i sammme mappe som alle de andre, men nu har jeg et spørgsmål.

Jeg har en side, decline.php, som skal afvise en tilmelding, og det virker fint med at slette posten fra databasen, men jeg ved ikke helt hvordan jeg sætter den til at slette billedet fra mappen. hvordan gør jeg det?

Her er koden:
<?php
              $telefon = $_GET['telefon'];
              mysql_connect("********", "********", "********") or die(mysql_error());
              mysql_select_db("web329930_5") or die(mysql_error());
              $query = mysql_query("DELETE FROM customer WHERE telefon='$telefon'") OR DIE(mysql_error());
              header('Location:');
?>

Variablen $telefon bliver sendt med i linket, og dette er samtidig navnet på billedet.

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

På forhånd tak.
Avatar billede gbjensen65 Nybegynder
24. juli 2009 - 11:08 #12
Jeg går ud fra at du har filnavnet stående i din tabel, det skal du naturligvis finde frem til først med en select

SELECT filnavn1, filnavn2 FROM customer WHERE telefon='$telefon'

Mysql_query osv. hvor du henter $filnavn1 og $filnavn2

så skal du køre en php kode som denne her

if(!unlink($filnavn1))
  echo ($filnavn1." kunne ikke fjernes</br>");
if(!unlink($filnavn2))
  echo ($filnavn2." kunne ikke fjernes</br>");

Så kan du slette din record i tabellen!
Avatar billede gbjensen65 Nybegynder
24. juli 2009 - 11:14 #13
Du burde måske gøre sletningen af din record i tabellen afhængig af om billederne er blevet slettet:

$ok=1;
if(!unlink($filnavn1))
{
  echo ($filnavn1." kunne ikke fjernes</br>");
  $ok=0;
}
if(!unlink($filnavn2))
{
  echo ($filnavn2." kunne ikke fjernes</br>");
  $ok=0;
}
if($ok)
{
  //Delete record fra tabel!
}

Husk at filnavn skal indeholde stien til billederne hvis de ikke ligger i samme mappe som scriptet!

f.eks. ../billeder/xxx.jpg
Avatar billede cozey Nybegynder
24. juli 2009 - 13:59 #14
hmm... synes jeg sgu lige er lidt svært at overskue, gider du sætte det ind i denne kode(?):


------------------------------------------------------------
<?php
              $telefon = $_GET['telefon'];
              mysql_connect("*************", "***********", "***************") or die(mysql_error());
              mysql_select_db("*************") or die(mysql_error());
              $query = mysql_query("DELETE FROM customer WHERE telefon='$telefon'") OR DIE(mysql_error());
              header('Location: ');
?>

Tak.
Avatar billede cozey Nybegynder
24. juli 2009 - 17:08 #15
Nu har jeg forsøgt noget alligevel, nu sender jeg billede-variablerne med i linket, og de kommer fint med, men der er en fejl, nogen der kan se hvad fejlen er her:

<?php
              $telefon = $_GET['telefon'];
              $billede = $_GET['billede'];
              $billede2 = $_GET['billede2'];
              mysql_connect("********", "*******", "********") or die(mysql_error());
              mysql_select_db("web329930_5") or die(mysql_error());
              $ok=1;
if(!unlink(vinbil/$billede))
{
  echo ($billede." kunne ikke fjernes</br>");
  $ok=0;
}

if(!unlink(vinbil/$billede2))
{
  echo ($billede2." kunne ikke fjernes</br>");
  $ok=0;
}
if($ok)
{
              $query = mysql_query("DELETE FROM customer WHERE telefon='$telefon'") OR DIE(mysql_error());
             
      }  ?>

Den siger at filerne ikke findes, er der en fejl i den måde jeg har skrevet stien på?

på forhånd tak.
Avatar billede cozey Nybegynder
24. juli 2009 - 17:12 #16
Manglede "" , tak for hjælpen.
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