[PHP] probleem met insert in mysql en upload van files

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb verschillende tutorials op het web afgezocht i.v.m. het uploaden van bestanden/foto's EN tegelijk ook info over deze foto in een mysql database zetten.
Met de code die hieronder staat zijn er enkele problemen:
- file/foto wordt niet upgeload
- de variabele $titel (die via een input venster wordt meegegeven) wordt niet aan de tabel toegevoegd, terwijl de eerste waarde (=1111) wel wordt toegevoegd.

Kan iemand mij hiermee verder helpen of een stap in de goede richting zetten? Heb al enkele tutorials hierover bekeken en op de php site, zonder bevredigend resultaat.

Alvast bedankt!
Sven.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$username="username";
$password="password";
$database="database";

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

$query = "INSERT INTO test VALUES ('1111','$title','$file1_name')";
mysql_query($query);

copy ($file1,'/images/'.$file1_name);

mysql_close();
?>

<form enctype="multipart/form-data" method="post" action="<?php echo $PHP_SELF ?>">
Title: <input type="text" name="title"><br>
File: <input type="file" name="file1"><br>
<input type="Submit">
</form>

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
mysql_connect(localhost,$username,$password);

localhost is geen constante, dus zet er quotes omheen. Voeg ook eens
PHP:
1
error_reporting(E_ALL)
toe bovenaan je code. Volgens mij zit er nog eea fout.
PHP:
1
$file1_name
bestaat niet in dit script, dus copy() zal een error geven.

@ is ranzig, gepostte variabelen kun je beter benaderen met het $_POST[] array (bijv. $_POST["title"])

kortom, nogal wat fouten in je code. Lees eens een goeie PHP tutorial :)

[ Voor 3% gewijzigd door Verwijderd op 08-02-2003 07:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

$file1_name bestaat wel, want dat is de de variable $file1 en daar de volledige bestandsnaam van.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 08 February 2003 @ 08:36:
$file1_name bestaat wel, want dat is de de variable $file1 en daar de volledige bestandsnaam van.
weet PHP dat ook :? Dat zie ik namelijk nergens in het script staan :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb twee tips:
1. print_r($_POST); daarmee kun je alle variabelen zien die gepost worden.
2. addslashes gebruiken voordat je vars in een db zet.

bonus tip: echo $query ;)

[ Voor 9% gewijzigd door Verwijderd op 08-02-2003 08:55 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 08 February 2003 @ 08:48:
weet PHP dat ook :? Dat zie ik namelijk nergens in het script staan :)

Zie php manual ;)
Verder voor de topicstarter:
lees de faq es door

[ Voor 21% gewijzigd door ACM op 08-02-2003 09:28 ]


Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Overigens lijkt het mij slim om eerst te kijken of de file gekopieerd is voordat je de insert doet. Anders krijg je een DB met corrupte waarden.

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb nu de volgende code staan:

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
<?
$username="username";
$password="password";
$database="database";
$host="host";

mysql_connect($host,$username,$password);
mysql_select_db($database) or die( "Unable to select database"); 

$title = addslashes($title);
$file1 = addslashes($file1);

$sql = "INSERT INTO test VALUES ('','$title','$file1_name')";
$query = mysql_query($query);

copy ($file1,'/images/'.$file1_name);

print_r($_POST);
echo "<br>$sql";

mysql_close();
?>

<form enctype="multipart/form-data" method="post" action="<?php echo $PHP_SELF ?>">
Title: <input type="text" name="title"><br>
File: <input type="file" name="file1"><br>
<input type="Submit">
</form>


De waarden die ik terug krijg van:
PHP:
1
2
print_r($_POST);
echo "<br>$sql";


Array ( [title] => ingegeven waarde )
INSERT INTO tabel VALUES ('','','');

Ik krijg dus blijkbaar enkel title mee, maar zowel title als file1 worden niet aan de database toegevoegd. :?

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je wel een bestand geselecteerd in het formulier :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 08 februari 2003 @ 15:06:
Heb je wel een bestand geselecteerd in het formulier :?
yep

Acties:
  • 0 Henk 'm!

Verwijderd

probeer eens de waarden uit de $_GET of $_POST te halen ..

en voor het bestand uit: $_FILES

Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 10:42
Als je met mysql gaat werken, kan je het beste mysql_error() toevoegen. dan weet je altijd of en wanneer er iets fout gaat.

PHP:
1
mysql_connect(localhost,$username,$password) or die(mysql_error());


PHP:
1
mysql_query($query) or die(mysql_error());

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De waarde die ik terug krijg van $_GET:

Array ( [title] => waarde )


De waarde die ik terug krijg van $_FILES:

Array ( [file1] => Array ( [name] => apache_pb.gif [type] => image/gif [tmp_name] => C:\WINNT\TEMP\php2C.tmp [error] => 0 [size] => 2326 ) )


De waarde die ik terug krijg van echo"$sql":

INSERT INTO test VALUES ('','','');


Ik heb ook mysql_error() toegevoegd, maar er wordt geen foutmelding gegeven.
De waarden worden dus wel degelijk doorgegeven... Maar toch niet in de database gezet en upgeload.

[ Voor 19% gewijzigd door Verwijderd op 08-02-2003 18:31 ]


Acties:
  • 0 Henk 'm!

Verwijderd

zet er nou eens error_reporting(E_ALL) bovenaan in :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op 08 February 2003 @ 18:32:
zet er nou eens error_reporting(E_ALL) bovenaan in :)
Als ik op submit klik, dan krijg ik de volgende foutmelding:

Forbidden
You don't have permission to access /test/
Notice: Undefined variable: PHP_SELF in c:/program files/apache group/apache/htdocs/test/insert.php on line 39 on this server.
--------------------------------------------------------------------------------
Apache/1.3.27 Server at 127.0.0.1 Port 80

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Even een compleet voorbeeld; ik hoop dat ik hierin overal aan gedacht heb ;)
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
<?php

$username = 'username';
$password = 'password';
$database = 'database';
$host = 'localhost';
$table = 'table';
$dest = 'c:/wwwroot/images/';

// Initialize
$msg = '';
$title = '';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

  // Get POST vars
  if (isset($_POST['title'])) $title = $_POST['title'];

  // add slashes when magic quotes is off
  if (!get_magic_quotes_gpc()) {

    $title = addslashes($title);

  }

  // Check for errors
  if ($title == '') $msg .= '<b>No title specified</b><br />';
  if (!$_FILES['file1']['tmp_name']) {

    $msg .= '<b>No file was uploaded</b><br />';

  } else {

    if (is_uploaded_file($_FILES['file1']['tmp_name'])) {

      // check for any errors
      switch ($_FILES['file1']['error']) {

        case 0:
          break;
        case 1:
          $msg .= '<b>Filesize exceeds maximum specified for upload_max_filesize</b><br />';
          break;
        case 2:
          $msg .= '<b>Filesize exceeds MAX_FILE_SIZE specified in the form</b><br />';
          break;
        case 3:
          $msg .= '<b>File was only partially received</b><br />';
          break;
        case 4:
          $msg .= '<b>No file was uploaded</b><br />';
          break;
        case 5:
          $msg .= '<b>Uploaded file is empty</b><br />';
          break;

      }

    } else {

      $msg = '<b>Possible file upload attack</b><br />';

    }

  }

  if (!$msg) {

    if (!$conn_id = @mysql_connect($host, $username, $password)) {

      $msg .= '<b>Could not connect to server: '.mysql_error().'</b><br />';

    } else {

      if (!@mysql_select_db($database, $conn_id)) {

        $msg .= '<b>Could not select database: '.mysql_error().'</b><br />';

      } else {

        // first move the uploaded file
        $file1_name = $_FILES['file1']['name'];
        if (!move_uploaded_file($_FILES['file1']['tmp_name'], $dest.$file1_name)) {

          $msg .= '<b>Unable to move the uploaded file</b><br />';

        } else {

          // if neccesary...
          @chmod($dest.$file1_name, 0664);

          // now insert in the database
          $query = 'insert into '.$table.' values("", "'.$title.'", "'.$file1_name.'")';
          if (!@mysql_query($query, $conn_id)) {

            $msg .= '<b>Unable to insert into table: '.mysql_error().'</b><br />';

          } else {

            mysql_close();
            $msg .= '<b>File '.$file1_name.' was uploaded succesfully and added with title '.$title.' to the database!</b><br />';
            $title = '';

          }

        }

      }

    }

  }

}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>File Upload</title>
</head>
<body>
<?php

if ($msg) {

  $title = stripslashes($title);
  echo 'Messages:<br />'.$msg;

}

?>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Title: <input type="text" name="title" value="<?php echo $title; ?>" /><br />
File: <input type="hidden" name="MAX_FILE_SIZE" value="30000" /><input type="file" name="file1" /><br />
<input type="submit" value="submit" /> 
</form>
</body>
</html>

[ Voor 21% gewijzigd door crisp op 09-02-2003 23:35 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 08 februari 2003 @ 23:45:
Even een compleet voorbeeld; ik hoop dat ik hierin overal aan gedacht heb ;)
:*) ;) Hey crisp, echt cool... Je script loopt als een trein, zoals het hoort! Bedankt voor je tijd en moeite (dit geldt trouwens ook voor de anderen die me hier hebben verder geholpen)!

Cheers,
Sven.
Pagina: 1