[PHP] Probleem uploaden files, tempdir?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Ik ben bezig met het maken van een php / mysql upload script voor pictures. Ik krijg steeds volgende foutmelding te zien als ik print_r($_FILES); doe als debug:

code:
1
Array ( [form_data] => Array ( [name] => DSCF1353.JPG [type] => image/pjpeg [tmp_name] => \temp\php15C.tmp [error] => 0 [size] => 771446 ) )


Hij slaat geen files op zo te zien. Ik heb de php.ini aangepast en deze is nu:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir =\temp

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M


Volgens mij moet dit gewoon werken. Ik begrijp de melding [tmp_name] => \temp\php15C.tmp [error] => 0 [size] niet. Wat wordt hiermee bedoelt?

Onderstaande dingen werken wel gewoon:

$form_data_name=$_FILES["form_data"]["name"];
$form_data_type=$_FILES["form_data"]["type"];
$form_data_size=$_FILES["form_data"]["size"];

Wie kan mij uitleggen wat die melding precies betekend en hoe ik hem kan oplossen? Ik heb zelf al op php.net gekeken en google uitgeput.

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

code:
1
[error] => 0
betekend dat alles goed ging, 0 errors.


code:
1
[tmp_name] => tempphp15C.tmp
is de naam van het tijdelijke bestand.

ik zie niet wat er hier mis gaat, volgens mij gaat alles namelijk precies zoals het moet. :?

[ Voor 4% gewijzigd door OkkE op 02-12-2003 10:59 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Ik begreep dat het niet goed ging aan die errormessage, maar gelukkig blijkt dat niet zo te zijn.

Dan gaat er iets anders mis ben ik bang. Ik dus een geuploade file in een mysql database inserten. Hiervoor gebruik ik de volgende code (alleen de relevante regels weergegeven):

[php]


$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));

$result=MYSQL_QUERY("INSERT INTO ads (id,description,bin_data,filename,filesize,filetype,link,shownno,clickcount) VALUES ('$ads_id','$description','$data','$form_data_name','$form_data_size','$form_data_type','$link','$showcounter' ,'$clickcounter')") or die ("Query failed: ".mysql_error());;

[php]

Ik krijg steeds het bestand niet in de database (0 bytes volgens navicat).

De form waarmee het uploaden plaats vind is als volgt gedefinieerd:

code:
1
2
3
<form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data" name="s">

<input type="file" name="form_data"  size="40">


Dit heb ik uit een voorbeeld op php.net. Ik vrees dat het in dit deel zit:

$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));

Krijg ik soms de form_data niet goed terug uit de form? Hoe kan ik dat checken?

[ Voor 34% gewijzigd door Bor op 02-12-2003 11:42 ]

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

1. Ik zou de files gewoon op de webserver opslaan en alleen de filename in de database opnemen.

2. Ik denk dat je regel 1, $form_data moet vervangen door $_FILE['tmp_name'] of bij oudere PHP versies: $HTTP_POST_FILES['tmp_name'] :)

[ Voor 18% gewijzigd door OkkE op 02-12-2003 11:44 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Als ik dit doe:

code:
1
$data = addslashes(fread(fopen($_FILE['tmp_name'] , "r"), filesize($_FILE['tmp_name'] )));


werkt het ook niet. op de een of andere manier lees ie de file niet in of vult ie de database niet goed. Aangezien php wel een filesize ([size] => 771446 ) teruggeeft ga ik er van uit dat ie de file wel goed inleest.

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Hmm ja zelf ook nooit gewerkt met het opslaan van bestanden in een database, zoals ik al zei zet ik ze altijd gewoon op de server in een map, en zet ik in de database de bestandsnaam. Maar ...
Als je nu eens de fopen en fread los haalt, deze eerst boven de regel $data doet. Met een voorbeeld script van PHP.Net, en dan alle data in een $var stopt, en deze in je addslashes te gebruiken?
Het is maar een gok hoor, ik denk gewoon dat het mis gaat a) tijdens het openen/ophalen van de file, of b) misschien is het de addslashes?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Gezien [tmp_name] => tempphp15C.tmp en de filesize die wel klopt denk ik dat het uploaden wel goed gaat maar dat ergens bij het storen oid iets fout zit. De addslashes moet er wel in volgens het voorbeeld en zonder werkt't ook niet. Ik wil de pictures in de database opslaan omdat ik er wat van wil leren.

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

En het openen van de file (fopen) en het lezen ervan (fread), dat gaat wel goed? Dan ben ik bang dat ik het ook niet weet, ik neem aan dat je database wel het goede veld-type bevat? :)

__ Edit ___

Misschien kan je anders nog eens een wat groter deel van je code posten zoals het nu is. Dat is wat duidelijker als in een paar posts een paar stukjes. :)

[ Voor 52% gewijzigd door OkkE op 02-12-2003 15:37 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

upload_tmp_dir =temp

Op een windows server moet je het hele pad opgeven volgens mij :?

c:\temp

bijvoorbeeld (of is het geen Windows server? Ga der maar vanuit, maar zie niks over de server in je startpost)

[ Voor 37% gewijzigd door Bosmonster op 02-12-2003 15:46 ]


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Het is inderdaad een windows server.

Ik post hieronder een groter deel (alles wat ik nu heb) van de code. Wellicht is dat inderdaad duidelijker:

PHP:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
    // code that will be executed if the form has been submitted:
     $submit=$_POST['submit'];
     if (isset($submit))
    
    {   echo ("Form is gesubmit\n\n");
        //please change the server name username and password according to your mysql server setting
        $DBHost = "localhost"; 
        $DBLogin = "fgf"; 
        $DBPassword = "fsgfgf"; 
        $DBDatabase = "fsgsfgfs"; 

        //connect to database using above settings
        mysql_connect("$DBHost", "$DBLogin", "$DBPassword") or die ("Could not connect to database:".mysql_error());
        @mysql_select_db("$DBDatabase"); 
        echo ("Database geselecteerd<br><br>");
        /* Add backslashes before characters that need to be quoted in database queries etc. 
           These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte). */
        $form_data=$_POST['form_data']; //toevoeging
        $data = addslashes(fread(fopen($_FILE['tmp_name'] , "r"), filesize($_FILE['tmp_name'] )));
        //set the picture id a unix timestamp. I thought this will not have repeatations. You can keep anything what you like
        $ads_id=time();
        //  Now insert the values into the table 
        print_r($_FILES);
        $description=$_POST['$form_description'];
        $showcounter=$_POST['form_count'];
        $clickcounter=$_POST['form_ccount'];
        $link=$_POST['form_link']; // werkt
        $form_data_name=$_FILES["form_data"]["name"];
        $form_data_type=$_FILES["form_data"]["type"];
        $form_data_size=$_FILES["form_data"]["size"];
        
        $result=MYSQL_QUERY("INSERT INTO ads (id,description,bin_data,filename,filesize,filetype,link,shownno,clickcount) VALUES ('$ads_id','$description','$data','$form_data_name','$form_data_size','$form_data_type','$link','$showcounter' ,'$clickcounter')") or die ("Query failed: ".mysql_error());;
        //print the id once the data is updated and this can be omited. Just incase....
        if (!$result)
        { echo ("something went wrong");
        }
                
        echo ("<br><br>Waarde van description is: $description <br>");
        print "<p>This file has the following Database ID: <b>$ads_id</b>";
        //close the mysql database connection...
        MYSQL_CLOSE();
    }
    else
    {
        // else show the form to submit new data:
?>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr> 
            <td>Enter The Add Details</td>
          </tr>
        </table>
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td>
            <!--    Take a note this will work only if enctype in form is given as bellow since 
                    this is how it is done when submitting files in forms.  
            -->
              <form method="post" action="<?php echo $PHP_SELF; ?>" enctype="multipart/form-data" name="s">
                <table width="100%" border="0" cellspacing="1" cellpadding="1">
                  <tr> 
                    <td>File Description:</td>
                    <td> 
                      <input type="text" name="form_description"  size="40">
                      <!-- this is to check is not over sized -->
                      <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
                    </td>
                  </tr>
                  <tr> 
                    <td>File to upload/store in database:</td>
                    <td> 
                      <input type="file" name="form_data"  size="40">
                    </td>
                  </tr>
                  <tr> 
                    <td>Link Of the ad</td>
                    <td> 
                      <input type="text" name="form_link" size="40">
                    </td>
                  </tr>
                  <tr> 
                    <td>Shown Count</td>
                    <td> 
                      <input type="text" name="form_count" size="40" value="0">
                    </td>
                  </tr>
                  <tr> 
                    <td>Clicked Count</td>
                    <td> 
                      <input type="text" name="form_ccount" size="40" value="0">
                    </td>
                  </tr>
                  <tr> 
                    <td>&nbsp;</td>
                    <td> 
                      <input type="submit" name="submit" value="submit">
                    </td>
                  </tr>
                </table>
                </form>
            </td>
          </tr>
        </table>
<?php
    }
?>
</BODY>
</HTML>


Om de een of andere reden krijgt ie de waarde van description ook niet mee.

Ik zit nu te zoeken en snap 1 ding niet. Moet $_FILES['tmp_name'] (uit het voorbeeld) niet $_FILES['userfile']['tmp_name'] zijn? In dit geval is dan userfile form_data?

[ Voor 86% gewijzigd door Bor op 04-12-2003 13:46 ]

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Update:

Ik heb het inlezen van de file veranderd.

PHP:
1
2
$form_data=$_POST['form_data']; //toevoeging 
        $data = addslashes(fread(fopen($_FILE['tmp_name'] , "r"), filesize($_FILE['tmp_name'] )));


is nu geworden:

PHP:
1
2
3
4
$form_data=$_POST['form_data']; //toevoeging
        $tempfilename=$_FILES['form_data']['tmp_name'];
        echo ("<br>Tempnaam is $tempfilename <br><br>");
        $data = addslashes(fread(fopen($tempfilename , "r"), filesize($tempfilename )));


Dat werkt wel. Ik snap alleen niet waarom ik de waarde van description niet netjes meekrijg.

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum


Acties:
  • 0 Henk 'm!

  • Bor
  • Registratie: Februari 2001
  • Nu online

Bor

Coördinator Frontpage Admins / FP Powermod

01000010 01101111 01110010

Topicstarter
Het probleem is opgelost. Er stond een $ te veel. Daar kun je soms echt tijden overheen lezen..

Over Bor | Vraag & Aanbod feedback | Frontpagemoderatie Forum

Pagina: 1