MYSQLI Datenupload

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
AnfaengerZ
Mitglied
Beiträge: 127
Registriert: 13.05.2018 07:48
Wohnort: 28000

MYSQLI Datenupload

Beitrag von AnfaengerZ »

Hallo,

ich hab mal eine Frage in Bezug auf Dateienupload und Datenbanken. Genauer möchte ich aus einem Formular im Auswahlfenster mehrere Dateien auswählen und hochladen. Der Pfad zu den Bildern/Dateien soll in "einem" Datenbankeintrag mit einer ID gespeichert werden.
Mir ist es gelungen mehrere Daten in ein Verzeichnis "upload" hochzuladen, allerdings erzeugt die DB für jede Datei einen separaten Eintrag. Allerdings möchte ich die Bilder alle von "einer" id mit $Get_id holen, beim ausgeben/ändern.

Hier das Formular:

Code: Alles auswählen

<form action="include/bild2.inc.php" method="post" enctype="multipart/form-data">
    Wähle Dateien für Upload:
    <input type="file" name="files[]" multiple >
    <input type="submit" name="submit" value="UPLOAD">
</form>
Und hier die .php:

Code: Alles auswählen

<?php 
if(isset($_POST['submit'])){ 
    // Include the database configuration file 
    include_once 'dbh.inc.php'; 
     
    // File upload configuration 
    $targetDir = "uploads/"; 
    $allowTypes = array('jpg','png','jpeg','gif','JPG','php'); 
     
    $statusMsg = $errorMsg = $insertValuesSQL = $errorUpload = $errorUploadType = ''; 
    $fileNames = array_filter($_FILES['files']['name']); 
    if(!empty($fileNames)){ 
        foreach($_FILES['files']['name'] as $key=>$val){ 
            // File upload path 
            $fileName = basename($_FILES['files']['name'][$key]); 
            $targetFilePath = $targetDir . $fileName; 
             
            // Check whether file type is valid 
            $fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION); 
            if(in_array($fileType, $allowTypes)){ 
                // Upload file to server 
                if(move_uploaded_file($_FILES["files"]["tmp_name"][$key], $targetFilePath)){ 
                    // Image db insert sql 
                    $insertValuesSQL .= "('".$fileName."', NOW()),"; 
                }else{ 
                    $errorUpload .= $_FILES['files']['name'][$key].' | '; 
                } 
            }else{ 
                $errorUploadType .= $_FILES['files']['name'][$key].' | '; 
            } 
        } 
         
        if(!empty($insertValuesSQL)){ 
            $insertValuesSQL = trim($insertValuesSQL, ','); 
            // Insert image file name into database 
            $insert = $conn->query ("INSERT INTO berichte (file_name,uploaded_on) VALUES $insertValuesSQL"); 
            if($insert){ 
                $errorUpload = !empty($errorUpload)?'Upload Error: '.trim($errorUpload, ' | '):''; 
                $errorUploadType = !empty($errorUploadType)?'File Type Error: '.trim($errorUploadType, ' | '):''; 
                $errorMsg = !empty($errorUpload)?'<br/>'.$errorUpload.'<br/>'.$errorUploadType:'<br/>'.$errorUploadType; 
                $statusMsg = "Files are uploaded successfully.".$errorMsg; 
				header ("Location:../diagdat3.php?Entry=naechster-Schritt-bitte!");
            }else{ 
                $statusMsg = "Sorry, there was an error uploading your file."; 
            } 
        } 
    }else{ 
        $statusMsg = 'Please select a file to upload.'; 
    } 
     
    // Display status message 
    echo $statusMsg; 
} 
?>
Ich hatte den Code testweise mit "bind_param" modifiziert, aber das klappt nicht.

Welchen Befehl muss ich ausgeben? Wäre klasse wenn Ihr mir helfen könntet.

Vielen Dank im vorraus für Eure Hilfe.
Viele Grüße - AnfaengerZ
Benutzeravatar
AnfaengerZ
Mitglied
Beiträge: 127
Registriert: 13.05.2018 07:48
Wohnort: 28000

Re: MYSQLI Datenupload

Beitrag von AnfaengerZ »

Ich frag mal anders. (und das bezieht sich darauf, das ich es für eine geplante Extension lernen möchte)

Wenn ich einen Post erstelle, in diesen noch eine Auswahl an Dateien anfüge, werden der Post selbst und die Daten in der DB mit einer ID versehen und eingetragen.
Wenn ein anderer den Post dann ließt, so gibt die Datenbank ja alle Einträge/Elemente aus. Woher weiß also die DB, welche Bilder zu welchem Post dazugehören und wo sie liegen? Ist das ein "Join" Befehl? Ich suche mir seit Tagen die Finger wund (Google/Quellcode phpBB).
Daten hochladen und wieder abrufen funktioniert, aber die Verknüpfung zueinander eben nicht.

Ich hab also ein Formular und trage meine Textfelder ein. Weiter unten dann die Dateienauswahl und das "Submit". Die Textfelddaten werden in einen Eintrag geschrieben, sagen wir: INSERT INTO berichte.....
Die Bilder dann in den Uploadsordner und die Bilddaten in den Eintrag "images".
Der Texteintrag hat die id = 235 in Spalte "berichte".
Die Bilder dann id= 45-48 in Spalte "images".

Zum Aufrufen muss das Script ja vermutlich über die ID´s und die Spaltennamen arbeiten, nicht? Also müßte zu jedem Post irgendwo eine zentrale Information liegen, welche der Datenbank sagt, was zusammengehört, entsprechend: Wenn Post ID=X abgerufen wird, dann binde folgende Daten (Quelle/id) mit ein und gebe sie aus.

Wie wird das in der Forensoftware gelöst?
Viele Grüße - AnfaengerZ
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17400
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Re: MYSQLI Datenupload

Beitrag von Dr.Death »

Wenn die post_id aufgerufen wird (Tabelle phpbb_posts, Feld post_id, fiktive ID: 18 ) wir im Feld post_attachment geschaut ob dort ein Attachment gepostet wurde (post_attachment = 1 ? )

Wenn ja, schaue in der Tabelle phpbb_attachment nach, welche Attachments zu (fiktiven) post_id 18 gehören. (Feld post_msg_id)

viewtopic.php :

Ab Zeile 1600 kannst du das Vorgehen begutachten..... es wird zudem noch geprüft ob der entsprechende Benutzer überhaupt die Berechtigung besitzt das Attachment zu sehen bzw. herunterzuladen.....
Benutzeravatar
AnfaengerZ
Mitglied
Beiträge: 127
Registriert: 13.05.2018 07:48
Wohnort: 28000

Re: MYSQLI Datenupload

Beitrag von AnfaengerZ »

Danke sehr. Das hilft.

Ist es notwendig der „Basis“ im Eintragungsverfahren nachzugehen? Oder kann ich innerhalb einer Ext auch separate Wege gehen? Beispiel:

In einem fiktiven Post wird ein Schlüsseleintrag an alle beteiligten db-Spalten eingetragen, welcher immer um einen Wert höher bestimmt wird/ pro Eintrag.

Beim Abrufen des Eintrages, wird also alles an Einträgen über den Schlüssel mit ausgegeben. Wenn also Grundeintrag „X“ gleich Schlüssel „Y“ ist, werden automatisch alle in der angefragten Spalten (FROM/JOIN) mit Kennzeichnung „Y“ auch ausgegeben.

Oder gäbe das Konflikte mit dem Grundscript?

Sorry das ich doof frage - aber Username ist eben leider „noch“ Programm bei mir.... :oops:
Viele Grüße - AnfaengerZ
Antworten

Zurück zu „Coding & Technik“