PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uploadfile_name auf Datenbank schreiben


labrar
03.10.2005, 19:46:16
Hallo liebes PHP Forum

Mein Problem ist folgendes.

Ich lade über ein Dateifeld Daten in einen Ordner.

Funzt.

Das Dateifeld nannte ich mal datei wegen der Übersicht da dann die Var $datei und der Name $datei_name ist.

Jetzt möchte ich den Filenamen($datei_name) auf meine Datenbank als Text speichern

die Zeile sieht so aus

GetSQLValueString($_POST['datei'], "text");

ich habe auch schon andere variationen versucht. Fakt ist auf der Datenbank wird nur der Wert NULL gespeichert.

Weiß jemand Rat?

xabbuh
03.10.2005, 21:06:49
Auf Werte aus einem Eingabefeld vom Typ file musst du mit Hilfe des $_FILES-Arrays auf die Angaben zu der Datei zurückgreifen. Der Name der Datei befindet sich zum Beispiel im Element name:

<?php
print $_FILES['datei']['name']; # gibt den Namen der Datei aus
?>


-> http://www.php.net/manual/en/features.file-upload.php
-> http://php-faq.de/q/q-formular-upload-php4.html

labrar
03.10.2005, 21:18:12
Ja.Das funktioniert als Ausgabe in einer Tabelle oder ähnlichem.Aber nicht auf einer Datenbank.Zumindest nicht bei mir

xabbuh
03.10.2005, 21:23:28
Dann solltest du mal den Quellcode zeigen, mit du den Dateinamen in die Datenbank schreibst.

labrar
03.10.2005, 21:37:37
Sorry funzte doch. Aber ich habe schon soviele Möglichkeiten versucht ohne Erfolg hihi

Nur Jetzt folgendes Problem.Er schreibt mir jetzt nicht den Namen der Datei in die Datenbank sondern eine 1.Und das mit jedem neuen Upload

xabbuh
03.10.2005, 21:52:43
Auch hier gilt wieder: Ohne den Quellcode würde das hier lediglich ein Frage / Antwort Spiel.

labrar
03.10.2005, 22:00:50
Hier der komplette Code

<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO dtas (Header, Text) VALUES (%s, %s)",
print $_FILES['datei']['name'],
GetSQLValueString($_POST['textfield'], "text"));

mysql_select_db($dta_el, $dta);
$Result1 = mysql_query($insertSQL, $dta) or die(mysql_error());

$insertGoTo = "cmsbildtest.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($dta_el, $dta);
$query_Recordset1 = "SELECT Header, Text FROM modehausmustermann ORDER BY id DESC";
$Recordset1 = mysql_query($query_Recordset1, $dta) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
if(copy($datei,"bilder/$datei_name")){

echo "Bild auf Server geladen";
}
?>

xabbuh
03.10.2005, 22:27:30
Wofür verwendest du print beim zweiten Argument für sprintf()? So gibst du nur den Rückgabewert von print (true / false) an sprintf() weiter.

labrar
03.10.2005, 22:34:44
Wie würdest du es machen?

xabbuh
03.10.2005, 22:58:15
<?php
$insertSQL = sprintf("INSERT INTO dtas (Header, Text) VALUES (%s, %s)",
$_FILES['datei']['name'],
GetSQLValueString($_POST['textfield'], "text"));
?>

labrar
03.10.2005, 23:01:01
jep genauso habe ich es gemacht und bekomme nach dem Upload folgende Fehlermeldung
Unknown table 'Braxmen' in field list

Braxmen ist der Name des Bildes.Allerdings fehlt die Endung beim Fehler. Siehst du ja selber.

Noch ne möglichkeit?

xabbuh
03.10.2005, 23:02:48
jep genauso habe ich es gemacht und bekomme nach dem Upload folgende Fehlermeldung
Unknown table 'Braxmen' in field list
Sicher, dass da nicht eher Unkown column 'Braxmen' steht?

Ein weiterer Fehler ist aber, dass du die Zeichenketten nicht in Hochkommata einschließt.

labrar
03.10.2005, 23:05:26
Hab den Fehler markiert und eingefügt.Steht so da.

Der Rest des Scriptes funzt ja.Ergo wüsste ich jetzt nicht was du meinst

xabbuh
03.10.2005, 23:10:57
Der Fehler ist, dass du die Zeichenketten, die eingefügt werden sollen, nicht in Hochkommata packst. Die Abfrage sieht dann nämlich so aus:

INSERT INTO dtas (Header, Text) VALUES (Braxmen.jpg, blub)

Braxmen.jpg wird dann als Spalte jpg aus der Tabelle Braxmen interpretiert, blub wird als Spalte blub aus der Tabelle dtas gesehen.

labrar
03.10.2005, 23:11:24
Hmmmmm ich komm nicht drauf.
Bin wahrscheinlich schon durch(spät)

Wie würdest du es schreiben?

labrar
03.10.2005, 23:56:19
Hab zig Variationern durch

kein Erfolg

xabbuh
04.10.2005, 09:25:25
Und wie sahen diese Varianten aus? Was hat dir mysql_error() (http://www.php.net/mysql_error)?

labrar
04.10.2005, 12:28:49
Habs hinbekommen.Ich habe das so gelöst '%s',

Jetzt habe ich aber ein neues Problem.

Ich habe jetzt noch eine Funktion mit der ich die Daten der Datenbank löschen kann. Was auch funktioniert.

Nur wie lösche ich auch die Dateien auf die die Datenbank verweist.

Müsste doch eigentlich via unlink $_FILES(['datei']['name']);

funktionieren. Tust aber nicht.Hier mal die Löschroutine ohne meine unlinkzeile

if ((isset($_POST['id_delete'])) && ($_POST['id_delete'] != "")) {
$deleteSQL = sprintf("DELETE FROM dbl WHERE id=%s",
GetSQLValueString($_POST['id_delete'], "int"));


mysql_select_db($database_dbl, $dbl);
$Result1 = mysql_query($deleteSQL, $dbl) or die(mysql_error());
}


Wie könnte das gehen?

xabbuh
04.10.2005, 13:44:38
Du musst dir erst den Dateinamen aus der Datenbank holen und dann diese Datei mit unlink() löschen. Das $_FILES-Array enthält ja nur Werte, wenn du eine Datei mit einem HTML-Formular hochgeladen hast.