Dateipfad in Datenbank speichern

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
Status
Für weitere Antworten geschlossen.
T

TheBeat

Guest
Hallo,

hier erstmal der Code :)
Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];

$upload_folder = 'upload3/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}

//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo 'Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a>';
?>

Wie kann ich den Upload-Pfad, also $new_path, in meiner Datenbank abspeichern ?
Ich hatte es bereits hiermit probiert:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hase123');
$statement = $pdo->prepare("INSERT INTO adressen (id, geschlecht, vorname, nachname, email, passwort, geburtstag, geburtsmonat, geburtsjahr, agb, wohnort, job, biografie, new_path created_at, updated_at) VALUES (NULL,  '$Geschlecht','$Vorname', '$Nachname', '$Email', '$Passwort', '$Geburtstag', '$Geburtsmonat', '$Geburtsjahr', '$AGB', '$Wohnort', '$Job', '$Biografie', '$new_path', CURRENT_TIMESTAMP, NULL)");
$statement->execute();

doch leider ohne Erfolg :/
Hat jemand ne Idee ?
 

scbawik

Senior HTML'ler
14 Juli 2011
2.552
448
83
Hallo,

hier erstmal der Code :)
Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];

$upload_folder = 'upload3/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}

//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
echo 'Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a>';
?>

Wie kann ich den Upload-Pfad, also $new_path, in meiner Datenbank abspeichern ?
Ich hatte es bereits hiermit probiert:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hase123');
$statement = $pdo->prepare("INSERT INTO adressen (id, geschlecht, vorname, nachname, email, passwort, geburtstag, geburtsmonat, geburtsjahr, agb, wohnort, job, biografie, new_path created_at, updated_at) VALUES (NULL,  '$Geschlecht','$Vorname', '$Nachname', '$Email', '$Passwort', '$Geburtstag', '$Geburtsmonat', '$Geburtsjahr', '$AGB', '$Wohnort', '$Job', '$Biografie', '$new_path', CURRENT_TIMESTAMP, NULL)");
$statement->execute();

doch leider ohne Erfolg :/
Hat jemand ne Idee ?

Lass dir halt mal den Fehler anzeigen...
Code:
print_r($statement->errorInfo());

Und noch was anderes... Von "SQL Injection" nie was gehört?
 
T

TheBeat

Guest
Lass dir halt mal den Fehler anzeigen...
Code:
print_r($statement->errorInfo());

Und noch was anderes... Von "SQL Injection" nie was gehört?

Also mir wird kein Fehler angezeigt :/

Hab ein wenig rumprobiert und nun sieht der Code so aus:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hase123');
$statement = $pdo->prepare("INSERT INTO adressen (pfad) VALUES ('$new_path') WHERE id = '$userid'");
$statement->execute();
print_r($statement->errorInfo());

Doch funktioniert auch nicht. Liegt es vielleicht daran das der Code an der falschen stelle im Script platziert sein könnte ? oder ist der Code schon nicht richtig ?

und ne noch nie was von SQL Injection gehört, was ist das ?
 

scbawik

Senior HTML'ler
14 Juli 2011
2.552
448
83
Also mir wird kein Fehler angezeigt :/

Hab ein wenig rumprobiert und nun sieht der Code so aus:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hase123');
$statement = $pdo->prepare("INSERT INTO adressen (pfad) VALUES ('$new_path') WHERE id = '$userid'");
$statement->execute();
print_r($statement->errorInfo());

Doch funktioniert auch nicht. Liegt es vielleicht daran das der Code an der falschen stelle im Script platziert sein könnte ? oder ist der Code schon nicht richtig ?

und ne noch nie was von SQL Injection gehört, was ist das ?

error reporting überhaupt aktiviert?
PHP:
ini_set('display_errors', 1);
error_reporting(E_ALL);
https://de.wikipedia.org/wiki/SQL-Injection
 
T

TheBeat

Guest
error reporting überhaupt aktiviert?
PHP:
ini_set('display_errors', 1);
error_reporting(E_ALL);
https://de.wikipedia.org/wiki/SQL-Injection

ja ist aktiviert doch es wird trotzdem kein Fehler geschmissen :/
Das ist nochmal das komplette Script:

Code:
<?php
session_start();
if(!isset($_SESSION['userid'])) {
    die('Bitte zuerst <a href="Mac_Version1.php">einloggen</a>');
}
$userid = $_SESSION['userid'];

$upload_folder = 'upload3/'; //Das Upload-Verzeichnis
$filename = "bild_user".$userid.$Kategorie;
$extension = strtolower(pathinfo($_FILES['datei']['name'], PATHINFO_EXTENSION));

 
//Überprüfung der Dateiendung
$allowed_extensions = array('png', 'jpg', 'jpeg', 'gif',);
if(!in_array($extension, $allowed_extensions)) {
    die("Ungültige Dateiendung. Nur png, jpg, jpeg und gif-Dateien sind erlaubt");
}
 
//Überprüfung der Dateigröße
$max_size = 4000*1024; //4000 MB
if($_FILES['datei']['size'] > $max_size) {
    die("Bitte keine Dateien größer 4mb hochladen");
}

//Überprüfung dass das Bild keine Fehler enthält
if(function_exists('exif_imagetype')) { //Die exif_imagetype-Funktion erfordert die exif-Erweiterung auf dem Server
    $allowed_types = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF,);
    $detected_type = exif_imagetype($_FILES['datei']['tmp_name']);
    if(!in_array($detected_type, $allowed_types)) {
        die("Nur der Upload von Bilddateien ist gestattet");
    }
}
 
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
//Neuer Dateiname falls die Datei bereits existiert
if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
    $Anzahl = 1;
    do {
        $new_path = $upload_folder.$filename.$Anzahl.'.'.$extension;
        $Anzahl++;
    } while(file_exists($new_path));
}

//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'hase123');
$statement = $pdo->prepare("INSERT INTO adressen (pfad) VALUES ('$new_path') WHERE id = '$userid'");
$statement->execute();
echo 'Bild erfolgreich hochgeladen, zur&uumlck zur <a href="loogin.php">Startseite</a>';
?>

hab jetzt bewusst das Script ohne Fehleranalyse gepostet
 
T

TheBeat

Guest
Also erstmal
http://php.net/manual/de/pdo.prepared-statements.php
Und warum machst du ein INSERT INTO mit einer WHERE Bedingung? Müsste es denn nicht ein Update sein?

Bzgl. dein Insert Query aus dem ersten Post. Die ID brauchst du nicht mit speichern wenn es ein auto_increment Feld ist.

Ja das ist falsch, hast recht das man damit eigentlich eher Updatet. Hab das auch jetzt schon geändert.

Jetzt mal blöd gefragt:
Code:
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
$statement = $pdo->prepare("INSERT INTO adressen (pfad) VALUES ('hallo')");
$statement->execute();
Warum wird in die Spalte "pfad" in meiner Datenbank nichts eingetragen ? Kann es daran liegen das der Code an einer falschen Stelle im Script angeordnet ist ?

Ich habe diesen Code jetzt nur geschrieben um zu sehen ob überhaupt irgendwelche Informationen in der Datenbank gespeichert werden und das ist nicht der Fall :/
 

B3nnoX

Aktives Mitglied
9 Januar 2013
533
106
43
Das könnte mehrere Möglichkeiten haben, hast du denn schon geschaut das du Verbindung zur Datenbank hast?
Ansonsten musst du einfach mal debuggen.

Irgendwo steigt dein Script schon vorher aus. Entweder stimmt was mit deiner PDO Verbindung nicht oder dein Script kommt erst gar nicht bis dahin.

PHP:
try {
 $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
 echo 'Verbindung fehlgeschlagen: ' . $e->getMessage();
 exit;
}
Kleine Lektüre: http://php.net/manual/de/pdo.error-handling.php

Damit wird auf jedenfall ein Fehler ausgeworfen wenn die Verbindung nicht zustande kommt.

Ansonsten setz einfach an unterschiedlichen Stellen in deinem Script eine Ausgabe und teste ob die denn auch ausgegeben werden.
 
T

TheBeat

Guest
Das könnte mehrere Möglichkeiten haben, hast du denn schon geschaut das du Verbindung zur Datenbank hast?
Ansonsten musst du einfach mal debuggen.

Irgendwo steigt dein Script schon vorher aus. Entweder stimmt was mit deiner PDO Verbindung nicht oder dein Script kommt erst gar nicht bis dahin.

PHP:
try {
 $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
 echo 'Verbindung fehlgeschlagen: ' . $e->getMessage();
 exit;
}
Kleine Lektüre: http://php.net/manual/de/pdo.error-handling.php

Damit wird auf jedenfall ein Fehler ausgeworfen wenn die Verbindung nicht zustande kommt.

Ansonsten setz einfach an unterschiedlichen Stellen in deinem Script eine Ausgabe und teste ob die denn auch ausgegeben werden.
Ich werde deine Tipps am Wochenende auf jeden Fall mal durchführen.

Aber mal ganz kurz gefragt. Folgender Code müsste doch eigentlich funktionieren oder ? Also das die Variable $Pfad in die Datenbank eingetragen wird:

Code:
<?php
$Pfad = "hallo";
echo $Pfad;
$pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
$statement = $pdo->prepare("INSERT INTO adressen (pfad) VALUES ('$Pfad')");
$statement->execute();
?>

Oder ist da irgendwas an der Schreibweise falsch ?
 
T

TheBeat

Guest
Das könnte mehrere Möglichkeiten haben, hast du denn schon geschaut das du Verbindung zur Datenbank hast?
Ansonsten musst du einfach mal debuggen.

Irgendwo steigt dein Script schon vorher aus. Entweder stimmt was mit deiner PDO Verbindung nicht oder dein Script kommt erst gar nicht bis dahin.

PHP:
try {
 $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (PDOException $e) {
 echo 'Verbindung fehlgeschlagen: ' . $e->getMessage();
 exit;
}
Kleine Lektüre: http://php.net/manual/de/pdo.error-handling.php

Damit wird auf jedenfall ein Fehler ausgeworfen wenn die Verbindung nicht zustande kommt.

Ansonsten setz einfach an unterschiedlichen Stellen in deinem Script eine Ausgabe und teste ob die denn auch ausgegeben werden.


Also ich hab jetzt mal versucht das mir ein Fehler ausgeworfen wird. Es wird tatsächlich etwas angezeigt doch leider weiß ich nicht was mir das sagen soll:

array(3) { [0]=> string(5) "HY000" [1]=> int(1364) [2]=> string(47) "Field 'geschlecht' doesn't have a default value" }

Hast du ne Idee ?
 
T

TheBeat

Guest
Eigentlich sollte dich das auf den richtigen Weg bringen. Du hast in deiner Tabelle eine Spalte 'geschlecht', die du aber nicht bestückst und der auch kein Default-Wert zugeweisen ist.

mmh komisch da "Geschlecht" bereits bei der Registrierung festgelegt wird und in die Datenbank eingetragen wird. In der Datenbank habe ich ja auch einen Eintrag in der Spalte...
 

scbawik

Senior HTML'ler
14 Juli 2011
2.552
448
83
mmh komisch da "Geschlecht" bereits bei der Registrierung festgelegt wird und in die Datenbank eingetragen wird. In der Datenbank habe ich ja auch einen Eintrag in der Spalte...

Na wenn du einen Eintrag "updaten" willst, musst du natürlich auch "UPDATE" statt "INSERT" verwenden... -.-
 
Status
Für weitere Antworten geschlossen.
Werbung: