Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Matt

Foren Gott

Dabei seit: 17.09.2002

Beiträge: 5 573

 

1 Zum Seitenanfang

Montag, 26. Juli 2004, 15:18

PHP Tutorials - Von Usern gemacht, für User gedacht

Wenn Fragen zu den Tutorials aufkommen, bitte PM an den entsprechenden Autor.
Wer sein Tutorial hier stehen haben will, soll bitte eine PM an mich schicken.
nyuuu

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Matt« (26. Juli 2004, 18:06)

 

Matt

Foren Gott

Dabei seit: 17.09.2002

Beiträge: 5 573

 

2 Zum Seitenanfang

Montag, 26. Juli 2004, 15:21

von Fab und treo


Hi zusammen!

Wir haben uns entschlossen auch mal ein Tutorial zu schreiben.

Habt ihr euch manchmal gewundert, warum ein Script von euch nicht funktionierte, obwohl es völlig korrekt auszusehen schien?
Dann könnte das vielleicht daran liegen, dass ihr nichts escapt habt.

Dann ist das genau das richtig, was ihr jetzt braucht!


Thema: Escapen in PHP

Index:
1. Was ist escapen? Was habe ich davon?
2. Wie escapt man? (Theorie)
3. Anwendungsbeispiele (Praxis)
4. Was passieren kann, wenn man nicht escapt?



1. Was ist escapen? Was habe ich davon?


Es gibt 3 Arten von Escapen, wobei die dritte Art nicht wirklich eine Art des Escapens ist.

Escapen von Variablen:
Diese Art des Escapens, zählt offiziell nicht zum Escapen.
Sie wird hier jedoch auch mit aufgeführt weil sie bei nicht Escapern häufig auch nicht angewendet wird,
was dann viele Probleme mit sich nachziehen kann.

Escapen von Anführungszeichen ( ' und " ):
Fast immer wenn man einen String in PHP eingibt dann ist er in Anführungszeichen gesetzt.
Hat man gleiche Anfürungszeichen in einem String dann denkt sich der Parser das der String damit beendet ist
und wundert sich, dass da immer noch "merkwürdige" Sachen folgen, bei denen er denkt, dass sie nicht mehr zum String gehören. Daher muss man Anführungszeichen in PHP Escapen.

Escapen von Buchstaben und anderen Zeichen:
Du kennst sicher schon das "\n" was dafür sorgt, dass PHP eine neue Zeile anfängt,
so gibt es auch viele andere Zeichen die escaped werden können, damit sie eine besondere Aufgabe erfüllen. Wir werden aber in diesem Tutorial nur die Theorie erklären.


2. Wie escapt man? (Theorie)


Escapen von Variablen:
Wenn man will, dass eine Variable in einem String auch wirklich ersetzt wird, gibt es 2 Möglichkeiten, dies zu machen.
Die erste wäre das man sie innerhalb von doppelten Anführungszeichen ( " ) schreibt, dies ist jedoch eine schlechte Variante, weil man nicht sofort erkennen kann, dass eine Variable eingefügt wird und man kann sehr schlecht Arrays verwenden.
Daher ist es ratsam, die Variabel zu "escapen" ( Wie bereits oben gesagt, handelt es sich hier nicht wirklich um ein echtes Escapen).
Dies macht man so:
Hat der String mit doppelten Anfürungszeichen begonnen, so beendet man ihn auch damit und setzt einen Punkt ( . ) danach, dann den Variablennamen und nochmals einen Punkt, dann fängt man den String auch wieder mit einem doppelten Anfrührungszeichen an.
Das Gleiche kann man auch mit einzelnen Anführungszeichen machen.
Zum besseren Verständniss hier ein Beispiel Code:

PHP-Quelltext

1
2
3
4
<?php
    $wetter "schoenes";
    $string   "Heute ist ".$wetter." Wetter!";
?>


Bei der Verwendung von diesem Verfahren ist es egal ob man doppelte oder einzelne Anführungszeichen benutzt.


Escapen von Anführungszeichen:
Wenn man einen String hat und in ihm z. B. HTML Code haben will, dann muss man vielleicht auftretende Anführungszeichen escapen. Je nachdem wie man es macht, muss man es machen oder auch nicht.
Hat man einen Validen XHMTL 1.0 Tag, dann kann man durch die Benutzung von einzelnen Anführungszeichen sich den Aufwand des Escapen sparen.
Hier ein Beispiel für so eine Art der Benutzung:

PHP-Quelltext

1
2
3
<?php
    $html_code '<a href="http://www.inside-php.de">Inside-PHP.de</a>';
?>


Hat man jedoch im String selber ein einzelnes Anführungszeichen, so muss dieses escapt werden:

PHP-Quelltext

1
2
3
<?php
   $html_code '<a href="http://www.inside-php.de">treo\'s Seite</a>';
?>


Hier haben wir das erste Aufkommen eines echten Escapens. Denn erst in diesem Beispiel haben wir das Escapezeichen \ ( Backslash ).
Kommt man nicht drumherum, in einem String, der mit doppelten Anfühtungszeichen gemacht wurde, auch wieder solche zu verwenden, dann müssen diese auch escapt werden.
Dies funktioniert genauso wie mit einzelnen Anführungszeichen:

PHP-Quelltext

1
2
3
<?php
   $html_code "<a href=\"http://www.inside-php.de\">treo's Seite</a>";
?>


Was man jedoch hier sieht ist, dass man das einzelne Anführungszeichen nicht escapen braucht.

Escapen von Buchstaben und anderen Zeichen
Beim Escapen von Buchstaben und anderen Zeichen wird eine spezielle Funktion dadurch aufgerufen
So sorgt z.B. ein \n für eine neue Zeile (Unix), und ein \t erzeugt einen Tab.
Dies stellt uns jedoch vor das Problem das wir haben wenn wir einfach nur ein Backslash ausgeben wollen.
Dies lässt sich dadurch erreichen, dass man das Escapezeichen escapt.

PHP-Quelltext

1
2
3
<?php
    $html_code "<a href=\"http://www.inside-php.de\">\\treo's Seite/</a>";
?>

In diesem Beispiel würde nun ein Link erzeugt der so aussieht: \treo's Seite/
Dieses Escapen funktioniert nur in doppelten Anführungszeichen!


3. Anwendungsbeispiel (Praxis)


Beim Variabel-Escapen:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    // Wir schreiben einen MySQL Query, der eine News mit der id 12 holen soll
    $id 12;
    
    $sql "SELECT
                *
            FROM
                news
            WHERE
                id = '".$id."';"/* Hier muessen wir escapen,                                                 da sonst die Variabel nicht ausgeführt würde! */
    $result mysql_query($sql) OR die(mysql_error()); // Query schicken
    // hier gehts dann weiter mit dem auslesen
?>


Das ganze mit einzelnen Anführungszeichen ist ein bisschen aufwändiger:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    // Wir schreiben einen MySQL Query, der eine News mit der id 12 holen soll
    $id 12;
    
    $sql 'SELECT
                *
            FROM
                news
            WHERE
                id = \''.$id.'\';'/* Hier muessen wir escapen,
                                    da sonst die Variabel nicht ausgeführt würde! */
                                    
        $result mysql_query($sql) OR die(mysql_error()); // Query schicken
        // hier gehts dann weiter mit dem auslesen
?>


Beim Anführungszeichen-Escapen:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    // Wir machen ein Script, das Banner aus einem Array per Zufall ausgibt
    $banner = array();
    $banner[0] = "<a href=\"http://sk8ing.gu2.info/Xenon%20Scripts/index.php\" target=\"_blank\"> // Hier escapen wir und zwar alles
                   <img style=\"border: 0px;\" src=\"xenon.jpg\" alt=\"Fab's Seite\" />
                  </a>";
    $banner[1] = "<a href=\"http://www.homepage.de\" target=\"_blank\">
                   <img style=\"border: 0px;\" src=\"http://www.homepage.ch\" alt=\"homepage\" />
                  </a>";
                  
    srand(microtime()*1000000); // besserer Zufall
    $zahl rand(0,1); // Zufall generieren
    
    echo $banner[$zahl]; // Banner ausgeben
    
?>


Wir haben jetzt in dem Beispiel gerade einen Extrem-Fall genommen,
dass geht mit den ' natürlich viel einfacher, da man ja dann die " nicht escapen muss / darf!




4. Was passieren kann, wenn man nicht escapt?


Wenn ihr euch das jetzt anschaut, dann bitte, macht das nicht nach!
Das ist stylistisch vollkommen falsch und wird nicht auch überhaupt funktionieren!!!


Beim Variabel-Escapen:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    // Wir schreiben einen MySQL Query, der eine News mit der id 12 holen soll
    $id 12;
    
    $sql 'SELECT
                *
            FROM
                news
            WHERE
                id = "$id";'// Hier liegt der Fehler
    $result mysql_query($sql) OR die(mysql_error()); // Query schicken
    // hier gehts dann weiter mit dem auslesen
?>


Hier wurden die Anführungszeichen zwar escapt, aber die Variable nicht.
PHP schickt dann an MySQL folgende Anweisung:
SELECT * FROM news WHERE id = $id
Da es keine id gibt, die $id heisst, funktioniert die Query auch nicht!

noch ein Beispiel:

PHP-Quelltext

1
2
3
4
<?php
    $wetter 'schoenes';
    $string   'Heute ist $wetter Wetter!';
?>


Ausgabe: Heute ist $wetter Wetter
Die Variable wird nicht ausgewertet!

Beim String-Escapen:

PHP-Quelltext

1
2
3
4
5
<?php
    $banner[0] = "<a href="http://sk8ing.gu2.info/Xenon%20Scripts/index.php" target="_blank"> 
                   <img style="border: 0px;" src="xenon.jpg" alt="besucht die Seite! :D" />
                  </a>";
?>


Das ergäbe ein Feuerwerk von Parse Errors, Folge ist, dass das Script nicht weiter ausgeführt wird.

Noch ein Beispiel:

PHP-Quelltext

1
2
3
<?php
    $string '<img src=\"bild1.jpg\" alt=\"Sommerferien\" />';
?>


Richtig, das ist völliger Schwachsinn, ihr wisst, was wir meinen. :)


Wir hoffem, dass euch das Tutorial weitergebracht hat.
Jetzt wünschen wir euch viel Spass beim Proggen und denkt daran:
Leute, escapt!


Mfg Fab & treo & Matt


Autoren: Fab & treo
Lektor: Matt
BB-Code von: Fab
Copyright by: Xenon Scripts & inside-PHP.de
nyuuu

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Matt« (26. Juli 2004, 15:22)

 

Matt

Foren Gott

Dabei seit: 17.09.2002

Beiträge: 5 573

 

3 Zum Seitenanfang

Mittwoch, 20. Oktober 2004, 15:53

von Shurakai:

Fehlereingrenzung, Namensgebung, Strukturierter Code - wie verstehe ich meinen Code richtig?

Moin,

da es ja immer wieder Leute hier gibt die grade anfangen mit PHP zu arbeiten, stelle ich hier einfach mal nen paar Tips und Tricks zusammen, was es beim programmieren so zu beachten gibt.
Das wichtigste ist sicherlich die Übersicht! Deshalb gilt:

Code einrücken

Falsch

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if(bedingung1 == bedingung2){
if(bedingung3 == bedingung4){
if{bedingung5 == bedingung6){
for($i 0$i 10$i++){
echo $i;
}
else{
echo "bla";
}
}
}
}

Merkt man schon was? Unübersichtlichkeit pur.

Besser:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if(bedingung1 == bedingung2){
  if(bedingung3 == bedingung4){
    if{bedingung5 == bedingung6){
      for($i 0$i 10$i++){
         echo $i;
      }
    }
    else{
      echo "bla";
    }
  }
}


Wie stark eingerückt wird, ist eigentlich jedem selber überlassen. Ich würde aber definitiv nicht zuweit einrücken.. also einfach mal ausprobieren :)

Wer übrigens ein Problem mit den If-Anweisungen hat, also z.B. nur 1 = bei einem Vergleich macht anstatt ==, der kann folgendes machen.

PHP-Quelltext

1
2
3
if("bla" == $variable){
//code
}


Damit verhindert man, dass man einfach nur einer Variablen einen Wert zuweist, weil beim ganz oben zusehenden Code ein Fehler ausgegeben wird, wenn man "=" anstatt von "==" schreibt.
Diese Syntax wird sehr selten benutzt, jedoch sehr empfehlenswert für die die ein Problem mit den = haben ;)
Ich persl. benutze sie nicht.

(Tipp by Gimli)

Wer die geschweiften Klammern lieber unter der Anweisung hat, kann dies auch machen.

PHP-Quelltext

1
2
3
4
if(bedingung1 == bedingung2)
{
// blabla
}


Wer garkeine geschweiften Klammern mag schaut sich bitte die Alternative Syntax bei Kontrollstrukturen an.

Kommentare

Weiterhin sind Kommentare öfters angebracht. Stellt euch vor, ihr schreibt einen Code und müsst ein halbes Jahr später exakt diesen Code überarbeiten - ihr müßt euch in eurem eigenen Code erst wieder zurechtfinden.

Wofür ist dieser Block zuständig? Wo fängt das und das an?

Mit Kommentaren braucht ihr nicht den PHP-Code durchlesen, sondern schaut auf die Kommentare.

Kommentare werden auch im Handbuch gut erklärt.

Ich persl. bevorzuge:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// do xyz

oder

/** do xyz **/

oder

/**
 * @desc: function queries database for xyz
 * @param [...]
 **/
 
 function getUsername() [...]


Beim letzten wird die folgende Funktion erklärt: Was für Parameter (Attribute) werden übergeben? Welche Typen haben diese Parameter? Int, String, Resource, Boolean? Oder mal dies mal das?

Auch beachten: getUsername - der Anfang wird normalerweise klein geschrieben, der Anfangsbuchstabe des darauffolgenden "Wortes" groß.

Namen gut wählen

Wählt eure Namen gut. Eine 4.php oder abc.php sagt nichts darüber aus, was sie macht, wofür sie zuständig ist.
Namen wie z.B. makeentry.php hingehen lassen direkt darauf schließen wofür sie gut sind - wohl um irgendeinen Eintrag zu machen.

Soll eine Datei includiert werden, wird meist ein .inc angehängt, also wird aus "config.php" ein "config.inc.php".
Bitte achtet daraud, das .inc nicht hinten anzuhängen! Der Server erkennt die Datei sonst nicht als PHP-Datei und wird sie zum Download anbieten.

Auch bei Variablen sollten die Namen gut gewählt sein.
$a, $b, $4 oder $567 bringen nichts.
Namen wie $allow_login o.Ä. sind schon wesentlich aussagekräftiger.

Wer aber die perfekte Übersicht und den beste Aufschluss auf die Inhalte von Variablen haben will, der hängt vor die Variable noch den Typen der Variable an.

Zum Beispiel wird aus $allow_login ein $bool_allow_login, was darauf schließen lässt, dass die Variable einen boolischen Wert beinhaltet (true / false).

$int_userid wäre dann sicherlich die UserID als Zahl, während $str_username der Username in Stringform ist. res wäre z.B. für resource und var (variable) für wechselnde Datentypen.

Ist zwar etwas Arbeit, aber man gewöhnt sich daran - und es hat Vorteile ;)

(Soetwas ähnliches kann man auch gut bei Datenbanken machen... wer eine Tabelle erstellt, hängt vor jede Spalte ein Kürzel.
Tabelle User mit Spalten userid, username und password würde zu
Tabelle User mit Spalten usr_userid, usr_username und usr_password.

So weiß man auch in Joins o.Ä. immer genau aus welcher Tabelle die Spalten sind, und man hat das Problem mit Doppelnamen nicht mehr ;)
Zwar mehr Arbeit, aber ich finde dass es sich lohnt.)


Eine knifflige Situation ist natürlich auch die
Fehlereingrenzung

Wieso läuft das Script nicht? usw.

Deshalb:
1.) Testen ob Variablen gesetzt sind. Auch mal ausgeben welchen Wert diese Variablen haben (echo).
2.) Welchen Typ haben diese Variablen? gettype() benutzen.
3.) Problem bei Datenbankabfrage? echo mysql_error(); nach mysql_query() wirkt häufig wunder. Die Fehlermeldung durchlesen und erstmal selber nachdenken! Ist meistens recht einfach.
4.) mit echo testen bis wohin das Script überhaupt läuft; werden schleifen / bedingungen durchlaufen? Auch das kann mit echo einfach getestet werden!

5.) Wenn alles nichts hilft, einfach in einem Forum suchen und nach erfolgloser Suche posten. Aber dort natürlich die Regeln beachten und vorallem Nettiquette: Aussagekräftigen Titel, kurz und sachlich das Problem beschreiben, alles unnötige weglassen, einen kurzen, aber treffenden Auszug aus dem Quellcode (das wo ihr vermutet / wisst wo der Fehler ist... sollten die User mehr Code brauchen, sagen sie das meistens. Aber lieber etwas zu viel als zuwenig!) und als wichtigstes die FEHLERMELDUNG!!!!
Sollte es eine solche nicht geben auf jedenfall sagen dass keine Fehlermeldung mit ausgegeben wurde.




So, mir fällt gerade nichts mehr ein was sonst noch erwähnenswert wäre... Ich erweitere aber diese Liste gerne ;)
Die Code Beispiele sind alle (schlecht) ausgedacht und nicht lauffähig :P

Hoffe dass es n paar Leuten vielleicht was nützt. Würde mich über Feedback (am besten per PM o.Ä.) freuen.

cu,
Shurakai

Ergänzung von Skittles

tipp by skittles:

Wenn das script nicht läuft, einfach mal die fehlerausgabe ändern. das sieht so aus:

PHP-Quelltext

1
2
3
4
<?php
error_reporting(E_ALL);
//Restliches Script
?>


Da werden einem deutlich mehr warnings und co ausgegeben, was einem oft weiterhilft

Wenn man einen ähnlichen Code öfters hintereinander hat, dann lohnt es sich auch, die einzelnen Teile auf eine Ebene zu bringen:

Siehe:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
<?php
switch($_GET['page'])
{
  case "gb":         include("gb.php");          $title="Gästebuch";       break;
  case "termine":    include("termine.php");     $title="Termine";         break;
  case "kontakt":    include("kontform.php");    $title="Kontakt";         break;
  case "ziele":      include("ziele.php");       $title="Ziele";           break;
  case "protokoll":  include("protokoll.php");   $title="Protokolle";      break;
  case "links":      include("links.php");       $title="Links";           break;
  default:           include("news.php");        $title="Newsansicht";     break;
}
?>


Ergänzung von Alex-K

Zitat

Original von Shurakai
Code einrücken

Falsch

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if(bedingung1 == bedingung2){
if(bedingung3 == bedingung4){
if{bedingung5 == bedingung6){
for($i 0$i 10$i++){
echo $i;
}
else{
echo "bla";
}
}
}
}

Merkt man schon was? Unübersichtlichkeit pur.

Besser:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
if(bedingung1 == bedingung2){
  if(bedingung3 == bedingung4){
    if{bedingung5 == bedingung6){
      for($i 0$i 10$i++){
         echo $i;
      }
    }
    else{
      echo "bla";
    }
  }
}


Du programmierst also im Kernigham&Richie (C) - Style. Ich persönlich mag den ANSI-C-Standard lieber:

PHP-Quelltext

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
if(bedingung1 == bedingung2)
{

   if(bedingung3 == bedingung4)
   {
   
      if{bedingung5 == bedingung6)
      {
      
         for($i 0$i 10$i++)
         {
         
            echo $i;

         }

      }
    
      else
      {
      
         echo "bla";
    
      }
   
   }

}


Die Programmierer sind sich da nicht einig und oft gibt es bei Übernahmen von Projekten Uneinigkeiten. Gottseidank gibts gute Tools :)
Alex-K liebt Vim 6.3
nyuuu
 

Matt

Foren Gott

Dabei seit: 17.09.2002

Beiträge: 5 573

 

4 Zum Seitenanfang

Mittwoch, 20. Oktober 2004, 16:48

von Skittles:

Viele von euch benutzen Gästebuch-, Newsscripts oder ähnliches. Und was ist heutzutage noch ein ordentliches Script ohne Smilies und HTML-Ersatz-Codes (BBCode, vBCode oder wie man es auch nennen mag). Bestes Beispiel ist das Forum hier, da es das hier ja auch gibt ;)

Umsetzung BB-Code

Wie setze ich sowas nun um? Diese Ersatzcodes sollen ja in HTML-Befehle umgewandelt werden. Also muss der entsprechende Code durch den HTML-Code ersetz werden. Eine PHP-Funktion zum ersetzen von Code ist str_replace.

Da hätten wir:

PHP-Quelltext

1
2
3
4
5
<?php
$text="Dieser [b]test[/b] soll fett werden"//Das ist unser Ausgangstext
$text=str_replace("[b]","<b>",$text); //Damit ersetzen wir [b] durch <b>
$text=str_replace("[/b]","</b>",$text); //s.o.
?>


Nun haben wir aber folgendes Problem:

Wir haben einen gemeinen User, der folgendes schreibt:

Quellcode

1
Der [b]Text wird fett


Problem: Es wurde kein [/b] verwendet und der ganze folgende Text wird fett und vielleicht noch der darauffolgende und so weiter.

Daher kann man das ganze intelligenter Lösen und zwar mit Regex. Regex bedeutet regular expressions (reguläre Ausdrücke) und damit kann man solche Sachen gezielt ersetzen. Siehe preg_replace

Für solche Regexe braucht man ein Muster, das sieht in unserem Fall so aus:

Quellcode

1
"|\[b\](.*)\[/b\]|Uism"


Vielleicht macht ja irgendwie mal nen Regextutorial, wo das genauer erklärt wird, ich spar mir das.

Jetzt benutzen wir die Funktion preg_replace:

PHP-Quelltext

1
2
3
4
<?php
$text="Dieser [b]test[/b] soll fett werden"//Das ist wieder unser Ausgangstext
$text=preg_replace("|\[b\](.*)\[/b\]|Uism","<b>$1</b>",$text);
?>


Und siehe da, der Text wird fett und wenn jetzt irgendjemand den [b ]-Tag nicht schließt, passiert auch nichts.

Das lässt sich natürlich auf alle anderen HTML-Codes übertragen.

Umsetzung von Smilies

Hier ist es nun ganz einfach: Es können keine Tags offen gelassen werden, also können wir hier str_replace benutzen. Das sieht dann so aus:

PHP-Quelltext

1
2
3
4
<?php
$text=":) das ist ein Smilie"//Das ist wieder unser Ausgangstext
$text=str_replace(":)","<img src=\"smile.gif\" alt=\"Fröhlich\" />",$text);
?>

(XHTML konform)

So kann man das dann auch mit viel mehr Smilies machen und fertig ist der Lack.

Vielen dank für die Aufmerksamkeit.
nyuuu
 

Matt

Foren Gott

Dabei seit: 17.09.2002

Beiträge: 5 573

 

5 Zum Seitenanfang

Donnerstag, 21. Oktober 2004, 14:00

von thebone:

Gästebuch basierend auf TXT Dateien.
================================

1. Schritt: Erstelle 3 leere Dateien:
eintrag.html
index.php
gbook.txt

Der Code für 'eintrag.html':

Quellcode

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
<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<div align="center">
<form name="eintrag" action="index.php" method="post">
<div align="center">
<table border="0" cellpadding="0" cellspacing="6" width="191">
<tr>
<td><font face="Arial" size="2">Name:</font></td>
<td><input type="text" name="name" size="15"></td>
</tr>
<tr>
<td><font face="Arial" size="2">Email:</font></td>
<td><input type="text" name="email" size="15"></td>
</tr>
<tr>
<td valign="top"><font face="Arial" size="2">Text:</font></td>
<td><textarea name="text" cols="35" rows="6"></textarea></td>
</tr>
<tr>
<td><input type="reset" value="Reset"></td>
<td>
<div align="right">
<input type="submit" name="submit" value="SENDEN"></div>
</td>
</tr>
</table>
</div>
</form>
<A href="index.php"><font face="Arial" size="2">
Zurück zum Gästebuch</font></A></div>
</body>
</html>

Der <form>-tag wird für den Versand benötigt!
Ganz WICHTIG ist hier die Name-Zuweisung
Jedes Eingabe-Feld muss einen Namen erhalten!

==
3. Schritt: 'index.php' wird programmiert:

Quellcode

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<html>
<head>
<title>Gästebuch tutorial by thebone</title>
</head>
<body>
<div align="center">
<a href="eintrag.html" target="_self">Neuer Eintrag</a><br>
<br>
<?php

// hier holen wir die mit <form> gesendeten Daten
$name = $HTTP_POST_VARS['name'];
$email = $HTTP_POST_VARS['email'];
$text = $HTTP_POST_VARS['text'];

// wurde auf den submit-button gedrückt?
if($submit)

{
// hier wird geprüft ob email, name & text ordnungsgemäß ausgefüllt sind.
if(($email == "") || ($name == "") || ($text == ""))
echo "<b>Fehlgeschlagen! Bitte alle Felder ausfüllen!</b>";

// wenn alle Felder ausgefüllt sind, gehts hier weiter...
else
{

// Variable X wird auf null gesetzt
$x = 0;

$dateiname = "gbook.txt";

// hier wird die Datei 'gbook.txt' geöffnet um 
// die 'vorhandenen' Einträge zu lesen.
// 'R' bedeutet READ
$datei = fopen($dateiname, "r");

// mit 'WHILE (!feof($datei))' wird die Datei Zeile für Zeile 
// ausgelesen und in die Variable '$saved[x]' gespeichert!
// Das wird gebraucht um die neuesten Einträge OBEN anzuzeigen!
while (!feof($datei)) {
$x++;
$saved[$x] = fgets($datei, 1024);

}
// Datum und Uhrzeit ermitteln
$datum = date("d.m.Y");
$zeit = date("H:i");

// Hier wird in die Datei 'gbook.txt' geschrieben. 
// 'W' bedeutet WRITE
$datei=fopen("gbook.txt", "w");

// Strip_tags entfernt HTML- & PHP-Tags aus der Nachricht
$text=strip_tags($text);

// Hier wird der neue Eintrag in die Datei geschrieben
fwrite($datei,"<table border=0 width=500 bgcolor=000000 cellspacing=1 cellpadding=3><tr><td bgcolor=ffffff><a href=\"mailto:$email\"><b>$name</b></a> schrieb am $datum um $zeit Uhr</td></tr><tr><td bgcolor=white>$text</font></td></tr></table>\n");

// ...und danach die vorher ausgelesenen Zeilen hinten dran schreiben..
for ($i=1;$i <= $x; $i++) {
fwrite($datei, "$saved[$i]");
}
// Datei schliessen
fclose($datei);
}
}


// die Einträge auslesen & anzeigen

$dateiname = "gbook.txt";
$datei = fopen($dateiname, "r");
fpassthru($datei);
?>
</div>
</body>
</html>


==
4. Schritt: Alle 3 Dateien in einen Ordner auf'n Server hochladen!
5. Schritt: Datei 'gbook.txt' auf '777' chmoden!
Somit hast Du jetzt ein einfaches Gästebuch erstellt!

Natürlich kann man dieses GB noch sehr viel verbessern & erweitern,...
Einfach probieren und nicht aufgeben! ;)
nyuuu
 

heinervdm

Technik-Admin

Dabei seit: 02.10.2002

Beiträge: 3 772

 

6 Zum Seitenanfang

Donnerstag, 20. Januar 2005, 19:22

von BennitSchmieder ( http://phpsource.ph.funpic.de/ ):
Counter basierend auf TXT Dateien.
================================

Im folgenden Tutorial möchte ich euch zeigen, wie man einen einfachen Counter mit PHP programmieren kann.

Es ist ein sehr einfaches Script aber es ist ein guter Einstieg um nachher z.B. andere Dinge zählen zu lassen.

Schwierigkeitsgrad: Sehr leicht.

Einleitung
Ziel: Einen Textcounter zu programmieren, der die Besucherzahl in einer txt Datei abspeichert.

Das script in seinen einzelnen Bausteinen

Als erstes müssen wir prüfen, ob die txt Datei (wir wollen die Besucherzahlen in Ihr speichern) schon existiert. Wenn Sie nicht existiert, legt das script die datei an.
Der Tag hierfür lautet:

PHP-Quelltext

1
2
if(!file_exists("count.txt")) 
{$counter=fopen("count.txt""a");}


Wenn die Datei schon vorhanden ist, wird sie mit dem folgenden Tag geöffnet:

PHP-Quelltext

1
2
else 
{$counter=fopen("count.txt""r+");}


Nun setzten wir die folgende Funktion in unseren Quelltext ein:

PHP-Quelltext

1
$aufruf=fgets($counter,100);


PHP-Quelltext

1
fgets()

liest eine Zeile von der aktuellen Position des Dateizeigers, der durch

PHP-Quelltext

1
fopen("count.txt""r+");


am Anfang steht, bis die angegebene Anzahl Zeichen (in unserem Fall 100) oder das Zeilenende erreicht ist. Zurückgegeben wird dann eine Zeichenkette, die wir der Variablen $aufruf zuweisen.

Nun folgt das eigentliche Zählen der Besucher!
Wir erhöhen den Wert, der in der Variablen $aufruf gespeichert ist um jeweils eins. Der Quelltext dazu sieht so aus:

PHP-Quelltext

1
$aufruf=$aufruf+1;


Auch wenn die txt Datei vorher leer war, ist in der Variablen $aufruf nun eine Zahl enthalten, nämlich die Zahl 1. Das zeigt uns, dass PHP mit "Nichts"+1 oder "Null"+1 keine Probleme bereitet.

Die folgende Funktion setzt den Cursor in der Textdatei wieder an den Anfang der Datei. So wird der alte Counterstand mit dem neuen überschrieben.

PHP-Quelltext

1
rewind($counter);


Jetzt schreiben wir den neuen Counterstand in die Textdatei.

PHP-Quelltext

1
fputs($counter,$aufruf);


Mit fputs schreiben wir daten(also texte, Zahlen oder anderes) in eine Datei.

Nun schließen wir die Datei noch mit

PHP-Quelltext

1
fclose($counter);


Und lassen den neuen Besucherstand ausgeben.

PHP-Quelltext

1
echo $aufruf;


Der vollständige Quelltext sieht dann so aus:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
if(!file_exists("count.txt")) 
{$counter=fopen("count.txt""a");} 
else 
{$counter=fopen("count.txt""r+");} 
$aufruf=fgets($counter,100); 
$aufruf=$aufruf+1rewind($counter); 
fputs($counter,$aufruf); 
fclose($counter); 
echo $aufruf?>


Die Datei speichern Sie jetzt unter einem beliebigen Namen.
Aber ganz wichtig ist, dass diese Datei die Endung .php hat. Also z.B. counter.php
Sonst funktioniert das script nicht.
»heinervdm« hat folgende Datei angehängt:
  • counter.rar (641 Byte - 66 mal heruntergeladen - zuletzt: 20. April 2012, 03:02)
Über mich: www.heinervdm.de
Persönlich Mitteilungen an mich bitte als PN (nicht Email) hier im Forum. ICQ und Skype bitte nur in Notfällen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »heinervdm« (21. Januar 2005, 18:41)