[PHP/Mysql] File uploads *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik ben een script aan het maken dat ik mijn vinyl in een database kan zetten met eventueel een plaatje. Ik heb nu een simpele MySQL database waar ik onder andere Titel, artiest, Label etc in op sla.

Nu wil ik ook plaatjes kunnen uploaden zodat deze in het overzicht getoont worden. Maar ik een plaatje HOEFT niet. Dus ik zou graag willen afvangen of het veld waar ik een image mee selecteer
code:
1
<input type="file" name="file">


leeg is of niet. Ik voeg namelijk de filename in in de database. Als er geen image geselecteerd is moet er iets van "none" ofzo in komen te staan.

Tot slot het script waar ik nu mee opsla in de database(addvinyl.php):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include ('dbconnect.php');
$label = isset($_POST['label']) ? $_POST['label'] : '';
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : '';
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : '';
$titel = isset($_POST['titel']) ? $_POST['titel'] : '';
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : '';
$path = "images"; // deze moet 777 privileges hebben chmod 777. 
if($HTTP_POST_FILES["file"]) 
copy($HTTP_POST_FILES["file"]["tmp_name"],"$path/".$HTTP_POST_FILES["file"]["name"].""); 

$query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers, image) 
               VALUES ('". addslashes($artiest) . "', '". addslashes($label) . "', 
                       '". addslashes($labelnmr) . "', '". addslashes($titel) . "', 
                       '". addslashes($nummers) . "', '".$HTTP_POST_FILES["file"]["name"]."')";
$result = mysql_query($query) or die(mysql_error());
header ('location:addvinyl.php');


De manier waarop ik het nu dus doe, is dat ik er vanuit ga dat er een plaatje ingestopt word. Maar hoe zorg ik er nou voor dat als er geen plaatje geselecteerd is dat het woordje "none" oid in de database komt te staan?

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ipv
$HTTP_POST_FILES["file"]["name"]
in je query doe je
(empty($HTTP_POST_FILES["file"]["name"]) ? "none" : $HTTP_POST_FILES["file"]["name"])
dan neemt ie none als ie leeg is en de waarde als ie niet leeg is.
maar waarom wil je persee none hebben? een lege waarde zegt toch netzoveel?


edit
of doe het liever zo:
PHP:
1
2
3
4
5
6
7
8
9
if($HTTP_POST_FILES["file"])
{
    copy($HTTP_POST_FILES["file"]["tmp_name"], $path."/".$HTTP_POST_FILES["file"]["name"]."");
    $filename = $HTTP_POST_FILES["file"]["name"];
}
else
{
    $filename = "none";
}


en dan gebruik je $filename in je query

[ Voor 62% gewijzigd door marty op 31-01-2004 14:40 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
ja ja dat zou ook kunnen, maar nu kan ik als ik ze ophaal een if statement maken dat als er none in dat veld staat er geen image getoond moet worden.

Dit kan ook wel als het veld leeg is maar.

Maar hoe zet ik dat in een if statement in dit script dan?

gewoon zo? :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
include ('dbconnect.php'); 
$label = isset($_POST['label']) ? $_POST['label'] : ''; 
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : ''; 
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : ''; 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : ''; 
$path = "images"; // deze moet 777 privileges hebben chmod 777. 
if($HTTP_POST_FILES["file"]){
copy($HTTP_POST_FILES["file"]["tmp_name"],"$path/".$HTTP_POST_FILES["file"]["name"].""); 

$query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers, image) 
               VALUES ('". addslashes($artiest) . "', '". addslashes($label) . "', 
                          '". addslashes($labelnmr) . "', '". addslashes($titel) . "', 
                       '". addslashes($nummers) . "', '".$HTTP_POST_FILES["file"]["name"]."')"; 
$result = mysql_query($query) or die(mysql_error()); 
header ('location:addvinyl.php');
}else if(empty($HTTP_POST_FILES["file"]["name"]) ? "none" : $HTTP_POST_FILES["file"]["name"]){
$query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers, image) 
               VALUES ('". addslashes($artiest) . "', '". addslashes($label) . "', 
                          '". addslashes($labelnmr) . "', '". addslashes($titel) . "', 
                       '". addslashes($nummers) . "', '".$HTTP_POST_FILES["file"]["name"]) ? "none"."')"; 
$result = mysql_query($query) or die(mysql_error()); 
header ('location:addvinyl.php');

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Hmm,

Ik snap niet helemaal hoe ik het moet aanpakken. Ik heb nu met een if en else statement een situatie ALS er een image is. Dan zet hij de naam dus in de database.

Het andere geval werkt niet :( Dat is dus de situatie als het "file" veld leeg gelaten wordt)

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ViNyL schreef op 31 januari 2004 @ 14:40:
ja ja dat zou ook kunnen, maar nu kan ik als ik ze ophaal een if statement maken dat als er none in dat veld staat er geen image getoond moet worden.

Dit kan ook wel als het veld leeg is maar.

Maar hoe zet ik dat in een if statement in dit script dan?

[knip]
heel simpel. als je nu de gegevens ophaalt doe je:
PHP:
1
2
3
4
5
6
7
8
9
while ($row= mysql_fetch_assoc($result))
{
     // ipv
    if ($row['image'] != "none)
        echo $row['image'];
     // doe je
    if (!empty($row['image']))
        echo $row['image'];
}


dus, alleen als $row['image'] niet leeg is (en dus een link naar een plaatje bevat) geef je die weer
zie ook http://www.php.net/empty

edit
m'n eerste suggestie had je niet helemaal goed begrepen. ik zat eerst hier aan te denken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
include ('dbconnect.php');
$label = isset($_POST['label']) ? $_POST['label'] : '';
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : '';
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : '';
$titel = isset($_POST['titel']) ? $_POST['titel'] : '';
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : '';
$path = "images"; // deze moet 777 privileges hebben chmod 777.
if($HTTP_POST_FILES["file"])
copy($HTTP_POST_FILES["file"]["tmp_name"],"$path/".$HTTP_POST_FILES["file"]["name"]."");

$query = "
        INSERT INTO platen
            (artiest, label, labelnmr, titel, nummers, image)
        VALUES (
            '". addslashes($artiest) . "',
            '". addslashes($label) . "',
            '". addslashes($labelnmr) . "',
            '". addslashes($titel) . "',
            '". addslashes($nummers) . "',
            '".(empty($HTTP_POST_FILES["file"]["name"]) ? "none" : $HTTP_POST_FILES["file"]["name"])."')";
$result = mysql_query($query) or die(mysql_error());
header ('location:addvinyl.php');


maar bedacht later dat dit iets beter was:
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
include ('dbconnect.php');
$label = isset($_POST['label']) ? $_POST['label'] : '';
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : '';
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : '';
$titel = isset($_POST['titel']) ? $_POST['titel'] : '';
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : '';
$path = "images"; // deze moet 777 privileges hebben chmod 777.
if($HTTP_POST_FILES["file"])
{
    copy($HTTP_POST_FILES["file"]["tmp_name"], $path."/".$HTTP_POST_FILES["file"]["name"]."");
    $filename = $HTTP_POST_FILES["file"]["name"];
}
else
    $filename = "none";
    

$query = "
        INSERT INTO platen
            (artiest, label, labelnmr, titel, nummers, image)
        VALUES (
            '". addslashes($artiest) . "',
            '". addslashes($label) . "',
            '". addslashes($labelnmr) . "',
            '". addslashes($titel) . "',
            '". addslashes($nummers) . "',
            '".$filename."')";
$result = mysql_query($query) or die(mysql_error());
header ('location:addvinyl.php');

[ Voor 60% gewijzigd door marty op 31-01-2004 16:20 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ja maar het stukje code van daarnet werkt niet goed. ik krijg een foutmelding:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?
include ('dbconnect.php'); 
$label = isset($_POST['label']) ? $_POST['label'] : ''; 
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : ''; 
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : ''; 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : ''; 
$path = "images"; // deze moet 777 privileges hebben chmod 777. 

if($HTTP_POST_FILES["file"]) 
{ 
    copy($HTTP_POST_FILES["file"]["tmp_name"], $path."/".$HTTP_POST_FILES["file"]["name"].""); 
    $filename = $HTTP_POST_FILES["file"]["name"]; 
} 
else 
{ 
    $filename = "none"; 
}
$query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers, image) 
               VALUES ('". addslashes($artiest) . "', '". addslashes($label) . "', '". addslashes($labelnmr) . "', '". addslashes($titel) . "', '". addslashes($nummers) . "', '".$HTTP_POST_FILES["file"]["name"]."')"; 
                $result = mysql_query($query) or die(mysql_error());
header ('location:addvinyl.php');
?>

Krijg ik deze melding:

Warning: Unable to open '' for reading: No such file or directory in /var/www/html/vinyl/do_addvinyl.php on line 12

Warning: Cannot add header information - headers already sent by (output started at /var/www/html/vinyl/do_addvinyl.php:12) in /var/www/html/vinyl/do_addvinyl.php on line 22

Hij wil dus nog steeds iets kopieren maar dat kan dus niet want er is geen plaatje...

Acties:
  • 0 Henk 'm!

  • Kaasplank
  • Registratie: Februari 2001
  • Niet online
php gebruikt alweer een tijdje $_FILES

en zo kijk je of ie leeg is:
PHP:
1
2
3
if($_FILES['file']['error'] == 4){
 // leeg
}


leeswerk:
http://nl.php.net/manual/nl/function.move-uploaded-file.php
http://nl.php.net/manual/...#reserved.variables.files
http://nl.php.net/manual/nl/features.file-upload.php

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ahh hoera!

Dat laatste deed de truc idd..! Dank voor jullie hulp.
Dit heb ik er nu van gebakken:
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
include ('dbconnect.php'); 
$label = isset($_POST['label']) ? $_POST['label'] : ''; 
$labelnmr = isset($_POST['labelnmr']) ? $_POST['labelnmr'] : ''; 
$artiest = isset($_POST['artiest']) ? $_POST['artiest'] : ''; 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$nummers = isset($_POST['nummers']) ? $_POST['nummers'] : ''; 
$path = "images"; // deze moet 777 privileges hebben chmod 777. 
if($_FILES['file']['error'] == 4) {
    $query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers) 
              VALUES ('". addslashes($artiest) . "',
                     '". addslashes($label) . "',
                     '". addslashes($labelnmr) . "',
                     '". addslashes($titel) . "', 
                     '". addslashes($nummers) . "')";
    $result = mysql_query($query) or die(mysql_error()); 

header ('location:addvinyl.php');
} else if ($_FILES["file"]){
copy($_FILES["file"]["tmp_name"],"$path/".$_FILES["file"]["name"].""); 
    $query = "INSERT INTO platen (artiest, label, labelnmr, titel, nummers, image) 
              VALUES ('". addslashes($artiest) . "',
                      '". addslashes($label) . "',
                      '". addslashes($labelnmr) . "',
                      '". addslashes($titel) . "',
                      '". addslashes($nummers) . "',
                      '".$_FILES["file"]["name"]."')"; 
    $result = mysql_query($query) or die(mysql_error()); 

header ('location:addvinyl.php');}
Pagina: 1