WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik


Homepage und Webhosting-Forum

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.


Forum » PHP & MySQL » Echo-Problem bei Counterscript (Anfängerproblem) » Antworten
Benutzername:
Passwort: Passwort vergessen?
Inhalt der Nachricht: Fett | Kursiv | Unterstrichen | Link | Bild | Smiley | Zitat | Zentriert | Quellcode| Kleiner Text
Optionen: Emailbenachrichtigung bei Antworten
 

Die letzten 5 Postings in diesem Thema » Alle anzeigen
von steve77do
Hallo ihr zwei,

super, danke, es hat geklappt

http://steve77do.st.funpic.de/counter_grafisch_switch.php

Auf die Lösung wäre ich von alleine nicht gekommen, auch wenn es mir jetzt natürlich einleuchtet: Tritt Fall 0 ein, gebe img... aus, daher die Bilder vor dem Quellcode und die fehlende Übergabe an den eigentlichen Counter...

Danke
von subjective
In der switch gibt du ja auch mit echo direkt die <img>-Tags aus. Du mußt sie in eine Variable schreiben:

1:
case "0" : $counter_str .= "<img src=\"img/0.gif\">"; break;


Der Operator .= hängt dabei die rechte String-Konstante an die linke String-Variable an. Vor der Schleife mußt du noch $counter_str = '' machen um die Variable als leeren String zu initialisieren.

Die Variable gibst du dann mit echo $counter_str aus.

Tipps:
Beachte bitte das einzelne Variablen nicht in Anführungszeichen kommen. Diese sind nur bei String-Konstanten notwendig. Wenn du einfache Anführungszeichen verwendest, sparst du dir das Absichern der doppelten Anführungszeichen mit dem Backslash. Innerhalb von ' werden jedoch keine Variablen und Sonderzeichencodes (wie z.B. \n) interpretiert.
von languitar
Ist doch klar, die Images werden schon beim Abarbeiten der For-Schleife ausgegeben.
Speicher den Tag für die Images in der Schleife einfach in einer neuen Variable, meinetwegen $counterimage und denk dabei daran, dass die Variable imemr ergänzt werden muss, also .=
Dort wo jetzt echo $counter steht gibt er momentan natürlich nur den Zahlenwert aus ohne Grafiken, da die Grafiken ja gar nicht mit der Variable $counter in Beziehung stehen. Mach dirt dann einfach echo $counterimage.
von steve77do
Hallo Leute,

ich bin gerade dabei, PHP zu lernen, bin also noch "Frischling". Eine Übung in meinem Lehrbuch ist die Erstellung eines Besuchercounters, bei dem die Zahlenwerte durch Grafiken ausgetauscht werden sollen.

Es gibt 2 Lösungsansätze, einen, der vom Quellcode her recht vereinfacht ist (über strlen die Anzahl der Counterzeichen auslesen, anschließend in einer for-Schleife über substr die Einzelziffern auslesen, die Ergebnisse einer Variable übergeben, die wiederum Bestandteil eines img-Tags in HTML ist, d.h. aus dem ausgelesenen "1" wird "1.gif", usw) und als zweiten noch den umständlicheren Weg über switch, bei dem jede Zahl des Counters durch eine Grafik ersetzt wird.

Mit Variante 1 hatte ich kein Problem, sie wird korrekt dargestellt (inkl. Cookieabfrage), in der Switch-Variante ist jedoch irgendwo ein Bug, den ich partout nicht finde.

Hier die funktionierende Version 1 (vereinfacht):
Version 1 -> so soll es später quellcodetechnisch ausgegeben werden

und hier die Bugvariante mit switch:
Bug-Version 2 -> ein Blick in den Quellcode zeigt, daß die Grafiken für den Counter zwar ausgegeben werden, aber fälschlicherweise vor dem html-Quellcode. In der eigentlichen Ausgabezeile wiederum erscheint weiterhin nur der Text-Counter. Was mache ich falsch? Ich hab doch im PHP-Teil gar kein echo definiert, erst später im HTML-Teil!?

Hier mein Quellcode (ich hoffe mal, es wird alles korrekt dargestellt...):
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46:
<?php
$datei_name = "counter.txt";
if (!file_exists("$datei_name"))
	{
		$dz = fopen("$datei_name","w");
		fwrite($dz, "0");
		fclose($dz);
	}
$dz = fopen($datei_name, "r");
$counter = fread($dz,10);
fclose($dz);
$counter++;
$dz = fopen($datei_name, "w");
fwrite($dz, $counter);
fclose($dz);
?>
<?php
$anzahl = strlen($counter);
for ($pos = 0; $pos < $anzahl; $pos++)
{
	$ziffer = substr($counter, $pos, 1);
	switch ($ziffer)
	{
	case "0" : echo "<img src=\"img/0.gif\">"; break;
	case "1" : echo "<img src=\"img/1.gif\">"; break;
	case "2" : echo "<img src=\"img/2.gif\">"; break;
	case "3" : echo "<img src=\"img/3.gif\">"; break;
	case "4" : echo "<img src=\"img/4.gif\">"; break;
	case "5" : echo "<img src=\"img/5.gif\">"; break;
	case "6" : echo "<img src=\"img/6.gif\">"; break;
	case "7" : echo "<img src=\"img/7.gif\">"; break;
	case "8" : echo "<img src=\"img/8.gif\">"; break;
	case "9" : echo "<img src=\"img/9.gif\">"; break;
	}
}
?>
<html>
<head>
<title>Counter</title>
</head>
<body>
Dies ist der <?php echo "$counter";?>. Besuch.
</body>
</html>


Wie gesagt, das Script ist etwas umständlich, aber ich will es halt zu Übungszwecken mit switch aufbauen. Theoretisch hätte ich auch die 2 PHP-Blöcke oben zu einem zusammenfassen können und hier und da vereinfachen können, aber der Übersichtlichkeit halber lasse ich es mal in der langen Version. Nur wo ist der Bug?

Danke für die Hilfe

Stefan

Nach oben