• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Upload von Bildern per PHP in eine MySQL-Datenbank

chr_sch

Neues Mitglied
Hi,

ich möchte in einer PHP-Seite ein Formular einrichten, mit dem man Bilder in eine MySQL-Datenbank laden kann.
Meine SQL-Tabellen:

CREATE TABLE autor (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
fk_bild INTEGER REFERENCES bild(id)
);

CREATE TABLE bild(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
type VARCHAR(100) NOT NULL,
image LONGBLOB NOT NULL
);

Auf der Seite "hinzu_autor.php" ist ein Formular zur Auswahl des Autorennamens und zur Auswahl der Bilddatei:

PHP:
<!DOCTYPE html>
<html>

<head>
    <meta    charset = "UTF-8">
    <link type="text/css" rel="stylesheet" href="style.css" />
    <title>Webforum</title>
</head>

<body>
    <div id= "header">
        <h2>WebForum</h2>
    </div>
    
    <div id="standard">
    <p>Bitte tragen Sie in das Formular den neuen Autorennamen ein:</p>
    </br>
    <form action="neu_autor.php" method="post" enctype="multipart/form-data" name="upload">
            Name:</br>
            <input type="text" name="name" value="">
            </br></br>
            Bild:  
            <input type="file" size="30" name="datei" value="">
            </br></br>
            <input type="submit" name="submit" value="hinzu">
        </form>
        

    </div>

</body>

</html>

In der PHP-Datei "neu_autor.php" sollen die Datenbankanweisungen dann ausgeführt werden:

PHP:
<!DOCTYPE html> 
<html>

<head>
    <meta    charset = "UTF-8">
    <link type="text/css" rel="stylesheet" href="style.css" />
    <title>Autor eintragen</title>
</head>

<body>
<div id="standard">
    <?php include 'db_anmelde.php';
    
    $name = $_FILES['datei']['name'];
    $size = $_FILES['datei']['size'];
    $mime = $_FILES['datei']['type'];
    $sql =       "INSERT INTO bild (name, type, image ) VALUES(?,?,?);";

    // Oeffnen eines Filestreams:
    $file = fopen($_FILES['datei']['tmp_name'], "rb" );
    $q = $dbh->prepare($sql);
    if( $q ) {
        $q->bindParam(1, $name);
        $q->bindParam(2, $mime);
        $q->bindParam(3, $file, PDO::PARAM_LOB);
        $q->execute(); // Hier wird der DB-Eintrag ausgeführt
}

    if ( $_POST[name] != '' ){
        $sql= "INSERT INTO autor(name) VALUES ('$_POST[name]');";
        $kat_neu = $dbh->exec($sql);
    }
    else{
    echo 'Bitte keine leere Zeichenkette eingeben!';
    }
    
    if ($kat_neu){
        echo "Der gewählte Autorenname wurde erfolgreich hinzugefügt";
    }
    else{
        echo "Fehler beim Eintragen in DB";
    }
    ?>
    <br><br><br>
    <a href="index.php">Startseite</a><br>
</div>
</body>

</html>

Nach einem Testversuch mit einer jpg-Datei habe ich in der Datenbank festgestellt, dass ein Eintrag stattgefunden hat. Jedoch schmiert die Datenbank ab und der Rechner stürzt dann ab. Daher wird wohl etwas mit dem Code nicht ganz in Ordnung sein. Konnte bisher keinen Fehler finden.
Hoffe, dass jemand einen Fehler findet.

Gruss
 
Werbung:
Hi,
die Bilder sollen doch nicht direkt in der DB gespeichert werden, sondern erstmal nur hochgeladen werden. Habe schon mehrere Stunden mir andere Codes und Scripts angeguckt und sämtliche Foreneinträge durchkämmt ohne auf etwas zu stoßen, das mir die Erleuchtung brachte.
Wie muss ich meinen Code ändern um ganz simpel Dateien auf den Server der Webseite zu laden ohne irgendwelche Typabfragen für die hochzuladende Datei zu machen?

Hoffe auf Hilfe :-)
Gruss
 
Werbung:
Ok, habe mich jetzt an den Codes orientiert.

Hier mein Formular-php:

PHP:
<!DOCTYPE html>
<html>

<head>
    <meta    charset = "UTF-8">
    <link type="text/css" rel="stylesheet" href="style.css" />
    <title>Webforum</title>
</head>

<body>
    <div id= "header">
        <h2>WebForum</h2>
    </div>
    
    <div id="standard">
    <p>Bitte tragen Sie in das Formular den neuen Autorennamen ein:</p>
    </br>
    <form action="neu_autor.php" method="post" enctype="multipart/form-data" name="upload">
            Name:</br>
            <input type="text" name="name" value="">
            </br></br>
            Bild:  
            <input type="file" size="30" name="datei" value="">
            </br></br>
            <input type="submit" name="submit" value="hinzu">
        </form>
        

    </div>

</body>

</html>

Und hier "neu_autor.php":

PHP:
<!DOCTYPE html> 
<html>

<head>
    <meta    charset = "UTF-8">
    <link type="text/css" rel="stylesheet" href="style.css" />
    <title>Autor eintragen</title>
</head>

<body>
<div id="standard">
    <?php include 'db_anmelde.php';
    
    $_FILES['datei']['name'];
    $_FILES['datei']['type'];
    $_FILES['datei']['size'];
    $_FILES['datei']['tmp_name'];
    $_FILES['datei']['error'];
    
    $uploaddir = './';
    $uploadfile = $uploaddir . basename($_FILES['datei']['name']);

    echo '<pre>';
    if (move_uploaded_file($_FILES['datei']['tmp_name'], $uploadfile)) {
        echo "Datei ist valide und wurde erfolgreich hochgeladen.\n";
    } else {
        echo "Dateiupload fehlgeschlagen!\n";
    }

    echo 'Weitere Debugging Informationen:';
    print_r($_FILES);
    
    print "</pre>";

    
    
    
    if ( $_POST[name] != '' ){
        $sql= "INSERT INTO autor(name) VALUES ('$_POST[name]');";
        $autor_neu = $dbh->exec($sql);
    }
    else{
    echo 'Bitte keine leere Zeichenkette eingeben!';
    }
    
    if ($autor_neu){
        echo "Der gewählte Autorenname wurde erfolgreich hinzugefügt";
    }
    else{
        echo "Fehler beim Eintragen in DB";
    }
    ?>
    <br><br><br>
    <a href="index.php">Startseite</a><br>
</div>
</body>

</html>

Der Name wird eingetragen. Jedoch wird das Bild nicht hochgeladen und ich bekomme folgende Fehlermeldung:

Dateiupload fehlgeschlagen! Weitere Debugging Informationen:Array ( [datei] => Array ( [name] => test.jpg [type] => image/jpeg [tmp_name] => /tmp/phpmn0XFi [error] => 0 [size] => 36623 ) )
 
Hast du die Einstellungen in der php.ini geprüft welche auf der php Seite beschrieben sind?
Stimmt dein Temp Dir? Unter Windows gibt es /tmp nämlich nicht. Unter Linux brauchst du entsprechende Rechte dort schreiben zu dürfen, das gleich gilt dort für den Zielordner.

$_FILES['datei']['name'];
$_FILES['datei']['type'];
$_FILES['datei']['size'];
$_FILES['datei']['tmp_name'];
$_FILES['datei']['error'];
Was soll das? Nimm das mal raus.
MfG
 
Hallo,

aber schreibrechte hast?
Was ist das für eine fehlermeldung?
PHP fehlermldung wird gebraucht, keine zusammengebastelte.
bau mal das ganz am anfang ein und dann gespant sein was dir um dir ohren gehauen wird :O)
PHP:
<?php
error_reporting(-1); #E_ALL
ini_set("display_errors",1);
?>

Cheffchen
 
Werbung:
Die Bilder wurden doch richtig abgespeichert. Habe angenommen, dass die Bilder nicht direkt in der DB gespeichert wurden. Das WirrWarr das mir die DB angezeigt hat, waren wohl die Binärdaten des Bildes. Klappt jetz alles. Danke
 
Zurück
Oben