[php] Probleempje met image uploaden

Pagina: 1
Acties:

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
Ik zit met een waarschijnlijk niet al te groot probleem, maar ik kan het ff niet vinden.

Ik wil plaatjes uploaden naar verschillende mappen. Die map selecteer ik uit een dropdown menu en met een variabele zet ik die in de code. De dropdown wordt wel volledig geladen, maar de upload gaat altijd naar de laatst opgehaalde record.

Volgens mij betekent dit dat ik iets van een WHERE moet gebruiken in de query. maar als ik bijvoorbeeld:

WHERE id = $id_directory

toevoeg is het dropdown menu leeg.

Wie kan mij hiermee helpen??

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
<?php
$LibPath = "lib/";
include ($LibPath.'libAanmelden.php');
include_once($LibPath.'libDatabase.php');
$Connection = ConnectDB();
$CrLf = Chr(13).Chr(10);
?>

<html>
<head><title>Title</title></head>
<body>

<?php
echo '  <select name="id_directory">'.$CrLf;
echo '  <option value="0">--Maak een keus--</option>'.$CrLf;

$Query = "  SELECT  id, directory
            FROM    categorie
             ";

$Connection = ConnectDB();
$RecordSet = OpenQuery ($Query, $Connection);
for ($i=0; $i< NumRows($RecordSet); $i++){
$Record = FetchRow($RecordSet);

echo '<option value="'. $Record["id"] .'" > '. $Record["directory"] .' </option>';
}
CloseQuery($RecSet);

echo '    </select>'.$CrLf;
?>

<form ENCTYPE="multipart/form-data" ACTION="uploadimage.php" method="post">
Verstuur deze foto: 
<input type="file" name="userfile"><br>
<input type="submit" value="Stuur Bestand" name="submit">
</form>

<?php

// geef $HTTP_POST_FILES een makkelijkere naam
$tempname = $HTTP_POST_FILES['userfile']['tmp_name'];
$realname = $HTTP_POST_FILES['userfile']['name'];
$typefile = $HTTP_POST_FILES['userfile']['type'];
$sizefile = $HTTP_POST_FILES['userfile']['size'];
$sizefilekb = $sizefile / 1024;
$formatsizefilekb = sprintf ("%01.2f", $sizefilekb);

if(is_uploaded_file($tempname)){

// maximale bestandsgrootte is 30kb: 1kb = 1024 bytes
   if($tempname_size > 30720){
      echo "Dit bestand is te groot. De maximale grootte is 30kb!!";
   }
   else {
  copy($tempname, "locatievanmap/images/". $Record["directory"] ."/" .$realname);
echo " <strong>".$realname."</strong> is succesvol ge-upload<br><br>";
    
//deze tekst wordt laten zien wanneer het plaatje ge-upload is
print " Tijdelijke naam: $tempname <br>";
print " Echte naam: $realname <br>";
print " Soort bestand: $typefile <br>";
print " Grootte bestand: $sizefile bytes = $formatsizefilekb kb<br><br>";
         }
}
else{
 echo "Er is iets fout gegaan, probeer het opnieuw."; 
}

//laat het plaatje zien wat net ge-upload is
    if (is_uploaded_file($tempname) == true){ 
        echo " [img]\"images/$realname\"[/img] ";
    }

?>
</body>
</html>

Verwijderd

Als op regel 17 die WHERE toevoegt dan is $id_directory niet geintialiseerd ( in het beste geval gelijk aan "" ) en zal het result van je query dus leeg zijn.

Verwijderd

De dropdown staat niet binnen de <form></form> tags. Dit kan er misschien voor zorgen dat hij de variable $id_directory niet mee stuurt. Ik weet dit niet zeker, want ik heb nog nooit iets geprobeerd buiten de <form></form> tags mee te sturen.

/edit
Ik zie dit staan:
PHP:
56
  copy($tempname, "locatievanmap/images/". $Record["directory"] ."/" .$realname);

moet dat niet dit zijn? :
PHP:
56
  copy($tempname, "locatievanmap/images/". $id_directory."/" .$realname);

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
ok, de dropdown staat inderdaad niet tussen <form></form> dat zou wel moeten, maar dan heb ik twee forms op een pagina. Levert dat geen problemen op? Dit lost overigens het probleem waarschijnlijk niet op. Kan iemand mij een goede oplossing geven?

Verwijderd

Probeer eens wat er bij mijn vorig bericht bij edit staat.

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 15-07 20:09

dArtagnan

Een voor allen, allen voor een

Verplaats gewoon je <form> tag naar boven.

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
Ok ik heb de opmerking van geprobeerd GrunGe geprobeerd, maar dan is de dropdown leeg.
Ik heb ook de <form>tag naar boven gedaan, maar dat helpt ook niet. Iemand anders?

Verwijderd

Kan je de file waar alle functies in staan (libAanmelden.php of libDatabase) ook ff hier posten. Dan zal ik eens wat proberen op mijn eigen server.

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
Alleen libDatabase en _local is nuttig. Hier komen ze:

libDatabase:

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
<?php
include ($LibPath."_local.php");
$CrLf=chr(13).chr(10);
$g_SQLnow = "NOW()";
// ==============================
//   lib DatabaseMySQL.php
// ==============================

// ------ make connection to the database ------
function ConnectDB(){
global $DB_username;
global $DB_userpassword;
 // $Connection = mysql_connect("localhost")
  $Connection = mysql_connect("localhost:3306", $DB_username, $DB_userpassword)
 or die("Can not connect to database!");
 return $Connection;
}

// ------ open a select-query ------
// returning a resultset
function OpenQuery($Query, $Connection){
global $DB_name;
$CrLf = chr(13).chr(10);
    $Resultset= mysql_db_query ($DB_name, $Query, $Connection);
    if ($Resultset <= 0) { 
       echo "Fout bij openen query:\"".$Query."\"<br>". $CrLf;
       echo "Fout:".mysql_errno().", ".mysql_error();
    }
  return $Resultset;
}

// ------ number of rows of a resultset ------
function NumRows($ResultSet){
  return mysql_num_rows($ResultSet);
}

// ------ get sequential row ------
function FetchRow($ResultSet){
  return mysql_fetch_array($ResultSet);
}

// ------ close a recordset ------
function CloseQuery($ResultSet){
  mysql_free_result($ResultSet);
}

// ------ execute an action query ------
// how about the database name?
function ExecuteQuery($Query, $Connection){
global $DB_name;
  mysql_select_db($DB_name, $Connection);
  $Result = mysql_query( $Query, $Connection);
    if ($Result === False) { 
       echo "Fout bij openen query:\"".$Query."\"<br>". $CrLf;
       echo "Fout:".mysql_errno().", ".mysql_error();
    }
  return $Result;
}

// Read back the ID of previous INSERT of this connection
function InsertID($Connection){
    return mysql_insert_id($Connection);
}

// ------ close a connection ------
function CloseDB($Connection){
  mysql_close($Connection);
}

function GetErrno(){
  return mysql_errno();
}

function GetError(){
  return mysql_error();
}
?>


en hier de _local.php

PHP:
1
2
3
4
5
6
<?php
$DB_servername   = "localhost:3306";
$DB_name         = "verzinmaareennaam";
$DB_username     = "root";
$DB_userpassword = "";
?>


Succes! Ik hoop dat je er wat mee kunt.

Verwijderd

Ik moet nu naar school. Maar zal er vanmiddag eens naar kijken.

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 13:16
Meerdere forms maakt niet uit, die kun je gewoon door elkaar gebruiken.
Je moet dan je form alleen wel ff een naam geven. En het moet wel in een form staan anders stuurt hij je selectie niet (via post).

Verwijderd

Oke hier komt ie.
Er zaten en zitten nog steeds verschillende fouten in. Maar ik heb de fout van de Dropdown menu opgelosd. De dropdown menu moest inderdaad tussen de <form> tags anders werkte het niet.

En er zat nog een verwarring in. Je pakte de directory die je bij de dropdown menu het laatst geproduceerd had. Je moet natuurlijk de directory pakken die geposd word door de dropdown menu.

Ik heb tevens die fout weggehaald dat je de melding "Er is iets fout gegaan!" krijgt, terwel ik nog niks verzonden had.

Iedergeval ik vind de script een beetje gaar, maar goed iedereen moet een kans krijgen om het te leren.

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
<?php
$LibPath = "";
include_once($LibPath.'libDatabase.php');
$Connection = ConnectDB();
$CrLf = Chr(13).Chr(10);
?>

<html>
<head><title>Title</title></head>
<body>
<form ENCTYPE="multipart/form-data" ACTION="index.php" method="post">
<?php
echo '  <select name="directory">'.$CrLf;
echo '  <option value="0">--Maak een keus--</option>'.$CrLf;

$Query = "    SELECT     id, directory
            FROM     categorie
             ";

$Connection = ConnectDB();
$RecordSet = OpenQuery ($Query, $Connection);
for ($i=0; $i< NumRows($RecordSet); $i++){
$Record = FetchRow($RecordSet);
echo '<option value="'. $Record["directory"] .'" > '. $Record["directory"] .' </option>';
}
CloseQuery($RecSet);

echo '    </select>'.$CrLf;
?>
Verstuur deze foto:
<input type="file" name="userfile"><br>
<input type="submit" value="Stuur Bestand" name="submit">
</form>

<?php

// geef $HTTP_POST_FILES een makkelijkere naam
$tempname = $HTTP_POST_FILES['userfile']['tmp_name'];
$realname = $HTTP_POST_FILES['userfile']['name'];
$typefile = $HTTP_POST_FILES['userfile']['type'];
$sizefile = $HTTP_POST_FILES['userfile']['size'];
$sizefilekb = $sizefile / 1024;
$formatsizefilekb = sprintf ("%01.2f", $sizefilekb);

if($tempname){ //kijk of er wel een file gepost wordt
  if(is_uploaded_file($tempname)){

  // maximale bestandsgrootte is 30kb: 1kb = 1024 bytes
  if($tempname_size > 30720){
    echo "Dit bestand is te groot. De maximale grootte is 30kb!!";
  }else{
    copy($tempname, "locatievanmap/images/". $directory ."/" .$realname);
    echo " <strong>".$realname."</strong> is succesvol ge-upload<br><br>";
    
    //deze tekst wordt laten zien wanneer het plaatje ge-upload is
    print " Tijdelijke naam: $tempname <br>";
    print " Echte naam: $realname <br>";
    print " Soort bestand: $typefile <br>";
    print " Grootte bestand: $sizefile bytes = $formatsizefilekb kb<br><br>";
  }
  }
  else{
   echo "Er is iets fout gegaan, probeer het opnieuw.";
  }
}

//laat het plaatje zien wat net ge-upload is
    if (is_uploaded_file($tempname) == true){
        echo " [img]\"images/$realname\"[/img] ";
    }

?>
</body>
</html>

  • Mitsah
  • Registratie: Februari 2002
  • Laatst online: 09-10-2024
He, heel erg bedankt. Maar wat vindt je er gaar aan als ik het vragen mag?
Pagina: 1