Mein Bild kommt nicht in der Tabelle an.

Kolibri814

Mitglied
Hi,
könnt ihr mir bitte helfen.

PHP:
include("dbconnect.inc.php");
$dateigröße=$_FILES['datei']['size'];

$fd = fopen( $_FILES['datei']['name'], "rb" );
if( $fd ) {
  $imageContent = fread( $fd, filesize( $_FILES['datei']['name'] ) );
  fclose( $fd );

if ($dateigröße>153600)
{
header("Location: http://".$_SERVER['HTTP_HOST']
         ."/profil.php?meldung=Ihr Bild ist zu groß. Maximal 150kb");
}
else
{
$sql = "INSERT INTO profilbild (
                         id,
                         beschreibung,
                         datum,
                         name,
                         datei
                         )
                         VALUES(
                         '".$_POST['id']."',
                         '".$_POST['beschreibung']."',
                         '".$_POST['datum']."',
          '".mysql_real_escape_string($_FILES['datei']['name'])."',
          0x".bin2hex(file_get_contents($_FILES['datei']['tmp_name'])).");";

$result = mysql_query($sql) or die(mysql_error());
}
}

Ich find einfach den Fehler nicht.

Bitte um Hilfe

Danke
 
Die ID sollte definitiv nicht über POST kommen. Für ID-Spalten verwendet man normalerweise INT PRIMARY AUTO_INCREMENT NULL ... also das du die ID garnicht selbst einfügst sondern die DB das für dich macht ... das solltest du als ALLER ERSTES ändern.
Dann wäre die Frage : kommt denn irgend ein Fehler ? Oder steht was falsches in der DB drin ? Auch die Prüfung der Datei-Größe musst du nicht mit PHP machen ... dafür gibt es einen Parameter im <input type="file"> - Tag.
Auch ist die "Fehlerbeschreibung" nicht ganz klar ... der Titel sagt zwar das etwas nicht funktioniert ... und auch scheinbar was nicht funktioniert ... allerdings ist der Rest SEHR drüftig.
 
Für ID-Spalten verwendet man normalerweise INT PRIMARY AUTO_INCREMENT NULL ... also das du die ID garnicht selbst einfügst sondern die DB das für dich macht ... das solltest du als ALLER ERSTES ändern.
Müsste eigentlich PRIMARY KEY heißen, aber ansonsten vollkommen richtig! Wenn du AUTO_INCREMENT als Attribut angibst, zählt MySQL für dich die ID selber hoch.
Übrigens schließt man auch keine Integer mit Anführungszeichen ein.

Auch die Prüfung der Datei-Größe musst du nicht mit PHP machen ... dafür gibt es einen Parameter im <input type="file"> - Tag.
Da kann ich dir leider nicht zustimmen. Es gibt zum einen Browser, die das nicht unterstützen, aber der Knackpunkt ist, dass "jeder" eine POST-Anfrage senden kann. Somit ist die Größe nicht sichergestellt!

Außerdem würde ich dir (Kolibri814) unbedingt empfehlen, die POST-Daten mit [phpf]mysql_real_escape_string[/phpf] zu entschärfen wie du das beim Dateinamen gemacht hast.

Und wieso liest du die Datei zweimal ein? Einmal oben per [phpf]fread[/phpf] und dann nochmal im SQL-Query per [phpf]file_get_contents[/phpf]
 
Mein Feld "id" soll aber nicht automatisch hoch gezält werden, sondern mit der userid gefüllt, die bei der Registrierung in einer anderen Tabelle vergeben wird.
Damit ist eine zuweisung des Profilbildes zum Profil möglich. Jedes Profil nur ein Profilbild und nur eine id.


Die anderen Post Daten brauche ich nicht zu entschärfen, weil diese mit "hidden" bzw mit einer vorgegebenen Auswahl übergeben werden. Kein user kann hier selbst etwas eingeben.

Zum Problem:
es gibt keine Fehlermeldung.
Nur ist die Tabelle leer.

Es hat ja schoneinmal funktioniert, nur dann hab ich eben noch
id,
beschreibung,
datum,

hinzugefügt und nun kommen keine Daten mehr in der Tabelle an.
 
@ComFreek
Ja ok .. hast recht ... Einspruch stattgegeben xD

@TO
Die anderen Post Daten brauche ich nicht zu entschärfen ...
Ähm ... da muss ich jetzt die selbe Antwort geben wie ComFreek mir : es gibt Browser die das HIDDEN nicht unterstützen ... auch kannst du mit eigenen Programmen einen Request absetzen ... hier also definitiv ALLES schützen.
Dessweiteren ist dein Query komplett falsch. Versuche diesen mal mit Test-Daten in phpMyAdmin auszuführen ... da stecken Fehler über Fehler drin ...
Richtiger weise müsste es so heißen :
SQL:
INSERT INTO `profilbild` ('id', 'beschreibung', 'datum', 'name', 'datei')
Man muss die Bezeichnungen der Spalten ebenfalls in Quotes setzen ... ansonsten wird versucht diese als KEYWORD zu interpreteieren was natürlich fehlschlägt.
Auch ist das mit dem bin2hex echt einfach nur umständlich ... du kannst auch dierekt das "File" übergeben ... den rest macht der SQL-Driver selbst ...
 
Ok, hab einfach den Falschen name angegeben.

Das Formular hat nichts an das Auswertungsskript übergeben.

Dafür kommt jetzt das:
"Warning: fopen(Bild01.jpg) [function.fopen]: failed to open stream: No such file or directory in /var/www/web1602/html/pbupload.php on line 5"

************
 
Die Meldung ist ja ziemlich eindeutig.
Richtiges Verzeichnis?
Groß-/Kleinschreibung vom Dateinamen? Auch vom "jpg"?
 
Eigentlich sollte $_FILES schon den richtigen Pfad enthalten ... ich würde mir erstmal das komplette $_FILES -Array ausgeben lassen ...
 
Dann guck dir bitte mal sämtliche Tutorials zu diesem Thema an ... die Daten die du "hochlädst" werden in einem TEMP-File auf dem Server gespeichert. Der Pfad zu dieser Datei und der Name selbst sollte in $_FILES stehen wenn ich das noch richtig in erinnerung habe. Guck mal bei den PHP-Tutorials nach einem Tutorial was sich um Datei-Uploads geht. Wenn du das hinbekommen hast musst dur nur den Teil in dem das TEMP-File in einem "normalen" File gespeichert wird durch das Uploaden in die Datenbank ersetzen. FERTIG.
 
Zurück