Brauche Hilfe bei einem Array Problem

Bash, Shell, PHP, Python, Perl, CGI
bolle
Posts: 34
Joined: 2003-01-20 18:25

Brauche Hilfe bei einem Array Problem

Post by bolle »

Ich habe ein Uploadformular.


code:

for ($j=0; $j<5; $j++) {
echo "<input type=file name=img[] size=30><br>";
}

5 Felder zum uploaden von Bildern.
Die Bilder werden dann ja in ein array gepackt.
Dann hochgeladen.

code:

$test = date("Y_m_d_");
if ($_REQUEST['submitted']){
for ($i=0; $i<$number_of_uploads; $i++) {
@copy($img[$i], "$abpath/$test$img_name[$i]") or $log .= "Couldn't copy image 1 to server<br>";
}
}


Wie bekomme ich jetzt die Dateinamen wieder aus dem Array herraus, um das ich diese als Variablen weiter zur verfügung habe?

Dabei ist zu beachten, das dem Dateiname beim schreiben auf Festplatte mit $test das aktuelle Datum vorrangestellt wird. Es ist also nicht mehr der Dateiname aus dem ursprünlichen Formular.


Ps.: die Dateinamen sollen später in eine DB eingetragen werden.
stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: Brauche Hilfe bei einem Array Problem

Post by stefanpropehan »

Du müstest im PHP ein array namesn $_FILES haben am besten machst einfach ein

Code: Select all

if ($_REQUEST['submitted']){ 
  var_dump($_FILES);
}
dann siehtst du genau wie das array aufgebaut ist oder du schaust einfach hier http://de3.php.net/manual/de/features.file-upload.php
bolle
Posts: 34
Joined: 2003-01-20 18:25

Re: Brauche Hilfe bei einem Array Problem

Post by bolle »

Da bekomm ich diese Ausgabe:

Code: Select all

array(1) { ["img"]=> array(5) { ["name"]=> array(4) { [0]=> string(12) "Shot0018.jpg" [1]=> string(12) "Shot0048.jpg" [2]=> string(12) "Shot0050.jpg" [3]=> string(12) "Shot0051.jpg" } ["type"]=> array(4) { [0]=> string(11) "image/pjpeg" [1]=> string(11) "image/pjpeg" [2]=> string(11) "image/pjpeg" [3]=> string(11) "image/pjpeg" } ["tmp_name"]=> array(4) { [0]=> string(29) "J:PHPuploadtempphp4363.tmp" [1]=> string(29) "J:PHPuploadtempphp4364.tmp" [2]=> string(29) "J:PHPuploadtempphp4365.tmp" [3]=> string(29) "J:PHPuploadtempphp4366.tmp" } ["error"]=> array(4) { [0]=> int(0) [1]=> int(0) [2]=> int(0) [3]=> int(0) } ["size"]=> array(4) { [0]=> int(69803) [1]=> int(80062) [2]=> int(68743) [3]=> int(72023) } } }
Und nun weiter? Das waren 4 Bilder hochgeladen. wie komm ich jetzt an den Datienamen/Variablen für die Dateinamen?
stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: Brauche Hilfe bei einem Array Problem

Post by stefanpropehan »

na ganz einfach

Code: Select all

$uploaddir = 'ein/verzeichniss/';
for ($i=0; $i<$number_of_uploads; $i++) 
{
  if (move_uploaded_file($_FILES['img']['tmp_name'][$i], $uploaddir.$_FILES['img']['name'][$i])) 
  {
    echo $uploaddir.$_FILES['img']['name'][$i]; // der name + pfad
  }
}
habe das aber net getestet must nochmal schauen ob parse fehler drin sind
bolle
Posts: 34
Joined: 2003-01-20 18:25

Re: Brauche Hilfe bei einem Array Problem

Post by bolle »

Nein ;)

So komm ich nicht weiter.
Ich brauche eine Möglichkeit, um die Upgelodeten Dateien in eine sql Datenbank einzutragen. Also nicht die Dateien, sondern nur den Namen.
Unz zwar incl. dem mit $test hinzugefügtem Datum.

Irgendwann muss ich ja dann die SQL abrage machen,

Code: Select all

	MYSQL_CONNECT($db_host, $db_user, $db_pass)
	or die ( "Datenbank ist nicht erreichbar");
	$sqlab = "insert into bilder";
  $sqlab .= "(bild_1, bild_2, bild_3, bild_4) values ";
  $sqlab .= "('$b1','$b2','$b3','$b4')";
  mysql_db_query("$db_name", $sqlab);
	
      $num = mysql_affected_rows();
      if ($num>0){
      echo "<br><big>Bilder wurden hinzugef&gt</big><br/>";
Dazu brauche ich ja die Variablen $b1 $b2 $b3 $b4

Also muss ich ja den Dateinamen incl. Datum mit einer Variable definieren.
Irgendwie komm ich da jetzt nicht weiter... :(
stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: Brauche Hilfe bei einem Array Problem

Post by stefanpropehan »

mhh ich baue dir jetzt eigentlich nicht deine applikation aber hier nochmal ein denkanstoss... die dateien werden beim hochladen temporär gespeichert - wenn du diese also weiter verwenden willst must du sie erst kopieren

Code: Select all

  move_uploaded_file($_FILES['img']['tmp_name'][$i], uploaddir.$_FILES['img']['name'][$i])
dann kannst du dir die query bauen die denn pfad der neuen dateien in die db einträgt... zb so...

Code: Select all

$sqlab = "insert into bilder";
$sqlab .= "(bild_1, bild_2, bild_3, bild_4) values ";
$sqlab .= "("$_FILES['img']['name'][0]", "$_FILES['img']['name'][1]", usw...)"; 
obwohl das kein guter code ist...
bolle
Posts: 34
Joined: 2003-01-20 18:25

Re: Brauche Hilfe bei einem Array Problem

Post by bolle »

Irgendwie komme ich damit garnicht zurecht. In die DB wird dabei nu Humbug geschreiben...ich habs anders versucht:

So ich benutze nun folgendes Uploadscript :

Code: Select all

<?

$abpath = "/home/www/web3/bilder";
$sizelim = "no"; 
$size = "2500000"; 
$number_of_uploads = 4;
$dateadd  = date("Y_m_d_");
if ($_REQUEST['submitted']){


$cert1 = "image/pjpeg";
$cert2 = "image/jpeg";
$cert3 = "image/gif";
$cert4 = "image/ief"; 
$cert5 = "image/png";
$cert6 = "image/tiff";
$cert7 = "image/bmp"; 
$cert8 = "image/vnd.wap.wbmp";
$cert9 = "image/x-cmu-raster";
$cert10 = "image/x-x-portable-anymap";
$cert11 = "image/x-portable-bitmap";
$cert12 = "image/x-portable-graymap"; 
$cert13 = "image/x-portable-pixmap";
$cert14 = "image/x-rgb";
$cert15 = "image/x-xbitmap";
$cert16 = "image/x-xpixmap";
$cert17 = "image/x-xwindowdump";

$log = "";

for ($i=0; $i<$number_of_uploads; $i++) {

	if ($img_name[$i] == "") {
		$log .= "No file selected for upload $i<br>";
	}

	if ($img_name[$i] != "") {
		if (file_exists("$abpath/$dateadd$img_name[$i]")) {
			$log .= "File $i already existed<br>";
		} else {

			if (($sizelim == "yes") && ($img_size[$i] > $size)) {
				$log .= "File $i was too big<br>";
			} else {

				if (($img_type[$i] == $cert1) 
or ($img_type[$i] == $cert2)
 or ($img_type[$i] == $cert3)
 or ($img_type[$i] == $cert4)
 or ($img_type[$i] == $cert5)
 or ($img_type[$i] == $cert6)
 or ($img_type[$i] == $cert7)
 or ($img_type[$i] == $cert8)
 or ($img_type[$i] == $cert9)
 or ($img_type[$i] == $cert10)
 or ($img_type[$i] == $cert11)
 or ($img_type[$i] == $cert12)
 or ($img_type[$i] == $cert13)
 or ($img_type[$i] == $cert14)
 or ($img_type[$i] == $cert15)
 or ($img_type[$i] == $cert16)
 or ($img_type[$i] == $cert17)) 
{
@copy($img[$i], "$abpath/$dateadd$img_name[$i]") or $log .= "Couldn't copy image 1 to server<br>";
					if (file_exists("$abpath/$dateadd$img_name[$i]")) {
						$log .= "File $i was uploaded<br>";
					}
					} else {
						$log .= "File $i is not an image<br>";
					}
				}
			}
			

		}

}
foreach ($img_name as $value) {
echo "$dateadd$value, ";}

?>

<html>
<head>
<title>Image Report</title>
</head>
<body>
<p>Log:<br>
<?
echo "$log";
?>
</p>
<body>
</html>
<? 
exit;
} 
?>

<html>
<head>
<title>Upload Image</title>
</head>
<body>
<form method=POST action=<? $php_self ?>enctype=multipart/form-data>
<p>Files to upload:<br>
<? 

for ($j=0; $j<$number_of_uploads; $j++) {

echo"<input type=file name='img[]' size='30'><br>";

}
?>
<input type="hidden" name="submitted" value="true">
<input type="submit" name="submit" value="Upload"> 
</form>
</body>
</html>
Mit foreach zerlege ich das Array in passende Variablen, die ich dann in eine DB eintragen kann.

Das Problem dabei ist, erden jetzt nicht alle Uploadfelder genutzt, bekomme ich als Array die ungenutzen Felder trotzdem mit vorrangestelltem Datum. Damit bleibt das Feld in der Datenbank nicht leer. Das aber ist schlecht.

Beispiel für array mit nur 2 durchgeführten Uploads:

Code: Select all

2003_09_17_bild1.jpg, 2003_09_17_bild2.jpg, 2003_09_17_, 2003_09_17_, 
Die 2 letzten Datumsangaben dürfen da nicht sein....auch das abschliessende Komma ist nicht wirklich gut da...

@stefanpropehan
Danke für deine Hilfe. Du sollst nicht meine Scripte schreiben...ich frag nur, weil ich nicht weiterkomme. Wenn du nicht magst, musst du hier nicht posten....
stefanpropehan
Posts: 335
Joined: 2002-12-17 22:25
Location: Berlin

Re: Brauche Hilfe bei einem Array Problem

Post by stefanpropehan »

Bolle wrote: @stefanpropehan
Danke für deine Hilfe. Du sollst nicht meine Scripte schreiben...ich frag nur, weil ich nicht weiterkomme. Wenn du nicht magst, musst du hier nicht posten....
war ja auch net böse gemeint :-D
aber so ganz verstehe ich das script net... wenn du schauen willst ob es ein array_element gibt - könntest du mit

Code: Select all

isset($value) bzw empty($value) arbeiten
bolle
Posts: 34
Joined: 2003-01-20 18:25

Re: Brauche Hilfe bei einem Array Problem

Post by bolle »

Das Script soll 2 Sachen machen.
1. ein oder mehrere Bilddateien uploaden
2. die geuppten Bilddateien mit Dateiname und vorrangestelltem Datum in eine Datenbank eintragen, um das die Bilder später, im zusammenhang mit anderen Daten aus der Datenbank, mittels einer SQL Abfrage angezeigt werden können.
Nach foreach kommt dann das SQL Querry, das die Dateinamen einträgt. Das soll dann in etwa so aussehen:

Code: Select all

....
....
....
} 
foreach ($img_name as $value) { 

$sqlab = "insert into bilder"; 
$sqlab .= "(bild_1, bild_2, bild_3, bild_4) values "; 
$sqlab .= "($dateadd$value, )"; 
...
 
echo " Die Bilder: $dateadd$value, wurden in die Datenbank eingetragen.";
}

?> 
Nun kann es auch sein, das ich auf dem völlig falschen Dampfer bin...so fit bin ich in PHP noch nicht ;)