DATA-URL statt Images - Größe

Ich habe mein Skript nun etwas geändert.

Ich habe jetzt ALLE Daten in einem Array, aber ich weiss nicht weiter... :D

Code:
Array
(
[0] => Array
(
[N] => LaLaLa1
[W] => LaLaLa2
[H] => LaLaLa3
[I] => LaLaLa4
)
[1] => Array
(
[N] => LaLaLa1
[W] => LaLaLa2
[H] => LaLaLa3
[I] => LaLaLa4
)
[2] => Array
(
[N] => LaLaLa1
[W] => LaLaLa2
[H] => LaLaLa3
[I] => LaLaLa4
)
[3] => Array
(
[N] => LaLaLa1
[W] => LaLaLa2
[H] => LaLaLa3
[I] => LaLaLa4
)
...
...
...

Das ganze soll jetzt in die Datenbank aber wie?

Tabelle: Kaffee
1. Spalte: LaLaLa1
2. Spalte: LaLaLa2
3. Spalte: LaLaLa3
4. Spalte: LaLaLa4
 
Scheinbar kennst du dich noch nicht so mit Datenbanken aus, daher schau dir mal folgendes an:
http://php.net/manual/de/pdo.prepared-statements.php

EDIT:
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// eine Zeile einfügen
$name = 'one';
$value = 1;
$stmt->execute();

// eine weitere Zeile mit anderen Werten einfügen
$name = 'two';
$value = 2;
$stmt->execute();
?>

Das folgende packst du dir dann am besten in die While-Schleife rein und lässt diese damit in die Datenbank eintragen.
PHP:
$name = 'one';
$value = 1;
$stmt->execute();
 
Zuletzt bearbeitet:
Ich hänge gerade an einem anderen Problem...

Was für einen Typ muss die Spalte haben für die DATA-URL? Varchar? Wie groß?
 
Bis zu 255 Zeichen kannst du ein Varchar nutzen, darüber solltest du Text nehmen.

Ich empfehle dir aber für alle Tabellen immer die ID zu nutzen, diese soll dann immer einen Primärschlüssel per AUTO_INCREMENT bekommen, denn nur damit gehst du sicher, dass es auf jeden Fall alles einzigartige Einträge sind, denn sonst könnte es identische Einträge geben, welche dir später das Leben schwer machen.
 
Ist bereits alles in der DB.

Jetzt muss ich nur noch herausfinden...

1.) Ob ich es richtig gemacht habe?
2.) Ob es mit der DB wirklich besser ist als mit der XML-Datei?

PHP:
<?php
  // Error-Report
  error_reporting(E_ALL);

  // Memory-Limit
  @ini_set("memory_limit",'512M');

  // Maximale-Skriptlaufzeit
  @set_time_limit(300);

  // vBulletin einbinden
  include('global.php');

  // Tabelle erstellen
  $vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS Kaffee (ID varchar(128) NOT NULL default '', Width varchar(128) NOT NULL default '', Height varchar(128) NOT NULL default '', Image BLOB NOT NULL default '', PRIMARY KEY (ID))");

  // Verzeichnis (Intern)
  $Verzeichnis_Int = "/www/htdocs/w56a649g/kaffee/de/alle/";

  // Verzeichnis (Extern)
  $Verzeichnis_Ext = "http://www.meine-seite.de/kaffee/de/alle/";

  // Verzeichnis öffnen
  $Open_V = openDir($Verzeichnis_Int);

  // While-Schleife
  while ($Files = readDir($Open_V))
  {
  // Nur dieses Verzeichnis auslesen
  if ($Files != "." && $Files != "..")
  {
  // Width und Height auslesen
  $GetImageSize = getimagesize($Verzeichnis_Ext.$Files);

  // Grafiken Base64 Codieren
  $Base64 = base64_encode(file_get_contents($Verzeichnis_Ext.$Files));

  // Base 64 Data-Url erstellen
  $DATA_URL = 'data:image/png;base64,'.$Base64;

  // .png aus Dateiname entfernen
  $Files = str_replace(".png","", $Files);

  // In Array laden
  $Create_Array[] = array('ID' => "$Files", 'Width'  => "$GetImageSize[0]", 'Height' => "$GetImageSize[1]", 'Image'  => "$DATA_URL");
  }
  }

  // Array sortieren
  sort($Create_Array);

  // Verzeichnis schließen
  closeDir($Open_V);

  // For-Schleife
  foreach ($Create_Array as $CA)
  {
  // In DB eintragen
  $vbulletin->db->query_write("INSERT INTO Kaffee (ID, Width, Height, Image) VALUES ('$CA[ID]', '$CA[Width]', '$CA[Height]', '$CA[Image]')");
  }

  // Fertig
  echo 'Alles in DB eingetragen.';
?>
 
Ganz leicht verbessert.

Vielleicht kann es ja mal jemand gebrauchen.

PHP:
<?php
// ######################################################################
// Alle Fehler anzeigen
// ######################################################################
  error_reporting(E_ALL);

// ######################################################################
// Set Memory-Limit
// ######################################################################
  @ini_set("memory_limit",'512M');

// ######################################################################
// Set Maximale-Skriptlaufzeit
// ######################################################################
  @set_time_limit(300);

// ######################################################################
// vBulletin BACK-END laden
// ######################################################################
  $Get_vBulletin = getcwd();
  chdir('/www/htdocs/w56a649g');
  include('global.php');
  chdir($Get_vBulletin);

// ######################################################################
// Alte Tabelle löschen (wenn vorhanden)
// ######################################################################
  $vbulletin->db->query_write("DROP TABLE IF EXISTS Kaffee");

// ######################################################################
// Neue Tabelle erstellen
// ######################################################################
  $vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS Kaffee (ID varchar(128) NOT NULL default '', Width varchar(128) NOT NULL default '', Height varchar(128) NOT NULL default '', Image LONGBLOB NOT NULL default '', PRIMARY KEY (ID))");

// ######################################################################
// Verzeichnis
// ######################################################################
  $Verzeichnis_Int = "/www/htdocs/w56a649g/kaffee/de/alle/";
  $Verzeichnis_Ext = "http://www.meine-seite.de/kaffee/de/alle/";

// ######################################################################
// Verzeichnis öffnen (einlesen)
// ######################################################################
  $Open_V = openDir($Verzeichnis_Int);

// ######################################################################
// While-Schleife
// ######################################################################
  while ($Files = readDir($Open_V))
  {
  // Nur dieses Verzeichnis auslesen
  if ($Grafiken != "." && $Grafiken != "..")
  {
  // Width und Height auslesen
  $GetImageSize = getimagesize($Verzeichnis_Ext.$Grafiken);

  // Grafiken Base64 Codieren
  $Base64 = base64_encode(file_get_contents($Verzeichnis_Ext.$Grafiken));

  // Base64 Data-Url erstellen
  $DATA_URL = 'data:image/png;base64,'.$Base64;

  // .png aus Dateiname entfernen
  $Grafiken = str_replace(".png","", $Grafiken);

  // In Array laden
  $Grafiken_Array[] = array('ID' => "$Grafiken)", 'Width'  => "$GetImageSize[0]", 'Height' => "$GetImageSize[1]", 'Image'  => "$DATA_URL");
  }
  }

// ######################################################################
// Array sortieren (Alphabetisch)
// ######################################################################
  sort($Grafiken_Array);

// ######################################################################
// Verzeichnis schließen
// ######################################################################
  closeDir($Open_V);

// ######################################################################
// For-Schleife
// ######################################################################
  foreach ($Grafiken_Array as $GA)
  {
  // In DB eintragen
  $vbulletin->db->query_write("INSERT INTO Kaffee (ID, Width, Height, Image) VALUES ('$GA[ID]', '$GA[Width]', '$GA[Height]', '$GA[Image]')");
  }

// ######################################################################
// Skript ist fertig (Meldung)
// ######################################################################
  echo 'Alles in die DB eingetragen.';
?>

Es sind übrigens 2617 "Grafiken" und die größte ist 101.4 KiB groß.
 
Zuletzt bearbeitet:
PHP:
$vbulletin->db->query_write("CREATE TABLE IF NOT EXISTS Kaffee (ID varchar(128) NOT NULL default '', Width varchar(128) NOT NULL default '', Height varchar(128) NOT NULL default '', Image LONGBLOB NOT NULL default '', PRIMARY KEY (ID))");
Du hast hier zwar den Primary Key eingetragen, aber nicht auf AUTO_INCREMENT gesetzt.

Dann hast du die ID, welche standartmäßig INT ist, auf Varchar gesetzt, weil du scheinbar alphanumerische Zeichen drin haben wirst, die in einer ID meines Wissens nichts zu suchen haben.

Am besten ist es wie bereits oben schon geschrieben, du lässt die ID, die Datenbank selbst setzen.

Dann reicht es bei der ID vollkommen aus, wenn du auf INT 11 Stellen angibst, weil das reicht dann von 1 bis 99.999.999.999 Einträgen und dies zählt automatisch hoch und du gibst dieser Spalte beim eintragen und ändern keinen Wert an, sondern nimmst diesen Wert nur zum bearbeiten oder löschen um festzulegen, für welchen Eintrag dies gilt.

Das was du jetzt in die Spalte ID rein schreibst, solltest du besser in eine extra-Spalte schreiben, die du Name oder ähnliches benennst. Dort kannst du diese auf varchar setzen.
 
Schade das mir hier keiner sagen kann welche Variante für mich die bessere wäre.

Ich brauche für einen Aufruf (der Seite) ca. 15 "Grafiken". Das wären also 15 DB-Querys, wenn man es einzeln laufen lassen würde. Ich würde gerne wissen, wie PHP einen XML genau "liest". Wie einen Text oder kann er zum "Ziel" springen? Das "schöne" an XML wäre, dass ich alle Grafiken in einer einzigen XML-Datei habe und diese auch nur einmal aufrufen muss.
 
Das ist mir klar. ;)

Aber das Skript holt sich die Grafiken eigentlich immer "im eigenen Bereich". Nun muss ich das dermaßen umbauen, dass es SQL tauglich wird.
 

Neue Beiträge

Zurück