PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

09-09-2003, 13:18
|
Gismo
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 51
|
|
Image upload
Hallo PHP-ler!
Mit folgendem Formular und der dazugehörigen PHP-Datei lade ich insgesamt 3 Bilder auf den Server (klappt auch).
Meine Fragen:
1.Gibt es für die PHP-Datei eine elegantere Lösung als jedes Bild einzeln anzugeben?
2. Kann man den Code so abändern, dass die Namen der Bilder gleichzeitig in einer MySQL-Datenbank gespeichert werden?
Danke für Eure Hilfe!
Gruß
Gismo
FORM.HTML
.....
<input type="file" name="image" size="30">
<input type="file" name="imagea" size="30">
<input type="file" name="imageb" size="30">
<input type="submit" name="submit" value="laden">
.....
UPLOAD.PHP
<?
if ($image_name != "") {
move_uploaded_file("$image", "$upload_path$image_name")
or die("$varfile_error!");
} else {
die("$varno_file");
}
if ($imagea_name != "") {
move_uploaded_file("$imagea", "$upload_path$imagea_name")
or die("$varfile_error!");
} else {
die("$varno_file");
}
if ($imageb_name != "") {
move_uploaded_file("$imageb", "$upload_path$imageb_name")
or die("$varfile_error!");
} else {
die("$varno_file");
}
?>
|

09-09-2003, 13:42
|
microsoftgegner
Newbie
|
|
Registriert seit: Sep 2003
Beiträge: 43
|
|
Code:
<?php
#Die Datei die in die DB-einträgt
#folgendes mit allen drei bildern machen
$i_bild_name = $image;
/*Hier musst du dir unbedingt den Dateinamen aus dem kompletten Pfad ausgeben lassen... gibt ne PHP-Funktion dazu!!!*/
$hochkomma = chr(92) . chr(39);
$i_bild_name = strtolower($i_bild_name);
$i_bild_name = str_replace($hochkomma , "_",$i_bild_name);
$i_bild_name = str_replace(" ","_",$i_bild_name);
$i_bild_name = str_replace(":","_",$i_bild_name);
$i_bild_name = str_replace("ß","ss",$i_bild_name);
$i_bild_name = str_replace("&","und",$i_bild_name);
$i_bild_name = str_replace("ä","ae",$i_bild_name);
$i_bild_name = str_replace("ö","oe",$i_bild_name);
$i_bild_name = str_replace("ü","ue",$i_bild_name);
$i_bild_name = str_replace("?","_",$i_bild_name);
$i_bild_name = str_replace("/","_",$i_bild_name);
$i_bild_name = $i_bild_name . ".png";
#ab hier trägt der in die DB ein
$verbindung = mysql_connect($SERVER,$user,$passwd) or die
("Keine Verbindung moeglich");
mysql_select_db("db-name") or die
("Die Datenbank existiert nicht");
$db_entry = "INSERT INTO irgendeinname (bild) VALUES ('$i_bild_name')";
$eintragen = mysql_query($db_entry);
mysql_close($verbindung);
?>
Die obere aktion mit dem ersetzten von zeichen sorgt dafür, dass es auf anderen plattformen keine probleme gibt, dannach wird der dateiname in die db eingetragen, du kannst bei einer abfrage also mit dem pfad und dem dateinamen aus der db eines der bilder einbinden.
Musst nur mal schauen, wie das mit der dateiendung ist!!! Bei mir isses halt nur *.png!!!
Viel Glück damit!
~Microsoft®Gegner~
|

09-09-2003, 14:36
|
goth
 Moderator
|
|
Registriert seit: Mar 2002
Ort: Erde
Beiträge: 7.279
|
|
Zum ersten ... die Vorgehensweise über $image_name ist obsolet ... das aktuelle Handling von File Uploads findest Du im Kapitel 18. Handling file uploads der Online Dokumentation.
Zum anderen ... was spricht dagegen ein Array zu verwenden??
FORM.HTML
Code:
.....
<input type="file" name="image[]" size="30">
<input type="file" name="image[]" size="30">
<input type="file" name="image[]" size="30">
<input type="submit" name="submit" value="laden">
UPLOAD.PHP
PHP-Code:
foreach ( $_FILES["image"]["error"] AS $key => $error ) {
if ( $error == UPLOAD_ERR_OK ) {
move_uploaded_file($_FILES["image"]["tmp_name"][$key], $upload_path.$_FILES["image"]["name"]);
} else die($error);
}
__________________
carpe noctem
Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht!
Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung!
|

13-09-2003, 07:32
|
Gismo
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 51
|
|
Danke für Eure Hilfe, leider kann ich mich erst heute melden.
Ich habe mich jetzt für die unten stehende Lösung entschieden.
Ich habe aber noch ein Problem. Die Daten werden in die Datenbank eingetragen, dass klappt
auch super. Wenn man aber noch keine Bilder ausgewählt hat oder die Bilder bereits gespeichert
wurden und man drückt im Browser auf den Refreshbutton, wird wieder ein neuer Datensatz
eingefügt bzw. die bereits gespeicherten Bilder werden erneut eingefügt. Läßt sich das
irgendwie verhindern?
Danke und Gruß
Gismo
PHP-Code:
<?php
require("../config.php");
$numoffile = 6;
$file_dir = "../images/";
$filename = array();
if ($_POST) {
for ($i=0;$i<$numoffile;$i++) {
if (trim($_FILES['myfiles']['name'][$i])!="") {
$newfile = $file_dir.$_FILES['myfiles']['name'][$i];
move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);
// Diese Variable speichert die Namen hintereinander
array_push ($filename, $newfile);
$j++;
}
}
}
if (isset($j)&&$j>0)
print "Ihre Bilder wurden geladen.<br>";
print "<form method='post' enctype='multipart/form-data'>";
for($i=0;$i<$numoffile;$i++) {
print "<input type='file' name='myfiles[]' size='30'><br>";
}
print "<input type='submit' name='action' value='Upload'>";
print "</form>";
//ab hier wird in die Datenbank eingefügt
$sql = "INSERT INTO bilder (image,imagea,imageb,imagec,imaged,imagee) VALUES
('".$filename[0]."','".$filename[1]."','".$filename[2]."','".$filename[3]."','".$filename[4]."
','".$filename[5]."')";
$con = @mysql_connect($host, $user, $pass) or
die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db($database, $con); // Datenbank wird geöffnet
$rs = mysql_query($sql, $con);
if(!$rs)
echo "Daten konnten nicht gespeichert werden!";
?>
|

13-09-2003, 20:18
|
Gismo
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 51
|
|
Danke, hat sich erledigt
Ich habe einfach ein weiteres Feld eingefügt, in dem die entsprechende Objekt-Nr. eingegeben wird. Dieses Feld habe in MySQL als "unique" deklariert, so dass ein Refresh/Reload keine Auswirkung mehr hat, da der Datensatz mit der Nummer schon vorhanden ist.
Gruß
Gismo
|

13-09-2003, 20:44
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Ich habe einfach ein weiteres Feld eingefügt, in dem die entsprechende Objekt-Nr. eingegeben wird. Dieses Feld habe in MySQL als "unique" deklariert, so dass ein Refresh/Reload keine Auswirkung mehr hat, da der Datensatz mit der Nummer schon vorhanden ist.
|
warum kein unique über alle felder? (hab nicht alles gelesen, sorry)
|

13-09-2003, 21:12
|
Gismo
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 51
|
|
Zusätzlich zur Objekt-Nr. und den Bildern werden noch diverse andere Daten gespeichert. Die Objekt-Nr. ist fest vorgegeben. Die Bilder und auch Teile der anderen Eingaben können mehrfach vorkommen (es handelt sich um eine Immobilienseite für die Firma bei der ich angestellt bin).
Gruß
Gismo
|

13-09-2003, 22:52
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
achso, ich dachte das wäre jetzt zwangsläufig zusätzlich angegeben worden.
|

14-09-2003, 13:27
|
Àchtim
Junior Member
|
|
Registriert seit: Sep 2003
Beiträge: 104
|
|
Hallo, ich habe auch ein Problem beim Upload, vielleicht könnt Ihr mir weiterhelfen:
PHP-Code:
$datei_verz = "/home/confixxhome/meinuser/html/upload";
$datei_url = "http://meinedomain.de/upload";
if ( isset($fupload) ) {
move_uploaded_file($fupload,"$datei_verz/$fupload_name") or die($varfile_error);
}
Es kommt die Fehlermeldung:
Zitat:
Warning: Unable to create '/home/confixxhome/meinuser/html/upload/ToDo.txt': Keine Berechtigung in /home/confixxhome/meinuser/html/inhalt10_.php on line 10
Warning: Unable to move '/home/confixxhome/meinuser/phptmp/phpF6BJ7S' to '/home/confixxhome/meinuser/html/upload/ToDo.txt' in /home/confixxhome/meinuser/html/inhalt10_.php on line 10
|
Muss ich etwas anders machen wg. der Berechtigung die Datei zu uploaden oder geht der Fileupload doch grundsätzlich nicht bei meinem Provider (hoster24.de)??
|

14-09-2003, 13:33
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
manual gelesen? drüber nachgedacht?
Zitat:
Muss ich etwas anders machen wg. der Berechtigung die Datei zu uploaden
|
Natürlich musst du die rechte des dirs in das du uploaden wills entsprechen geben. wenn die net gesetzt sind (wx) dann gehts auch nicht.
Zitat:
oder geht der Fileupload doch grundsätzlich nicht bei meinem Provider (hoster24.de)??
|
*schmunzel*
|

14-09-2003, 13:56
|
Àchtim
Junior Member
|
|
Registriert seit: Sep 2003
Beiträge: 104
|
|
nich gut?
|

14-09-2003, 14:02
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Warum? Brauchst nur im FTP die entsprechenden chmods zu machen!
|

14-09-2003, 14:19
|
Àchtim
Junior Member
|
|
Registriert seit: Sep 2003
Beiträge: 104
|
|
Jo klappt! Danke
|

14-09-2003, 14:20
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Übrigens auch danke das du gesucht hast und nicht direkt nen neuen Thread aufgemacht hast. (muss ja auch mal gesagt werden  )
|

16-09-2003, 15:45
|
Gismo
Junior Member
|
|
Registriert seit: Jul 2003
Beiträge: 51
|
|
nach eine Frage
Ich möchte, dass mein Script (siehe 4-ter Beitrag in diesem Thread und unten) nachdem ich auf den Submit-Button geklickt habe und die Daten in der Datenbank gespeichert wurden eine neue Seite (xyz.php) aufruft.
Irgenwie krieg ich das nicht hin.
Danke und Gruß
Gismo
PHP-Code:
<?php
require("../config.php");
$numoffile = 6;
$file_dir = "../images/";
$filename = array();
if ($_POST) {
for ($i=0;$i<$numoffile;$i++) {
if (trim($_FILES['myfiles']['name'][$i])!="") {
$newfile = $file_dir.$_FILES['myfiles']['name'][$i];
move_uploaded_file($_FILES['myfiles']['tmp_name'][$i], $newfile);
// Diese Variable speichert die Namen hintereinander
array_push ($filename, $newfile);
$j++;
}
}
}
if (isset($j)&&$j>0)
print "Ihre Bilder wurden geladen.<br>";
print "<form method='post' enctype='multipart/form-data'>";
for($i=0;$i<$numoffile;$i++) {
print "<input type='file' name='myfiles[]' size='30'><br>";
}
print "<input type='submit' name='action' value='Upload'>";
print "</form>";
//ab hier wird in die Datenbank eingefügt
$sql = "INSERT INTO bilder (image,imagea,imageb,imagec,imaged,imagee) VALUES
('".$filename[0]."','".$filename[1]."','".$filename[2]."','".$filename[3]."','".$filename[4]."
','".$filename[5]."')";
$con = @mysql_connect($host, $user, $pass) or
die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db($database, $con); // Datenbank wird geöffnet
$rs = mysql_query($sql, $con);
if(!$rs)
echo "Daten konnten nicht gespeichert werden!";
?>
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|