Ich arbeite an einem Skript für eine Website, auf der Benutzer Konten erstellen und Daten hochladen können, die später von der Öffentlichkeit durchsucht werden können. Als Teil meiner Upload-Klasse habe ich eine Funktion zum Umbenennen der Datei, so dass nicht mehrere Dateien mit demselben Namen in meinem Upload-Verzeichnis vorhanden sind. Das Problem ist, dass ich den umbenannten Dateiwert aus der Klasse herausholen muss, damit ich ihn in den fileName-Teil meiner mySQL-Datenbank fallen lassen kann.Zugriff auf eine Variable, die in einer Funktion innerhalb einer Klasse deklariert wurde (PHP)
Der Code für die Funktion, die die Arbeit in der Klasse wirklich tut:
class Ds1_Upload {
protected $_uploaded = array();
protected $_destination;
protected $_max = 10485760;
protected $_messages = array();
protected $_permitted = array('audio/mpeg','audio/wav','audio/mpeg3','audio/x-mpeg-3');
protected $_renamed = false;
public function __construct($path) {
if(!is_dir($path) || !is_writable($path)) {
throw new Exception("$path must be a valid, writable directory.");
}
$this->_destination = $path;
$this->_uploaded = $_FILES;
}
public function move($overwrite = false) {
$field = current($this->_uploaded);
$OK = $this->checkError($field['name'], $field['error']);
if($OK) {
$sizeOK = $this->checkSize($field['name'],$field['size']);
$typeOK = $this->checkType($field['name'], $field['type']);
if($sizeOK && $typeOK) {
$name = $this->checkName($field['name'], $overwrite);
$success = move_uploaded_file($field['tmp_name'], $this->_destination.$name);
if($success) {
$message = $field['name']. ' was uploaded successfully';
if ($this->_renamed) {
$message .=" and renamed $name as a result of a conflicting filename in the Sleep Speak database.";
}
$this->_messages[] = $message;
} else {
$this->_messages[] = 'Could not upload ' . $field['name'];
}
$_POST['dream'] = $name;
}
}
}
Wie Sie sehen können, habe ich versucht, es setzen eine $ _POST Variable gleich dem Wert für $ name zu machen (was ist der Wert, den ich brauche), aber wenn ich versuche, die Spalte fileName in meinem Hauptcode mit $ _POST ['dream'] zu setzen, wird eine Seite zurückgegeben, auf der steht "column fileName darf nicht null sein." Gibt es ein Problem mit Superglobals innerhalb einer Funktion oder innerhalb einer Klasse? Wenn ja, was kann ich tun, um den Wert von $ name aus der Klasse herauszuholen, um mit einer mySQL-Abfrage erreichbar zu sein?
ist die mySQL Code
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "fileupload")) {
$insertSQL = sprintf("INSERT INTO Dreams (fileName, userName, dreamName, tags, uploadDate) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['dream'], "text"),
GetSQLValueString($_POST['user'], "text"),
GetSQLValueString($_POST['title'], "text"),
GetSQLValueString($_POST['tags'], "text"),
GetSQLValueString($_POST['date'], "text"));
mysql_select_db($database_Sleep_Speak, $Sleep_Speak);
$Result1 = mysql_query($insertSQL, $Sleep_Speak) or die(mysql_error());
}
Alle anderen sind $ _POST Werte durch ein Formular eingereicht werden. $ _POST ['dreams'] wird durch das Formular von einem versteckten Feld initiiert, aber es ist eigentlich nichts eingestellt. Kann mir jemand helfen, herauszufinden, was hier falsch ist? Ich bin neu in diesem Bereich.