[PHP] bestand toevoegen in mysql database

Pagina: 1
Acties:
  • 104 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • guillaumemay
  • Registratie: Mei 2002
  • Laatst online: 17-09 15:25
Probleempje. Ik heb een form gemaakt die dit volgende script op gang brengt, waarbij ik een bestandsnaam in een mysql database toevoeg:

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
<?php session_start(); ?>
<?php
include ("inc_connect.php");
if (empty($_POST)){
//eerst controleren of pagina wel is aangeroepen vanuit het formulier
echo("<a href=\"bestandupload.php\">Upload eerst een bestand</a>");
exit();

}else{
//OK, query opbouwen met variabelen in $_POST
$query="INSERT INTO bestanden (bestandsnaam, sim_id)";
$query .= "VALUES ('"; //let hier op de positie van de enkele aanhalingstekens
$query .= $_POST["bestandsnaam"] . "', '" ;
$query .= $_POST["sim_id"] . "');";

$result = mysql_query($query) or die ("Fout: " . mysql_error());
}
?>

<html>
<head>
<title>Bestand succesvol toegevoegd</title>
</head>
<link rel="stylesheet" type="text/css" href="cms.css">
<body>
<?php 
if (!isset($_SESSION["username"])){
    $tekst = "<h1>U bent nog niet aangemeld als Kodos Admin.</h1>
        U kunt <a href=\"login.php\">hier inloggen</a>";
    echo($tekst);
}else{?>

<META HTTP-EQUIV="refresh" CONTENT="2; url=beveiligd.php">
<br><br><br>

<?php
echo("<b>Je " . $_POST["username"] . " hebt succesvol iets in de database gezet </b><br><br> Je zal automatisch
terugkeren achter de schermen");
?>

<?php
}
?>
</body>
</html>

Dit script werkt perfect en het bestandsnaam wordt keurig netjes toegevoegd in een tabel in mijn mysql database.

Nu heb ik dus nog een andere database, waarbij ik een bestand wil uploaden én de bestandsnaam van het geploade bestand in een tabel van mijn database wil toevoegen. Ik heb deze getracht te maken, maar ik heb een probleem:
Het bestand dat ik selecteer wordt keurig netjes ge-resized en geupload naar de gekozen map, maar de naam wordt niet toegevoegd aan de database.

Hier het formulier voor de bestandsupload:
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
<?php session_start(); ?>
<html>
<head>
    <title>Voeg een nieuwe screenshot toe</title>

</head>
<link rel="stylesheet" type="text/css" href="noggeen.css">
<body>
<?php 
if (!isset($_SESSION["username"])){
    $tekst = "<h1>U bent nog niet aangemeld als Admin.<h1>
        U kunt <a href=\"login.php\">hier inloggen</a>";
    echo($tekst);
}else{
?>
<b>Hallo <?php echo($_SESSION["username"]);?>, </b>


<form enctype="multipart/form-data" action="screenshottoegevoegd.php" method="post">
    <!-- MAX_FILE_SIZE must precede the file input field -->
      <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
    <!-- Name of input element determines name in $_FILES array -->
    
<table border="0">
<tr><td align="right" ><font>Voorkant: </font></td><td><input name="userfilevoor" type="file" class="inputfields"  size="30"></td></tr>
<tr><td align="right" ><font>Achterkant: </font></td><td><input name="userfileachter" type="file" class="inputfields"  size="30"></td></tr>
</table>

<hr>
<input type="submit" value="Voeg bestand toe"> <input type="Reset" value="Reset"><br>
</form>


<?php
}
?>
</body>
</html>


En hier het script dat wordt opgeroepen door het formulier. Nogmaals: het uploaden werkt wel perfect, maar het toevoegen van de bestandsnaam werkt niet.
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<?php session_start(); ?>
<?php
include ("inc_connect.php");
if (empty($_POST)){
//eerst controleren of pagina wel is aangeroepen vanuit het formulier
echo("<a href=\"screenshotupload.php\">Upload eerst een screenshot</a>");
exit();

}else{


?>

<html>
<head>
<title>Screenshot succesvol toegevoegd</title>
</head>
<link rel="stylesheet" type="text/css" href="cms.css">
<body>
<?php 
if (!isset($_SESSION["username"])){
    $tekst = "<h1>U bent nog niet aangemeld als Kodos Admin.</h1>
        U kunt <a href=\"login.php\">hier inloggen</a>";
    echo($tekst);
 }else{?>

<?php
//OK, query opbouwen met variabelen in $_POST
$query="INSERT INTO newsarchive (userfilevoor,userfileachter)";
$query .= "VALUES ('"; //let hier op de positie van de enkele aanhalingstekens
$query .= $_POST["userfilevoor"] . "', '" ;
$query .= $_POST["userfileachter"] . "');";

$result = mysql_query($query) or die ("Fout: " . mysql_error());

// BEGIN file upload gedeelte.
$uploaddir = 'plaatje/';
$tmpdir = 'temp/';


// BEGIN UPLOAD EERSTE PLAATJE
$uploadfilevoor = $tmpdir . basename($_FILES['userfilevoor']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfilevoor']['tmp_name'], $uploadfilevoor)) {
   echo "<META HTTP-EQUIV=\"refresh\" CONTENT=\"2; url=screenshotupload.php\"> File is valid, and was successfully uploaded.\n ";

$filenamevoor = $_FILES['userfilevoor']['name'];  
$up_file = $tmpdir.'/'.$filenamevoor;  

     $srcimage = imagecreatefromjpeg($up_file);  

     $width = imageSX($srcimage);  

     $height = imageSY($srcimage);  

if($width <= 250 && $height <= 250){ 

                                $t_width=$width; 

                                } 
                                
                                else { 

                                if ($height < $width){ 

                                                    $t_width = 400; 

                                                        } 

                                                            else { 

                                                                $t_width = 300; 

                                                                } 

                                    }  

     $newh1= $height / $width; 

     $newh2= $newh1 * $t_width; 

     $destimage = imagecreatetruecolor($t_width,$newh2);  

     imagecopyresampled($destimage,$srcimage,0,0,0,0,$t_width,$newh2,$width,$height);  

     ob_start(); 

     ImageJPEG($destimage,'',100); 

        $buffer = ob_get_contents(); 

     ob_end_clean(); 

     $file=$uploaddir.'/'.$filenamevoor; 

     $handle = fopen($file, 'ab');  

     fwrite($handle, $buffer);  

     fclose($handle); 

     $delete=$tmpdir.'/'.$filenamevoor; 

     @unlink($delete);
    

} else {
   echo "Possible file upload attack!\n";
}
print "</pre>";
// EINDE UPLOAD EERSTE PLAATJE


// BEGIN UPLOAD TWEEDE PLAATJE
$uploadfileachter = $tmpdir . basename($_FILES['userfileachter']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfileachter']['tmp_name'], $uploadfileachter)) {
   echo "File is valid, and was successfully uploaded.\n";

$filenameachter = $_FILES['userfileachter']['name'];  
$up_file = $tmpdir.'/'.$filenameachter;  

     $srcimage = imagecreatefromjpeg($up_file);  

     $width = imageSX($srcimage);  

     $height = imageSY($srcimage);  

if($width <= 250 && $height <= 250){ 

                                $t_width=$width; 

                                } 
                                
                                else { 

                                if ($height < $width){ 

                                                    $t_width = 400; 

                                                        } 

                                                            else { 

                                                                $t_width = 300; 

                                                                } 

                                    }  

     $newh1= $height / $width; 

     $newh2= $newh1 * $t_width; 

     $destimage = imagecreatetruecolor($t_width,$newh2);  

     imagecopyresampled($destimage,$srcimage,0,0,0,0,$t_width,$newh2,$width,$height);  

     ob_start(); 

     ImageJPEG($destimage,'',100); 

        $buffer = ob_get_contents(); 

     ob_end_clean(); 

     $file=$uploaddir.'/'.$filenameachter; 

     $handle = fopen($file, 'ab');  

     fwrite($handle, $buffer);  

     fclose($handle); 

     $delete=$tmpdir.'/'.$filenameachter; 

     @unlink($delete);
            }  

else {
   echo "Possible file upload attack!\n";
}

print "</pre>";
// EINDE UPLOAD TWEEDE PLAATJE

// EINDE file upload gedeelte
?>


<?php
//echo("<b> Je " . $_POST["username"] . " hebt succesvol iets in de database gezet </b><br><br> Je zal automatisch
// terugkeren achter de schermen");
?>

<?php
} }
?>
</body>
</html>



Het tabel waarin de bestandsnaam moet komen te staan heet newsarchive, met daarin 3 velden: id, userfilevoor, userfileachter. id is een auto_increment integer en de primary key. De andere 2 velden zijn varchar(1000).

Als ik 2 bestanden upload, dan worden ze dus echt geupload, en in de database komt er wel steeds een rij bij, waarvan id een hoger nummer krijgt, maar de 2 andere velden blijven dan leeg. (in die 2 andere velden moeten de 2 bestandsnamen komen, maar dat gebeurt dus niet).

Ik heb er al uren op zitten staren en kom er niet uit en alles draait nu. :( Misschien dat iemand hier iets ziet?

[ Voor 16% gewijzigd door guillaumemay op 14-12-2005 16:53 ]


Acties:
  • 0 Henk 'm!

  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

Ja dit is eigenlijk niet zo ingewikkeld. Je probeert $_POST['userfilevoor'] in een textveld in de DB te stoppen zo te zien. Terwijl het in de form een file-input is :)

Sowieso zou ik het DB deel na het uploaddeel zetten, zodat je zeker weet dat de bestanden die je in de DB toevoegd ook echt zijn geupload. Dan kan je mooi de bestandsnamen in een var zetten en die in je DB proppen :)

En die fileupload is zo niet echt netjes zegmaar...2 keer dezelfde code, dat moet handiger kunnen (hint ;))

[ Voor 52% gewijzigd door Wokkels op 14-12-2005 16:46 ]

Permanent wintericon!


Acties:
  • 0 Henk 'm!

  • guillaumemay
  • Registratie: Mei 2002
  • Laatst online: 17-09 15:25
maar in m'n andere scriptje, waarbij het me wel lukt om een bestandsnaam in de database toe te voegen, is het ding in de form ok een file input.

Hier het form en het script om een bestand toe te voegen aan een tabel in de database:
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
<?php session_start(); ?>
<html>
<head>
    <title>Voeg een nieuw bestand toe</title>

</head>
<link rel="stylesheet" type="text/css" href="cms.css">
<body>
<?php 
if (!isset($_SESSION["username"])){
    $tekst = "<h1>U bent nog niet aangemeld als Kodos Admin.<h1>
        U kunt <a href=\"login.php\">hier inloggen</a>";
    echo($tekst);
}else{?>
<b>Hallo <?php echo($_SESSION["username"]);?>, Hier kun je een nieuw bestand toevoegen aan een simulatie<br></b>
of klik  <a href="beveiligd.php"><strong>hier</strong></a> om terug te gaan naar het admin hoofdmenu. 

<form action="bestandtoegevoegd.php" method="post">

<table border="0">
<tr><td align="right" ><font>Bestandsnaam: </font></td><td><input name="bestandsnaam" type="file" class="inputfields"  size="30"></td></tr>
<tr><td align="right" ><font>Simulatie:</font></td><td><input name="sim_id" class="inputfields" type="Text"  size="1"> <font size="-2">voer hier het simulatienummer (1 tot 5) in waar het bestand bij hoort.</font></td></tr>
</table>

<hr>
<input type="submit" value="Voeg bestand toe"> <input type="Reset" value="Reset"><br>
</form>
<?php
}
?>
</body>
</html>


en het script (al eerder geplaatst :P)
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
 <?php session_start(); ?>
<?php
include ("inc_connect.php");
if (empty($_POST)){
//eerst controleren of pagina wel is aangeroepen vanuit het formulier
echo("<a href=\"bestandupload.php\">Upload eerst een bestand</a>");
exit();

}else{
//OK, query opbouwen met variabelen in $_POST
$query="INSERT INTO bestanden (bestandsnaam, sim_id)";
$query .= "VALUES ('"; //let hier op de positie van de enkele aanhalingstekens
$query .= $_POST["bestandsnaam"] . "', '" ;
$query .= $_POST["sim_id"] . "');";

$result = mysql_query($query) or die ("Fout: " . mysql_error());
}
?>

<html>
<head>
<title>Bestand succesvol toegevoegd</title>
</head>
<link rel="stylesheet" type="text/css" href="cms.css">
<body>
<?php 
if (!isset($_SESSION["username"])){
    $tekst = "<h1>U bent nog niet aangemeld als Kodos Admin.</h1>
        U kunt <a href=\"login.php\">hier inloggen</a>";
    echo($tekst);
}else{?>

<META HTTP-EQUIV="refresh" CONTENT="2; url=beveiligd.php">
<br><br><br>

<?php
echo("<b>Je " . $_POST["username"] . " hebt succesvol iets in de database gezet </b><br><br> Je zal automatisch
terugkeren achter de schermen");
?>

<?php
}
?>
</body>
</html>


Deze werkt dus wel. Daarom ook mijn verwarring. Ik moest twee dingen doen:
1 - bestandsnaam toevoegen van een lokaal bestand aan een tabel de database.
2 - bestand uploaden en resizen naar een andere locatie

1 is me gelukt. 2 is me gelukt. Maar 1 en 2 tegelijk lukt me niet. :'(

[ Voor 28% gewijzigd door guillaumemay op 14-12-2005 16:59 ]


Acties:
  • 0 Henk 'm!

  • Wokkels
  • Registratie: Juli 2000
  • Laatst online: 29-10-2024

Wokkels

Het lekkerste zoutje

ok het grote verschil zit hem in het enctype :)

In je werkende (met filenaam dus) form heb je geen enctype opgegeven, bij de niet werkende is het multipart/form-data.

Ik heb het even getest, en de door jou gebruikte methode met $_POST['blabla'] werkt NIET als je multipart/form-data gebruikt. Je kunt het imo dus echt beter achteraf doen :)

Permanent wintericon!


Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Zou je voor de filenaam niet de $_FILES[] beter gebruiken ipv de $_POST (in combinatie met 'multipart/form-data' dus) ?
In dit geval dus: $_FILES['bestandsnaam']['name']);

Zie hiero voor de mogelijkheden daarvan.

Je hebt het over een varchar(1000) ergens, ik dacht dat de max 255 was altijd, of ik moet mij enigsinds vergissen dat dit veranderd is. Meen dat je vanaf 255 een Text of MediumText moet gebruiken.

[ Voor 8% gewijzigd door Psychokiller op 14-12-2005 21:50 . Reden: Kleine toevoeging ]


  • guillaumemay
  • Registratie: Mei 2002
  • Laatst online: 17-09 15:25
Wokkels en Psychokiller, hartstikke bedankt! Jullie hebben me gered. Ik heb de $_POST vervangen door $_FILES_etc, zoals Psychokiller had vermeld en het werkt nu. Ook de tip van Wokkels heb ik toegepast, waardoor het beter is om de upload en resize vóór de toevoeging aan de database te zetten. En natuurlijk varchar op 255 gezet. _/-\o_ _/-\o_ dank!
Pagina: 1