[php] radiobutton + filefield

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ik ben een pagina voor een simpel nieuws submit script aan het maken waarmee je het nieuws kunt toevoegen.

De pagina bevat deze velden:
Titel
Inhoud
Plaatje (uploaden) = File field
Plaatje (kiezen uit plaatjes die al geupload zijn)

Nu wil ik op de pagina die het in de database opslaat kijken welke van de 2 gekozen is. Als je een plaatje wilt uploaden dan moet dit gebeuren. Wil je een plaatje gebruiken wat al is geuploaden dan moet dit gebeuren.

Ik heb het volgende al:

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
include ('dbconnect/dbconnect.php'); 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$inhoud = isset($_POST['inhoud']) ? $_POST['inhoud'] : ''; 
$dskfile = isset($_POST['dskfile']) ? $_POST['dskfile'] : ''; //RADIOBUTTON inhoud
$path = "../images";
if($_FILES["file"]){
copy($_FILES["file"]["tmp_name"],"$path/".$_FILES["file"]["name"].""); 
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]."',
                     '".$_FILES["file"]["name"]."')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php');
} else if (isset($dskfile)){
$query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]."',
                     '$dskfile')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php');
}else{
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]. "')";
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php');
};


Bij de eerste if kijk ik of het file field is gebruikt. Zo ja, upload het plaatje en insert de naam in de database.

Bij de tweede else if Als er een radiobutton geselecteerd is moet deze gebruikt worden. Het plaatje staat al op de server dus alleen de naam gaat de database in.

De derde else moet gebruikt worden als beide niet gebruikt worden, ook dit moet kunnen.

Het uploaden werkt nu al, maar zo gauw ik nu een radiobutton aanvink krijg ik deze melding

code:
1
2
3
4
5
6
7
Warning: Unable to open '' for reading: No such file or directory in
/var/www/html/test/admin/do_addnieuws.php on line 9

Warning: Cannot add header information - headers already sent by 
(output started at /var/www/html/test/admin/do_addnieuws.php:9) in 
/var/www/html/test/admin/do_addnieuws.php 
on line 17

Het lijkt er dus op dat mijn if else constructie niet helemaal goed werkt :(

Iemand ideeen?

[ Voor 12% gewijzigd door ViNyL op 04-03-2004 19:01 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Waarom gebruik je deze niet gewoon? move_uploaded_file

edit:
En bij de location header hoort nog een spatie na de dubbele punt

[ Voor 29% gewijzigd door Spider.007 op 04-03-2004 18:34 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
De upload functie werkt goed als ik deze alleen gebruik. De radiobuttons ook. Maar zo gauw ik wil kijk of
A. er iets geupload moet worden
B. er alleen een pad in de database gezet moet worden of
C. helemaal nix

Dan gaat het fout. Het ligt dus aan de if else loop denk ik. Maar wat ??

Acties:
  • 0 Henk 'm!

Verwijderd

Je leest de filename vanuit $_POST, terwijl dit $_FILES moet zijn.

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
nee, dat klopt ook, In mijn HTML formulier bevat de radiobutton als value de naam van de image die middels een functie in php opgevraagt wordt.

Er is niets mis met het uploaden en het afhandelen van de radiobuttons.

Het enige wat niet lukt is dit:

Het is OF een fileuploaden, OF een file kiezen die al geupload is OF niets.

Eerst had ik alleen de upload functie. Toen keek ik met deze code:
PHP:
1
2
3
4
5
6
7
8
9
if($_FILES['file']['error'] == 4) {
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]. "')";
    $result = mysql_query($query) or die(mysql_error()); 

header ('location:addnieuws.php');

of het upload veld gebruikt werd. Was dat niet zo dat werd er ook niets in de database gestopt. Ik moest dit er nu uithalen, want er zitten nu ook radiobuttons bij waar je een keuze uit kunt maken. Als ik dan dit er tussen liet staan dan werd er zowieso niets naar de database geschreven voor het plaatje.

Kan je niet iets als "GOTO" gebruiken onder php? Dan kan ik gewoon zeggen:

Wordt er een radio button gebruikt? JA? schrijf pad naar database
NEE? GOTO volgende
Wordt er een upload gedaan? JA? upload plaatje, schrijf pad naar database
NEE? GOTO volgende
etc etc

[ Voor 28% gewijzigd door ViNyL op 04-03-2004 18:50 ]


Acties:
  • 0 Henk 'm!

  • DanielB
  • Registratie: Augustus 2003
  • Laatst online: 21-08 17:20
gebruik ipv "else if" eens "elseif", dat zou moeten werken

Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Nee dan krijg ik dezelfde foute melding. Ik denk omdat hij niet weet wat er moet gebeuren als het file field leeg is.

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Heb je in je <form> wel het volgende staan?
code:
1
enctype="multipart/form-data"

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Jup, staat er gewoon in.

Met deze code:
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
<?
include ('dbconnect/dbconnect.php'); 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$inhoud = isset($_POST['inhoud']) ? $_POST['inhoud'] : ''; 
$dskfile = isset($_POST['dskfile']) ? $_POST['dskfile'] : ''; //RADIOBUTTON inhoud
$path = "../images"; 
if($_FILES["file"]){ 
copy($_FILES["file"]["tmp_name"],"$path/".$_FILES["file"]["name"].""); 
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(), 
                     '". addslashes($titel) . "', 
                     '$inhoud', 
                     '".$_SESSION["sa_loginname"]."', 
                     '".$_FILES["file"]["name"]."')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php'); 
} else if (isset($dskfile)){ 
$query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(), 
                     '". addslashes($titel) . "', 
                     '$inhoud', 
                     '".$_SESSION["sa_loginname"]."', 
                     '$dskfile')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php'); 
}else{ 
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur) 
              VALUES (NOW(), 
                     '". addslashes($titel) . "', 
                     '$inhoud', 
                     '".$_SESSION["sa_loginname"]. "')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location:addnieuws.php'); 
};

Dan wordt de radiobuttons niet goed afgehandeld. Maar als ik de boel omruil en bij de if eerst de radiobuttons afhandel doen deze het juist wel, en het uploaden van plaatjes weer niet. Duidelijk dus dat het in mijn if else zit.

[ Voor 19% gewijzigd door ViNyL op 04-03-2004 19:02 ]


Acties:
  • 0 Henk 'm!

  • ViNyL
  • Registratie: Augustus 2001
  • Niet online
Ok ik heb het al werkende
Oplossing: een if binnen een if statement:

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
<?
//include ('check.php');
include ('dbconnect/dbconnect.php'); 
$titel = isset($_POST['titel']) ? $_POST['titel'] : ''; 
$inhoud = isset($_POST['inhoud']) ? $_POST['inhoud'] : ''; 
$dskfile = isset($_POST['dskfile']) ? $_POST['dskfile'] : ''; 
$path = "../images"; // deze moet 777 privileges hebben chmod 777. 
if($_FILES['file']['error'] == 4) {
if (isset($dskfile)) {
$query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]."',
                     '$dskfile')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location: addnieuws.php');
}

}elseif($_FILES["file"]){
copy($_FILES["file"]["tmp_name"],"$path/".$_FILES["file"]["name"].""); 
    $query = "INSERT INTO artikelen (datumtijd, titel, inhoud, auteur, image) 
              VALUES (NOW(),
                     '". addslashes($titel) . "',
                     '$inhoud',
                     '".$_SESSION["sa_loginname"]."',
                     '".$_FILES["file"]["name"]."')"; 
    $result = mysql_query($query) or die(mysql_error()); 
header ('location: addnieuws.php');
};
?> 
Pagina: 1