Bilder ausgeben lassen

Alles, was PHP betrifft, kann hier besprochen werden.

Bilder ausgeben lassen

Postby Poison of the Cursed » 12. June 2010 14:31

Hallo an alle,

es ist mal wieder soweit, ich beiße gleich in die Tischkante.
Die letzte Woche habe ich damit zugebracht verschiedene Varianten für ein Memory zu testen.

a) Bilder aus Zufallsgenerator als Link und Variable mit GET übergeben
b) Bilder aus Zufallsgenerator als input-type mit POST
c) Bilder aus Zufallsgenerator in Formular mit Radiobuttons.

Bei der dritten Variante war ich nun "fast" erfolgreich. Das Script funktioniert, was die Auswahl, die Überprüfung der Bilder, ob man ein Pärchen gefunden hat, die Überprüfung der Versuche usw. betrifft.

Das einzige, was ich nicht schaffe, ist die zwei ausgwählten Bilder anzeigen zu lassen :x
Hier das Script:
Code: Select all
<?php
error_reporting(E_ALL);

include("../connect.php");

if(!$verbindung OR !mysql_select_db("homepage"))
{
$error = "Die Seite konnte leider nicht korrekt aufgebaut werden. Sollte dieser Fehler nochmals auftreten sende
mir bitte eine E-Mail:
<br>
<br><a href=\"mailto:mail@potionmaster.de\">mail@potionmaster.de</a>";
}
else
{

$abfrage = "SELECT DATE_FORMAT(datum2, '%d.%m.%Y') AS datum2, spiele.memory, spiele.frosch FROM spiele WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

$datum = date("d.m.Y");

if($row->datum2 < $datum)
{
$aendern = "UPDATE spiele Set memory=0 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);
}

if (empty($_POST["gesendet"]))
{
$output="";
}
else
{

 if($row->memory == 3 AND $row->datum2 == $datum)
 {
 $error ="Du hattest schon 3 Versuche und kannst erst Morgen wieder mitspielen.
 <br>
 <br><a href=\"schokofroesche.php\">Zurück</a>";
 }
 else if($row->frosch == 1 AND $row->datum2 == $datum)
 {
 $error ="Du hast heute schon gewonnen und kannst erst Morgen wieder mitspielen.
 <br>
 <br><a href=\"schokofroesche.php\">Zurück</a>";
 }
 else
 {
 
 
   $tstamp = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
   $datum = date("Y-m-d", $tstamp);

   $aendern = "UPDATE spiele Set memory=memory+1, datum2='" . mysql_real_escape_string($datum) . "'
   WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
   $update = mysql_query($aendern);
   
   
if($_POST["oben"] == $_POST["unten"])
{

$foto = array();
$ordner = "../schokofroesche1";
$handleordner=opendir ($ordner);
while (false != ($file = readdir ($handleordner)))
{
if ($file != "." && $file != "..")
{
array_push($foto,"$file");
}
}
closedir($handleordner);
shuffle($foto);
 
$output = '<img src="../schokofroesche1/'.htmlspecialchars($foto[0]).' " alt="">
<br>
<br>Glückwunsch, Du hast gewonnen und erhältst 1 Schokofrosch.';
 
$eintrag = "INSERT INTO schokofrosch (benutzername, klassik)
VALUES ('" . mysql_real_escape_string($_SESSION["username"]) . "', '" . mysql_real_escape_string($foto[0]) . "')";
$eintragen = mysql_query($eintrag);
 
$aendern = "UPDATE spiele Set frosch=1 WHERE benutzername='" . mysql_real_escape_string($_SESSION["username"]) . "'";
$update = mysql_query($aendern);

 }
 else
 {
 $error = "Es tut mir leid. Du hast leider nicht gewonnen.";
 }

mysql_close($verbindung);

// schließen der noch offenen else-Befehle
}
}
}
?>


<h1>Memory</h1>
<br>

<img src=".gif" alt="">
<br>
<p>Wähle aus den verdeckten Karten 2 aus. Jeweils eine aus der oberen und eine aus der unteren Reihe. Sind Deine Karten
identisch erhältst Du einen Schokofrosch. Aber wähle mit Bedacht, denn Du hast nur 3 Versuche, um ein Pärchen zu finden.

<br>
<br>

<form action="zeit.php" method="POST">
<?php

 $foto = array();
 $ordner = "../herrenhaus/memory";
 $handleordner=opendir ($ordner);
 while (false != ($file = readdir ($handleordner)))
 {
 if ($file != "." && $file != "..")
 {
 array_push($foto,"$file");
 }
 }
 closedir($handleordner);
 shuffle($foto);

echo '<img src="../herrenhaus/memory/'.htmlspecialchars($foto[0]).' " alt=""><input type="radio" name="oben" value=" '.htmlspecialchars($foto[0]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[1]).' " alt=""><input type="radio" name="oben" value=" '.htmlspecialchars($foto[1]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[2]).' " alt=""><input type="radio" name="oben" value=" '.htmlspecialchars($foto[2]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[3]).' " alt=""><input type="radio" name="oben" value=" '.htmlspecialchars($foto[3]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[4]).' " alt=""><input type="radio" name="oben" value=" '.htmlspecialchars($foto[4]).' "><br><br>';


 $foto = array();
 $ordner = "../herrenhaus/memory";
 $handleordner=opendir ($ordner);
 while (false != ($file = readdir ($handleordner)))
 {
 if ($file != "." && $file != "..")
 {
 array_push($foto,"$file");
 }
 }
 closedir($handleordner);
 shuffle($foto);

echo '<img src="../herrenhaus/memory/'.htmlspecialchars($foto[0]).' " alt=""><input type="radio" name="unten" value=" '.htmlspecialchars($foto[0]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[1]).' " alt=""><input type="radio" name="unten" value=" '.htmlspecialchars($foto[1]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[2]).' " alt=""><input type="radio" name="unten" value=" '.htmlspecialchars($foto[2]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[3]).' " alt=""><input type="radio" name="unten" value=" '.htmlspecialchars($foto[3]).' ">
<img src="../herrenhaus/memory/'.htmlspecialchars($foto[4]).' " alt=""><input type="radio" name="unten" value=" '.htmlspecialchars($foto[4]).' ">';
?>

<br>
<input type="submit" value="Raten">
<input type="hidden" name="gesendet" value="1">
</form></p>

<br>
<br>

// hier der Problem-Teil

<?php
echo '<img src="../herrenhaus/memory/'.htmlspecialchars($_POST["oben"]).' " alt=""><img src="../herrenhaus/memory/'.htmlspecialchars($_POST["unten"]).' " alt="">';
?>

// Ende Problem-Teil, alles andere klappt

<br>
<br>

<?php

if (!empty($error))
{
echo '<div class="error"><p>'.$error.'</p></div>';
}
else
{
echo $output;
}
?>


Ich habe schon geprüft, ob die zwei POST-Variablen leer sind. Sind sie nicht, wenn ich an der gleichen Stelle nur

Code: Select all
echo $_POST["oben"], $_POST["unten"];


schreibe, gibt er mir die Werte der zwei Bilder aus, also z.B. wesen01.gif und wesen04.gif.
Habe auch schon daran gedacht, es könnte an den Variablen selber liegen, wegen dem Unterstrich ($_POST). Darum habe ich die POST-Variablen nochmal zwischengespeichert. Allerdings wird mit "normalen" Variablen auch nichts angezeigt und es kommt in keinem Fall zu einer Fehlermeldung oder Warnung.
Über google habe ich zwar sehr viel zu Problemen zum Thema "input type img" gefunden, aber leider nichts zu meinem momentanen Problem. Sollte ich was überlesen haben, bitte sendet mir den Link dazu.

Grüße
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Bilder ausgeben lassen

Postby Nobbie » 12. June 2010 15:12

Was ist denn "zeit.php" für ein Script? Dieses hier, oder was?
Nobbie
 
Posts: 13171
Joined: 09. March 2008 13:04

Re: Bilder ausgeben lassen

Postby Poison of the Cursed » 12. June 2010 18:26

Hallo Nobbie,

sorry, habe ich vergessen dazu zu schreiben.
Die Datei zeit.php ist dasselbe Script oder die gleiche Seite, wie man das auch immer nennt. Leider hatte ich meine Schwierigkeiten mit den offiziellen Befehlen für den "Selbstaufruf" der aktuellen Datei. $_SERVER['PHP_SELF'] habe ich probiert und es hat nicht funktioniert. Habe aber auch gelesen, dass man jetzt aus Sicherheitsgründen $_SERVER['SCRIPT_NAME'] verwende sollte. Hab das leider noch nicht getestet und auf meinen Rechner hatte das mit der zeit.php funktioniert. Oder liegt es vielleicht daran?
Werde das nachher gleich mal probieren.

Noch einen schönen Abend.

Gruß
Poison
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56

Re: Bilder ausgeben lassen

Postby Altrea » 13. June 2010 00:13

Da es sich im images handelt, wäre die erste Maßnahme den Seitequelltext nach dem Aufruf über den Browser anzeigen zu lassen und zu überprüfen, ob die image-urls korrekt generiert werden und die Images auch in dem Ordner stecken wo sie gesucht werden (Beim Seitenquelltext im Firefox kann man die URLs direkt anklicken, beim IE weiß ich es nicht genau).
We don't provide any support via personal channels like PM, email, Skype, TeamViewer!

It's like porn for programmers 8)
User avatar
Altrea
AF Moderator
 
Posts: 11926
Joined: 17. August 2009 13:05
XAMPP version: several
Operating System: Windows 11 Pro x64

Re: Bilder ausgeben lassen

Postby Nobbie » 13. June 2010 11:27

Poison of the Cursed wrote:Oder liegt es vielleicht daran?


Nö, wenn es der Name des o.g. Script ist, ist das nicht die Ursache. Aber hätte ja sein können, dass zeit.php ein ganz anderes Script ist, das weiß ich ja nicht.

Ansonste mache mal das, was Altrea Dir genannt hat, überprüfe mal den generierten Quelltext, ob das gültige URLs zu Bildern ergibt. Außerdem fällt ja auf, dass Du keine URLs angibst, sondern relative Pfadnamen, vielleicht ist der Kontext an der Stelle aber schon falsch. Generiere mal vollständige URLs und nicht nur die Pfade.

P.S.: Der Wert "../herrenhaus/memory" sieht sowieso verdächtig falsch aus, liegt herrenhaus auch noch unterhalb vom htdocs-Verzeichnis oder daneben? Es muss ja unterhalb von htdocs liegen. Sowieso ist ".." in einer URL pottenhäßlich. Mit einiger Sicherheit (behaupte ich mal), ist das der Fehler: das Verzeichnis herrenhaus ist via HTTP überhaupt nicht erreichbar.
Nobbie
 
Posts: 13171
Joined: 09. March 2008 13:04

Re: Bilder ausgeben lassen

Postby Poison of the Cursed » 13. June 2010 20:20

Hallo ihr Beiden,

vielen, lieben Dank für eure Rückmeldung und den Tipp mit dem Quellcode. Ich habe den Fehler jetzt gefunden.

Quellcode der Problemzeile:

Code: Select all
<img src="../herrenhaus/memory/ dame.jpg  " alt=""><img src="../herrenhaus/memory/ myrte.jpg  " alt="">


Wegen dem Leezeichen vor 'dame.jpg' und 'myrte.jpg' (im Script keine Leerzeichen bei den POST-Variablen, also hat sich das wohl beim Absenden des Formulars eingeschlichen) werden die beiden Bilder nicht angezeigt. Ich habe das Problem nun mit der Eingabe von "trim()" gelöst.

Code: Select all
echo '<img src="../schokofroesche2/'.htmlspecialchars(trim($_POST["oben"])).' " alt=""><img src="../schokofroesche2/'.htmlspecialchars(trim($_POST["unten"])).' " alt="">';


Jetzt funktioniert alles. Nochmal vielen Dank. Ihr seid wirklich spitze.

Gruß
Poison

@Nobbie
Ich hatte vor, wenn das Ding endlich mal online ist (bis jetzt spiele ich immer noch nur auf dem XAMPP-Server rum) die ganzen Links auf die vollständigen URL's umzustellen. Da meine Ordnerstruktur noch nicht ganz so steht, wie sie später online sein soll, verwende ich momentan nur die Pfade. Habe auch ein sichereres Gefühl, wenn nachher alles auf "HTTP://www. ... " eingestellt ist. Danke für den Hinweis.
Poison of the Cursed
 
Posts: 31
Joined: 27. April 2010 17:56


Return to PHP

Who is online

Users browsing this forum: No registered users and 16 guests