Upload / Datensatz einfügen
dennis m
- php
liebe selfhtml-leser/user
ich moechte meinen usern einen upload bereitstellen!
das wollte ich so haben:
Ein Dateifeld, indem nur der name angezeigt wird (hab gelesen, dass das nicht geht)! Ist die Datei ausgewaehlt, klickt man auf Senden (Formular abschicken) was zu folge hat, das die Datei hochgeladen wird, und der Dateiname in die Datenbank geschrieben wird! Das geht aber nicht, oder besser gesagt ich weiß noch nicht wie!
Koennte mit einer erklaeren wie ich es hinbekommen koennte, dass user eine datei hochladen und NUR dateiname.endung in die Datenbank geshrieben wird?
vg, dennis
Moin
Beschäftige dich bitte mit dem vordefinierten $_FILES-Array welches beim Dateiupload zur Verfügung steht.
$_FILES['userfile']['name'] enthält dabei den Namen der Originaldatei.
Gruß Bobby
pass auf, ich hab dieses Upload-Script!
<?php
require('config.php');
$mb = $b_max/1048576;
$mb = round($mb, 2);
@chmod(''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/.', $up_chmod);
if($upw=="1"){
if(isset($_POST['sendfiles'])){
if($_POST['pwd'] != $pw){
include("header.php");
echo "<table width="100%" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span class="grossschrift">
<b>Dateien hochladen</b>
</span>
</td></tr>
<tr><td width="100%" align="center">
<span class="grossschrift">
<br>
Das Passwort fehlt oder ist falsch!<br>
<br>
<a href="javascript:history.back(-1)" class="kleinlink">« zurück</a>
<meta http-equiv="refresh" content="5; URL=http://www.arne-home.de/index.html">
<br><br>
</td></tr>
</table>";
include("footer.php");
exit;}
}
}
if($_GET['action'] == 'inhalt') {
include("header.php");
echo "<table width="100%" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span class="grossschrift"><b>Inhalt des Uploadordners</b></span>
</td></tr>
<tr><td width="100%" align="center"><br>";
$verz=opendir (''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/.');
while ($File = readdir ($verz)) {
if($File != '.' && $File != '..' && $File != '.htaccess') {
echo "<table cellpadding="0" cellspacing="0" width="50%"><tr><td align="left"><span class="grossschrift">";
if($dl_link==1){
echo "<img width="11" height="11" src="./img/$li_bild" alt="" name="li"><a href="$pfad/$File" target="_blank" class="grosslink"> $File</a>";
}
else{
echo "<span class="grossschrift"><img width="11" height="11" src="./img/$li_bild" alt="" name="li"> $File</span>";
}
echo "</td></tr></table>";}
}
if ($dl_gesamt==1) {
function dir_size($dir, &$size, $recursive=TRUE){
$handle = @opendir($dir);
if(!$handle)
return false;
while ($file = @readdir ($handle)){
if (eregi("^.{1,2}$",$file)){
continue;}
if(!$recursive && $dir != $dir.$file."/"){
if(is_dir($dir.$file))
continue;}
if(is_dir($dir.$file)){
dir_size($dir.$file."/", $size, $recursive);}
else{
$size += filesize($dir.$file);}
}
@closedir($handle);
}
function sizeMath($size){
if($size >= 1024000){
$size = $size / 1024000;
$size = sprintf("%01.2f", $size) . ' MB';
}
else{
$size = $size / 1024;
$size = sprintf("%01.1f", $size) . ' KB';
}
return $size;
}
$size = 0;
dir_size(''.$_SERVER[DOCUMENT_ROOT].'/'.$pfad.'/', $size, TRUE);
$sizeD = sizeMath($size);
echo "<br><span class="kleinschrift">Gesamtgrösse der Dateien: ";
echo $sizeD;
echo "</span><br>";
}
echo "<br><a href="javascript:history.back(-1)" class="kleinlink">« zurück</a><br><br></td></tr></table>";
include("footer.php");
exit;
}
?>
<style type="text/css">
<!--
.Stil1 {font-family: Arial, Helvetica, sans-serif}
-->
</style>
<table width="100%" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span class="grossschrift">
<b>Dateien hochladen</b></span>
</td></tr>
<tr><td width="100%" align="center">
<span class="grossschrift">
<br>
<span class="Stil1">Die Datei darf nicht größer a<?php echo "$mb"; ?>ls MB sein.<br>
Klicken Sie bitte auf OK!</span></span><br>
<br>
<?php if($inhalt==1){ echo "<a href="index.php?action=inhalt" class="grosslink"><b>Inhalt des Uploadordners</b></a><br>";} ?>
<br>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="Submit" value="OK" name="up" class="button">
<br><br>
</form>
<form enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
if (isset($_POST['up'])){
echo '<span class="grossschrift"><b>'.$numfiles.'</b> ';
echo $_POST['numfiles'] == '1' ? 'Datei kann' : 'Dateien können';
echo ' hochgeladen werden.</span><p>';
for ($i=1; $i<=$_POST['numfiles']; $i++){
echo "<input type="File" name="myfile$i" class="input"><br>\n";}
if($upw==1){echo'<br><span class="grossschrift">Passwort</span> <input type="password" name="pwd" class="input">';}
echo '<br><input type="Submit" name="sendfiles" value="hochladen" class="button"><br><br>';}
if (isset($_POST['sendfiles'])){
$numsendfiles = count($_FILES);
foreach($_FILES as $strFieldName => $arrPostFiles){
if ($arrPostFiles['size'] > $b_min && $arrPostFiles['size'] < $b_max){
$strFileName = $arrPostFiles['name'];
$strFileTemp = $arrPostFiles['tmp_name'];
if ($dl_endung==0) {
@copy ($strFileTemp, "$_SERVER[DOCUMENT_ROOT]/$pfad/$strFileName");
echo "<span class="grossschrift"><font color=green><b>Datei $strFileName erfolgreich hochgeladen.</b></font></span><br><br>";
if ($upmail==1 && $numsendfiles != 0) {
$ip = $_SERVER["REMOTE_ADDR"];
$subject = "Upload auf Homepage";
$body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
$body .= "IP: $ip\n";
$body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
$body .= "Domain: http://$_SERVER[HTTP_HOST]";
@mail($email, $subject, $body, "From: $email");
}
}
elseif($dl_endung==1) {
$pfad_info = pathinfo($strFileName);
$extension = strtolower($pfad_info["extension"]);
if (in_array($extension,$filetypes)) {
if ($dateien_w == 0) {
$unixtime = time();
$strFileNameComponents = explode(".",$arrPostFiles['name']);
$strFileName = "$strFileNameComponents[0]-$unixtime.".$strFileNameComponents[1];}
@copy ($strFileTemp, "$_SERVER[DOCUMENT_ROOT]/$pfad/$strFileName");
echo "<span class="grossschrift"><font color=green><b>Datei $strFileName erfolgreich hochgeladen.</b></font></span><br><br>";
if ($upmail==1 && $numsendfiles != 0) {
$ip = $_SERVER["REMOTE_ADDR"];
$subject = "Upload auf Homepage";
$body .= "Datum: ".date("d.m.Y, H:i:s")." Uhr\n";
$body .= "IP: $ip\n";
$body .= "$numsendfiles Datei(en) wurden hochgeladen\n";
$body .= "Domain: http://$_SERVER[HTTP_HOST]";
@mail($email, $subject, $body, "From: $email");
}
}
else {
echo "<span class="grossschrift"><font color=red><b>Unerlaubtes Dateiformat!</span><br><br>";}
}
}
else {
echo "<span class="grossschrift"><font color=red><b>Die Datei muß größer als $b_min Bytes und kleiner als $mb MB sein!</b></font></span><br><br>";}
}
}
?>
</form>
</td></tr>
</table>
Wie kann ich es hinbekommen, das der Name der Hochgeladenen Datei auch in eine Datenbankspalte eingetragen wird (Spalte=URL)!
Ich weiß, das ich mich mehr mit PHP und MSQL beschäftigen müsste, aber bitte hilf mir!
VG,Dennis
PS.: Ein einfaches Codebeispiel vllcht :(
Moin
PS.: Ein einfaches Codebeispiel vllcht :(
Denkst du ich geb dir jetzt ein komplettes Programm das du einfach nur noch einfügen brauchst?
Ich sehe bei deinem Code keine Verbindung zu einer Datenbank. Dort fängt es schonmal an. Nicht mal der Ansatz einer Lösung.
Das wichtigste zu Verbindung zur Datenbank erfährst du hier
wenn du erfolgreich eine Verbindung zur Datenbank aufgebaut hast, speicherst du den Inhalt von $_FILES['userfile']['name'] in deiner MySQL-Tabelle.
Sorry, aber (anscheinend nicht mal von dir stammende) Scripte zu erstellen oder zu ändern, ist von den meisten hier das täglich Brot, und wird normalerweise teuer bezahlt.
Gruß Bobby
Moin
wie kann ich den Inhalt von $_FILES['userfile']['name'] in eine MySQL-Tabelle schreiben?
zum Beispiel für einfaches Hineinschrieben (hinzufügen):
$query = "INSERT INTO Tabellenname SET spaltename='".mysql_real_escape_string($_FILES['userfile']['name'])."'";
mysql_query($query);
Das ist aber MySQL-Urschleim!!!!!!!!! Befasse dich bitte mit der Materie!
Gruß Bobby
Hello Bobby,
$query = "INSERT INTO Tabellenname
SET spaltename='".mysql_real_escape_string(basename($_FILES['userfile']['name']),$con)."'";
$insert = mysql_query($query,$con);
vermutlich wird es besser sein, nur den Basename zu verwenden. Gut allerdings, dass Du an das Escaping gedacht hast. Man sollte aber den Connection-Identifier angeben.
Außerdem ist es zweckmäßig, auch den Erfolg des Inserts zu kontrollieren.
I.d.R. sollte man einen Contraint auf die Spalte mit dem Filenamen haben oder auf eine entsprechend sinnvoll ausgewählte Gruppe von Spalten (Verzeichnis + Name), damit Das File auch unter diesem Namen abspeicherbar ist und keine Doubletten entstehen.
Da sind wir aber schon beim nächsten Problem!
Nicht jeder Dateiname ist auf dem Server zulässig oder zumindest sinnvoll.
Damit es keinen Schmutz gibt (böse User sind überall), sollte man also noch eine transformationsschicht einfügen. Man speichert das File unter einem ausgewüfelten Unique-Name, merkt sich den in der Tabelle, dann kann auch wieder _jeder__irre__Name für das File (Richtung Client) zugelassen werden.
Liebe Grüße
Tom
Moin
Danke für die weitergehenden Inhalte. Mir ist dies klar. Ich wollte dem Fragenden nur einen Ansatzpunkt liefern, da er sich damit überhaupt nicht auskennt.!
Übrigens ein Beitrag des Fragenden ist gelöscht, deshalb erscheint mein Beitrag jetzt nicht richtig passend zu sein.
Gruß Bobby
Hello,
Übrigens ein Beitrag des Fragenden ist gelöscht, deshalb erscheint mein Beitrag jetzt nicht richtig passend zu sein.
Bei mir verschwindet hier heute im Mittel auch jedes zweite Posting im Nirwana.
Der Fehler, den Christian Seiler behoben hat, scheint also noch Brüder zu haben.
Liebe Grüße
Tom