Bildergrößen in Zeichen umrechnen

Oo....

was mir zuallererst an deinem code auffällt ist - er strotzt vor SQL Injects.

mysql_escape_string() ist dein freund ;)

dein anderes Problem .... files die hochgeladen werden, musst du über das $_FILE array abrufen.

Code:
$blob = file_get_contents($_FILES['userfile']['tmp_name']);
 
Und wie baue ich das jetzt richtig ein? Es klappt bei mir nicht. Ich hab bisher keine Erfahrungen mit Bildern und wage mich zum ersten Mal dran.
 
Sorry, ich kapiers einfach nicht.

Das hier ist mein Ausgangsmaterial:

Das Eingabeformular:
PHP:
echo "<form enctype='multipart/form-data' method='post' action='pbupload.php'>";
echo            "<input type='hidden' name='form_id' value='$id'>";
echo            "<input type='file' name='datei'><br>";
echo            "<input type='radio' name='form_selbstbild' value='selbstbild'>selbstbild";
echo            "<input type='radio' name='form_selbstbild' value='avatar'>avatarbild<br>";
echo            "<input type='submit' value='speichern'>";
echo                 "</form>";

Die upload Datei:
PHP:
print "Datei: ".$_FILES['datei']['name']."<br>";
print "Dateigröße: ".$_FILES['datei']['size']." Bytes<br>";
print "Dateityp: ".$_FILES['datei']['type']."<br>";
$erfolg = move_uploaded_file(
$_FILES['datei']['tmp_name'],
$_FILES['datei']['name']
);
if ($erfolg){
print "<br>Datei ".$_FILES['datei']['name']." wurde gespeichert.<p>";
}
else {
print "<br>Datei ".$_FILES['datei']['name']." wurde nicht gespeichert.<p>";
}

Hierbei wird die Bilddatei in einen Ordner hochgeladen.

OK soweit so gut.
Die Größe hab ich jetzt auch gefunden.

Nur bekomm ich das Bild damit ja nicht in eine Tabelle.

PHP:
print "Datei: ".$_FILES['datei']['name']."<br>";
Das ist der Name der Datei.

PHP:
print "Dateigröße: ".$_FILES['datei']['size']." Bytes<br>";
die Größe der Datei.

PHP:
print "Dateityp: ".$_FILES['datei']['type']."<br>";
Der Dateityp.

Aber wo ist die Datei selbst und wie bekomm ich sie in die Tabelle und nicht in einen Ordner?

Ich hab ein sehr großes Brett vorm Kopf.
 
Du musst bei Erfolg die Datei in eine Variable einlesen:

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

  // Hier den $imageContent in die DB schreiben
}

Weiter oben wurde file_get_contents() erwähnt. Bei Binär-Daten (Bilder sind binär) würde ich das aber nicht verwenden, ich traue der Funktion nicht ;-) Natürlich kannst du ausprobieren, was dabei passiert.
 
Versteh ich das dann so richtig?

PHP:
include("dbconnect.inc.php");
$id=$_POST['form_id'];
$dateiname=$_FILES['datei']['name'];
$dateigröße=$_FILES['datei']['size'];
$dateityp=$_FILES['datei']['type'];
$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 = "select

         id,
         profilbild,
         name,
         größe,
         typ,
         selbstbild
         from
         profilbild
         where
         id='$id'";

$result = mysql_query($sql) or die(mysql_error());
if  (!($row = mysql_fetch_row($result)))
{



$sql = "INSERT INTO profilbild (

         id,
         profilbild,
         name,
         größe,
         typ,
         selbstbild
         )
         values(
         $id,
         $imageContent,
         $dateiname,
         $dateigröße,
         $dateityp,
         '".$_POST['form_selbstbild']."'
          )";

mysql_query($sql) or die(mysql_error());

header("Location: http://".$_SERVER['HTTP_HOST']
         ."/profil.php?meldung=Ihr Bild wurde gespeichert.");
    }
else
{
$sql = "update profilbild set

         id = $id,
         profilbild = $imageContent,
         name = $dateiname,
         größe = $dateigröße,
         typ = $dateityp,
         selbstbild = '".$_POST['form_selbstbild']."'
          where
         id='$id'";

mysql_query($sql) or die(mysql_error());

header("Location: http://".$_SERVER['HTTP_HOST']
         ."/profil.php?meldung=Ihr Bild wurde aktualisiert.");
}
}
}
 
Naja, das sieht schon mal nicht schlecht aus, was die Logik angeht. Allerdings solltest du daran arbeiten, den Code richtig zu formatieren. Einrückungen an den richtigen Stellen erleichtern das Lesen ungemein.

Zu den SQL-Statements: Letztens war es noch so, das man Strings in Single-Quotes (') setzen muss, um sie als solche zu kennzeichnen ;-)

Aber das siehst du ja, wenn du den Code testest und mit MySQL-Fehler vollgeballert wirst :-) Immerhin gut, das du mysql_error() schon richtig einsetzt.

Zum testen würde ich in die erste Zeile schreiben:

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
 
Du solltest bei der Ausgabe von mysql_error() noch zusätzlich den Query mit echo ausgeben, dann sieht man auch gleich, welches SQL den Fehler verursacht hat.
 
Dann bekomme ich das:

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Notice: Undefined variable: row in /var/www/web571/html/pbupload.php on line 35

Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei '' in Zeile 12
 
Zurück