Zufallsbild in Datenbank oder Datei schreiben
poison
- php
0 Vinzenz Mai0 poison
Hallo Zusammen,
ich habe folgendes Problem:
Für das Lösen eines Rätsels sollen meine Besucher Sammelkarten erhalten, die sie später auch tauschen können (Tauschbörse im Forum). Die Sammelkarten sollen in SQL oder einer separaten Datei gespeichert werden, um sie später zur Übersicht für den Sammler auszugeben.
Mit folgendem Codeschnipsel habe ich es geschafft, ein Zufallsbild aus einem Ordner zu generieren:
$foto = array();
$ordner = "../schokofroesche";
$handleordner=opendir ($ordner);
while (false != ($file = readdir ($handleordner)))
{
if ($file != "." && $file != "..")
{
array_push($foto,"<img src = '../schokofroesche/$file' border = '0'>");
}
}
closedir($handleordner);
shuffle($foto);
echo $foto[0];
Damit das Rätsel nur einmal in der Woche gemacht werden kann, soll in einer Spalte der Datenbank der Wert 0 durch 1 ersetzt werden.
$aendern = "UPDATE rustleoaks Set
schuettelraetsel=1 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
Es funktioniert soweit alles. Das Bild wird angezeigt und es wird wirklich zufällig ausgegeben. Auch das mit der 1 läuft.
Nur will PHP mir das ausgewählte Bild nicht in die Datenbank schreiben.
Ich habe folgendes eingegeben:
$aendern = "UPDATE rustleoaks Set
schokofrosch1='$foto[0]' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
Ich bekomme keine Fehlermeldung, aber in SQL kommt auch nichts an. Weder der Wert der Variablen, also die URL oder der Pfad des Bildes, noch die Eingabe in PHP ($foto[0]).
Über Google habe ich versucht, herauszufinden, ob ich es einfach nur falsch geschrieben, bzw. die Anführungszeichen o.ä. vergessen habe. In den meisten Beispielen sah es so aus, wie bei mir.
Liegt es daran, dass ich den Wert der Variablen vorher nicht ausgelesen habe oder kann man ein Zufallsbild gar nicht in die Datenbank schreiben? Wie sieht es mit einer Datei aus? Wohl eher auch nicht, oder?
Wäre echt dankbar, wenn mir jemand sagen könnte, was ich falsch mache.
Liebe Grüße
Poison
Hallo Poison,
Du hast die nächste Runde in der Kontextproblematik eingeläutet :-)
Mit folgendem Codeschnipsel habe ich es geschafft, ein Zufallsbild aus einem Ordner zu generieren:
Einrücken macht Deinen Code lesbarer.
while (false != ($file = readdir ($handleordner)))
{
if ($file != "." && $file != "..")
{
array_push($foto,"<img src = '../schokofroesche/$file' border = '0'>");
# foto[] = "<img src = '../schokofroesche/$file' border = '0'>";
# die einfache Anführungszeichen enthält.
# Bei der Syntax des img-Elementes hast Du übrigens auch
# noch einen Fehler drin: zuviele Leerzeichen.
}
}
[...]
Nur will PHP mir das ausgewählte Bild nicht in die Datenbank schreiben.
Ich habe folgendes eingegeben:
[code lang=php]
$aendern = "UPDATE rustleoaks Set
schokofrosch1='$foto[0]' WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
~~~sql
UPDATE rustleoaks Set schokofrosch1='<img src = '../schokofroesche/dateiname.des.bildes' border = '0'>' WHERE benutzername = ...
Damit in Deinem Statement das einfache Anführungszeichen richtig maskiert wird, musst Du - wie Du schon gelernt haben solltest - den Inhalt von $foto[0] ebenfalls mit mysql_real_escape_string() behandeln.
Du bringst den Inhalt dieser Variablen in einen SQL-Kontext. Diesen Wechsel hast Du nicht beachtet.
Freundliche Grüße
Vinzenz
Hi Vinzenz,
Du bringst den Inhalt dieser Variablen in einen SQL-Kontext. Diesen Wechsel hast Du nicht beachtet.
Ach, menno. Ist das normal, dass man als Anfänger immer so viele Fehler macht und ständig über die gleichen Dinge stolpert?
Jetzt habe ich mir schon so eine Art Leitfaden zusammengeschrieben, auf was ich dringend beim Schreiben achten muss und falle trotzdem wieder darauf herein.
Habe mir die letzten zwei Tage überlegt, ob ich überhaupt noch weiter machen soll. Ich glaube, ich lerne das nie (Frust, heul, grummel).
Warum willst Du statt des Pfades zur Datei gleich das ganze
img-Element abspeichern. Speichertest Du nur den Pfad, würde
Dir das Kontextproblem gar nicht auffallen.
Was genau meinst Du damit? Etwa so:
schokofrosch1='../schokofroesche/$file'
Wie müsste ich das dann wieder ausgeben? So:
echo '<img src=".htmlspecialchars($row->spaltenname).">'
Dann habe ich da noch ein eine andere Frage dazu.
Ich hatte mir ja überlegt, alle diese Bilder (jedes Set=7 Bilder, bis jetzt ungefähr 7 Sets und es werden noch mehr) in die Datenbank zu schreiben. Wäre es nicht besser, dass für jeden Benutzer, der an dieser Sammelkarten-Aktion teilnimmt in eine Datei zu packen? Jeder soll ja eine Übersicht über seine Karten haben. Dann müsste ich mit SELECT aus der Datenbank (bis jetzt) 49 Spalten ausgeben. Nicht zielführend, oder?
Was müsste ich dann für eine Datei nehmen? Normaler Text oder csv?
Liebe Grüße
Poison