[PHP]Upload deel toevoegen aan formulier

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik zit met een klein probleem waar ik niet uit kom en geen duidelijke informatie over kan vinden. Het zit zo, ik heb zelf een nieuws systeem gemaakt, een script wat een frameset maakt dmv tabellen. (Logobalk, menubalk en dynamische inhoud in het midden van de pagina)

Daarnaast zijn er 2 knoppen in het menu, admin en news. Bij het news gedeelte verzorgt er een script dat data uit de mysql database gelezen wordt en gepost wordt op de news page. het admin paneel bestaat uit een formulier waar ik een upload deel probeer bij te maken voor een afbeelding. De afbeelding wordt geupload en in de database komt een verwijzing naar de locatie van de afbeelding.

Het zit echt zo, het gaat even om deze 2 scripts.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<html>
    <body>
    
    <form action="write.php" method="post">
    <b>Titel:</b><br><input type="text" name="titel"><br>
    <b>Bericht:</b><br><textarea name="bericht" cols="50" rows="4"></textarea><br>
    <b>Image URL:</b><br><input type="text" name="><br>
    <input type="submit" value="Uploaden" name="Uploaden">
  </form><br>

// Upload formulier 

print ("<form method=post action=" . $_SERVER['PHP_SELF'] . " enctype=multipart/form-data> 
Bestand: <input type=\"file\" name=\"bestand\"><br><br> 
<input type=\"submit\" name=\"Uploaden\" value=\"Uploaden\"></form>"); 

  
    </body>
</html>

Ik heb hier 2 codes in staan, het bovenste formulier is zoals het nu is en doet nu alleen nog nieuws plaatsen in de db en de naam van de afbeelding die ik selecteer. Dat laatste wil ik vervangen voor wat er onder staat na // Upload formulier

Enige is dat dit in php is, ik heb dit ook gevonden en probeer er wat van te maken. Dit moet dus 1 worden. Even door naar het volgende script.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
    require "config.php";
    
    $titel = mysql_escape_string(strip_tags($_POST['titel']));
    $bericht = mysql_escape_string(strip_tags($_POST['bericht']));
    $image = mysql_escape_string(strip_tags($_POST['image']));
  
    mysql_query("
        INSERT INTO mesg
        (titel, bericht, image, datumtijd)
    VALUES
        ('{$titel}', '{$bericht}', '{$image}', NOW())
    ");
    
    //image
    $map = "images/"; 
if ($_POST['Uploaden'])
{  
    if (!$_FILES['bestand'])  
        print ("Geef een bestand op!"); 
    else
    {  
        // Bestands naam opvragen 
        $bestand2 = explode("\\", $_FILES['bestand']['name']);  
        $laatste = count($bestand2) - 1;  
        $bestand2 = "$bestand2[$laatste]";   
        
        // Extensie van bestand opvragen 
        $bestand3 = explode(".", $bestand2);  
        $laatste = count($bestand3) - 1;  
        $bestand3 = "$bestand3[$laatste]";   
        $bestand3 = strtolower($bestand3);  
        
        
                // Opslaan van het bestand 
                move_uploaded_file($_FILES['bestand'], "$map$bestand2");   
                print ("Het bestand \"$bestand2\" is met succes geupload!");  
            }  
        }
    }
} 
    //image
    header("Location: http://cyberdyne.hopto.org/upload/files/1/php%20school/tabellen2.php");
?>


Ook hier weer het bovenste deel is een werkend deel gemaakt door mij, wat tussen //image tags staat is code die behoort bij het eerste script net na de // Upload formulier tag.

Zoals het nu is zijn er 2 submits. Ik moet dus zorgen dat et 1 submit wordt en dat het laatste script zijn werk blijft doen kwa posten van nieuws, maar daarbij dus de opgegeven afbeelding ophaalt en opslaat in de database. het probleem is dat ik niet goed weet hoe ik dit aan moet pakken.. wie kan mij een duwtje in de rug geven?

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Je kan toch beide formulieren samenvoegen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
    <body>
    
    <form action="write.php" method="post" enctype="multipart/form-data">
    <b>Titel:</b><br><input type="text" name="titel"><br>
    <b>Bericht:</b><br><textarea name="bericht" cols="50" rows="4"></textarea><br>
    <b>Image URL:</b><br><input type="text" name="><br>
    Bestand: <input type=\"file\" name=\"bestand\"><br><br> 
    <input type="submit" value="Uploaden" name="Uploaden">
  </form><br>
  
    </body>
</html>

Dan moet je nog je PHP aanpassen om de tekst en afbeelding upload beide te verwerken.

Koop of verkoop je webshop: ecquisition.com


Verwijderd

Topicstarter
Okeee, maar..


code:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
    <body>
    
    <form action="write.php" method="post" enctype="multipart/form-data">
    <b>Titel:</b><br><input type="text" name="titel"><br>
    <b>Bericht:</b><br><textarea name="bericht" cols="50" rows="4"></textarea><br>
    Bestand: <input type="file" name="bestand"><br><br> 
    <input type="submit" value="Verzenden" name="Uploaden">
  </form><br>
  
    </body>
</html>


maar..
code:
1
<b>Image URL:</b><br><input type="text" name="><br>
kan er dus uit want dat staat er anders "dubbel"..

Nu doet dit script volgens mij al wat ik wil. voor de tekst inhoud van het formulier wordt write.php aangeroepen. Daarnaast heeft de submit knop de value Uploaden wat als het goed is het binnenhalen van het bestand script triggert. Dat laatste weet ik dus niet helemaal zeker.. Iemand die kan zeggen of value="Uploaden" daadwerkelijk if ($_POST['Uploaden']) triggert? Werkt dit zo?

edit:

Hmm, ik krijg de melding bestand met succes geupload. maar er staat niets in de upload map.... Rechten van de upload map zijn in orde. 0777...

[ Voor 7% gewijzigd door Verwijderd op 13-09-2008 17:26 ]


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Dan moet je even "$map$bestand2" checken!

Koop of verkoop je webshop: ecquisition.com


Verwijderd

Topicstarter
$map zou images moeten zijn, $map = "images/";
$bestand2 is de naam van het bestand nadat het door een extensie, en size check heen is gegaan..

Het zou imho dus toch in de map images moeten staan?

Er gaat in elk geval iets niet helemaal goed want als ik namelijk een php bestand open krijg ik niet eens een melding dat ik een verboden bestand probeer te verzenden... Hij runt het script dus niet eens. Even nogmaals de broncode van het write.php bestand.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
    require "config.php";
    
    $titel = mysql_escape_string(strip_tags($_POST['titel']));
    $bericht = mysql_escape_string(strip_tags($_POST['bericht']));
    $image = mysql_escape_string(strip_tags($_POST['image']));
  
    mysql_query("
        INSERT INTO mesg
        (titel, bericht, image, datumtijd)
    VALUES
        ('{$titel}', '{$bericht}', '{$image}', NOW())
    ");
    

$map = "images/"; 
$max = "100000";  
$ext = "jpg JPG gif GIF png PNG";  

if ($_POST['Uploaden'])
{  
    if (!$_FILES['image'])  
        print ("Geef een bestand op!"); 
    else
    {  
        // Bestands naam opvragen 
        $bestand2 = explode("\\", $_FILES['bestand']['name']);  
        $laatste = count($bestand2) - 1;  
        $bestand2 = "$bestand2[$laatste]";   
        
        // Extensie van bestand opvragen 
        $bestand3 = explode(".", $bestand2);  
        $laatste = count($bestand3) - 1;  
        $bestand3 = "$bestand3[$laatste]";   
        $bestand3 = strtolower($bestand3);  
        
        // Toegestaande extensies opvragen 
        
        $ext = strtolower($ext);  
        $ext = explode(" ", $ext);  
        $aantal = count($ext);  
        
        for ($tel = 0;$tel < $aantal; $tel++)
        {  
            if ($bestand3 == $ext[$tel])
            {  
                $extfout = "nee";  
            }
        }  
    
        if (!$extfout)
        {  
            print ("Het bestand \"$bestand2\" kan niet worden geupload omdat de extensie niet is toegestaan!");  
        }  
        else  
        {  
            if ($_FILES['bestand']['size'] > $max)  
                print ("Het bestand \"$bestand2\" is groter dan $max bytes!");  
            else  
            {
                move_uploaded_file($_FILES['bestand'], "$map$bestand2");   
                print ("Het bestand \"$bestand2\" is met succes geupload!");  
            }  
        }
    }
} 
    
//header("Location: http://cyberdyne.hopto.org/upload/files/1/php%20school/tabellen2.php");
?>


Die onderste regel heb ik maar even een comment van gemaakt omdat ik dan een eventuele fout zou moeten zien. Anders weet ik nog niets... :)

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Check:
$extfout = "nee";

Even later:
if (!$extfout)

Dat werkt niet het! moet een TRUE of FALSE inzitten.... Leer eens een beetje goed debuggen!

Koop of verkoop je webshop: ecquisition.com


Verwijderd

Topicstarter
Hmm, dat foutje corrigeren haalde niets uit, want nog steeds...

"Er gaat in elk geval iets niet helemaal goed want als ik namelijk een php bestand open krijg ik niet eens een melding dat ik een verboden bestand probeer te verzenden... Hij runt het script dus niet eens."

Maargoed, om het maar even goed te leren dan heb ik maar gekozen om dat controle gebeuren er maar even uit te laten. Het ziet er nu zo uit echter doet dit het ook nog niet want regel 15 zit een foutje in waar ik ook niet uit kom... Misschien dat jullie hem wel zien.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    require "config.php";
    
    $titel = mysql_escape_string(strip_tags($_POST['titel']));
    $bericht = mysql_escape_string(strip_tags($_POST['bericht']));
      
    mysql_query("
        INSERT INTO mesg
        (titel, bericht, datumtijd)
    VALUES
        ('{$titel}', '{$bericht}', NOW())
    ");

if(isset($_FILES['image'])) {
    move_uploaded_file($_FILES['image']['tmp_name'], "images/");
    echo "Het bestand is opgeslagen";
} else {
    echo "Selecteer een bestand";
}

//header("Location: http://cyberdyne.hopto.org/upload/files/1/php%20school/tabellen2.php");
?>

Verwijderd

Heb net even je scriptje getest
Warning: move_uploaded_file(images/) [function.move-uploaded-file]: failed to open stream: Is a directory in /var/www/upload/files/1/php school/write.php on line 15
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpcApglT' to 'images/' in /var/www/upload/files/1/php school/write.php on line 15
Het bestand is opgeslagen
PHP:
1
move_uploaded_file($_FILES['image']['tmp_name'], "images/");


ik zou je bestand een filename geven ... bvb

PHP:
1
2
$prentje = basename( $_FILES['bestand']['name']) ;
move_uploaded_file($_FILES['bestand']['tmp_name'], 'images/'.$prentje);

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

Verwijderd schreef op zaterdag 13 september 2008 @ 18:39:

Maargoed, om het maar even goed te leren dan heb ik maar gekozen om dat controle gebeuren er maar even uit te laten. Het ziet er nu zo uit echter doet dit het ook nog niet want regel 15 zit een foutje in waar ik ook niet uit kom... Misschien dat jullie hem wel zien.
Eeh.. kom nou, het is hier een forum en geen helpdesk ;)
Dus: wast heb je zelf al geprobeerd, wat lukte er niet mee? Het is de bedoeling dat je zelf aan het debuggen gaat en niet dat wij dat maar voor je meoten gaan doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mijn broer had me geholpen met die move_upload_file.

En Creepy, het valt allemaal wel mee.. Ik weet nu idd dat ik beter idd op een website had kunnen kijken wat ik met move_upload_file allemaal kan, maar ook wat er voor syntax achter moet.. maarja... als bedenkt dat ik net sinds donderdag bezig ben met php heb ik iig diep respect voor wat ik in elkaar zet in deze paar dagen...

Ik gebruik got niet als een helpdesk, check mijn andere berichten.
Pagina: 1