Home

Das Tippsforum

Du brauchst noch mehr Hilfe bei einem bestimmten Thema? Du hast einen unserer Tipps ausprobiert, aber es funktioniert immer noch nicht? Dann ist unser Tippsforum genau das richtige für dich.
Link zum Forum

Captcha mit PHP erstellen

Geschrieben in PHP Codeschnippsel am 28 Juli 2008

Jeder kennt ihn… Jedem nervt er… nur dem Admin nicht, denn so ein Sicherheitscode ist ziemlich nützlich, denn ohne ihn könnten Spambots die darauffolgende Seite x-mal aufrufen und viel Traffic verbrauchen.
Ihr könnt diesen Sicherheitscode z.B. bei Anmeldungen oder Kontaktformularen nutzen.

captcha.php:
Hier wird das Bild generiert

<?php
session_start();
$captcha = $_SESSION['captcha'];
//Folgende Farben ergeben folgenden Code, für die nächste Funktion: imagecolorallocate:, alternativ kann auch nach RGB gegooglet werden.
//schwarz: imagecolorallocate($bild,00,00,00)
//rot: imagecolorallocate($bild, 255,0,0)
//blau: imagecolorallocate($bild, 0,0,255)
//weiß: imagecolorallocate($bild, 255,255,255)
//gelb: imagecolorallocate($bild, 255,255,0)
//grün: imagecolorallocate($bild, 0,255,0)
$typ = 1;  //Wenn du ein Hintergrundbild statt einer Farbe willst, dann schreib da eine 1 hin, ansonsten eine 0
if($typ==0) {
$bild = imagecreatefrompng(’captcha.PNG’); //Bitte tragen Sie hier den Link zu dem Hintergrundbild ein.
$bildhoehe = imagesy($bild);
$bildbreite = imagesx($bild);
}
else {
$bildhoehe = 60;
$bildbreite = 200;
$bild = imagecreate($bildbreite, $bildhoehe);
imagecolorallocate($bild, 0,0,255); //Hintergrundfarbe
}
$text = imagecolorallocate($bild, 0, 0, 0); //Textfarbe
$font = 10;
$a = 20;
$x = floor($bildbreite/strlen($captcha))-5;
for($b=0; $b < strlen($captcha); $b++)
{
$c = mt_rand(2,$bildhoehe-20);
imagestring ($bild,$font,$a,$c, $captcha{$b}, $text);
$a = $a+$x;
}
if(function_exists(”imagegif”))
{
header(”Content-type: image/gif”);
imagegif($bild);
}
elseif (function_exists(”imagepng”))
{
header(”Content-type: image/png”);
imagepng($bild);
}
elseif (function_exists(”imagejpeg”))
{
header(”Content-type: image/jpeg”);
imagejpeg($bild, “”, 0.5);
}
?>

Nun kommen wir zur Eingabeaufforderung und Darstellung unseres Sicherheitscodes:

<?php
session_start();
function zufallscode()
{
mt_srand(crc32(microtime()));
$laenge = 5; //Hier kommt die Anzahl der Zeichen, die angezeigt werden sollen, rein
$zeichen = "abcdefghijklmnpqrstuvwxyz0123456789"; // Hier fügt ihr bitte alle Zeichen ein, die abgefragt werden sollen
$laenge_zeichen = strlen($zeichen)-1;
$code= "";
for($a=0; $a<$laenge; $a++) {
$code .= $zeichen{mt_rand(0, $laenge_zeichen)};
}
return $code;
}
$_SESSION['captcha'] = zufallscode();
?>
<form action=”abfrage.php” method=”post”>
<img src=”captcha.php” alt=”Captcha”>
<input type=”text” name=”captcha” maxlength=”10″><br />
<input type=”submit” value=”abfragen” /></form>

Nun kommen wir zur letzten Teil:
Die Abfrage, ob der Sicherheitscode auch richtig ausgefüllt wurde.
Den Teil kann man in eine extra Datei speichern und dann includen oder einfach in eine andere Datei kopieren:

abfrage.php:

<?php
session_start();
if($_POST['captcha'] == $_SESSION['captcha']) {
echo “Sicherheitscode stimmt”;
} else {
echo “Sie haben den Sicherheitscode nicht richtig eingegeben”;
}
?>

Mit PHP einen Wert auf eine Zahl überprüfen

Geschrieben in PHP Codeschnippsel am 1 Dezember 2007

Es ist eigentlich ganz einfach einen Wert zu überprüfen. In diesem Fall nehmen wir dazu eine selbsterstellte Funktion Namens isNum().

Als erstes schreibt ihr diese Funktion ganz oben in eure PHP-Datei.

function isNum($zahl) {
return (preg_match("/^[0-9]+$/”, $zahl));
}

In dieser Funktion wird mit Hilfe von preg_match ermittelt, ob ein String nur aus Zahlen bestimmt. Das ganze könnt ihr dann zum Beispiel so testen:

$zahl = 5;
if(isNum($zahl)){
echo "Es ist eine Zahl";
} else {
echo "Es ist keine Zahl";
}

[PHP/MySQL] Einfacher Counter mit Reloadsperre

Geschrieben in PHP Codeschnippsel am 17 August 2007

Ein Counter wird fast auf jeder Seite verwendet. Damit Besucher aber nicht mehrfach gezählt werden, kann eine Reloadsperre eingebaut werden. So ist die Besucheranzeige wesentlich authentischer.
Um dieses Tutorial zu verstehen, solltest du einige Grundkenntnisse in PHP und MySQL haben.
Zunächst äberlegen wir uns, wie der Zähler funktionieren soll. Wir haben insgesamt zwei MySQL Tabellen.
In der einen wird die Zahl der Besucher, in der anderen die IPs mit der jeweiligen Besuchszeit gespeichert. Die IP eignet sich gut für die Reloadsperre, da sie sich erst nach einiger Zeit wieder ändert.
Als neue Erweiterung der Reloadsperre wurde jetzt auch noch eine Sperre über Cookies eingebaut. So ist die Sperre noch zuverlässiger.
Wenn jetzt ein Besucher unsere Seite betritt, wird geprüft, ob er schonmal innerhalb der Reloadzeit diese Seite betreten hat. Dazu werden die IPs mit der dazugehörigen Besuchszeit abgerufen und geprüft, ob der Cookie für die Reloadsperre vorhanden ist.
Stimmt eine der IPs mit der des Besuchers überein, wird der Besucher nicht gezählt.
Wenn das jedoch nicht der Fall ist, wird zuerst die Anzahl der Besucher um den Wert 1 erhöht und dann in der MySQL Tabelle abgespeichert. Danach wird noch die IP mit der aktuellen Zeit in der anderen Tabelle abgespeichert und ein Cookie erstellt, damit der Besucher bei einem erneuten Besuch nicht mehr mitgezählt wird.
Nach der Theorie gehen wir jetzt in den praktischen Teil über. Als erstes werden die zwei benötigten Datenbanken erstellt. Dazu wird folgender Code über phpMyAdmin in der Datenbank ausgeführt.

CREATE TABLE `Counter` (
`Counter` INT(`9`)
);
CREATE TABLE `IP` (
`Zeit` INT(30) NOT NULL,
`IP` VARCHAR(40) NOT NULL
);
INSERT INTO Counter (Counter) VALUES ('1');

Jetzt haben wir alle benötigten MySQL Tabellen fertig und können zu der “.php”-Datei kommen. Damit wir mit der MySQL Datenbank arbeiten können, muss erst die Verbindung zu ihr hergestellt werden.
Deshalb kommt an den Anfang dieser Code:

$DatabasePointer = mysql_connect('localhost', 'Benutzername', 'Passwort');
mysql_select_db('Datenbank', $DatabasePointer);

Hier müssen die Zugangsdaten deiner MySQL Datenbank angegeben werden. Danach geht es weiter mit der Festlegung der Variablen.

$Zeit = time();
$IP = $_SERVER['REMOTE_ADDR'];
$GesperrteIPs = mysql_query(”SELECT IP FROM IP WHERE IP=’”.$IP.”‘”, $DatabasePointer);

Mithilfe von time() wird die aktuelle Zeit abgerufen und der Variable [/scode]$Zeit[/scode] zugewiesen (die Zeit ist in Sekunden, was später noch wichtig wird). Danach wird durch $REMOTE_ADDR die aktuelle IP des Besuchers abgerufen und der Variable $IP zugewiesen.
Anschließend werden alle Werte aus der Tabelle IP ausgelesen, wo die derzeitige IP des Benutzers gleich einer IP aus Datenbank ist.
Jetzt haben wir erstmal alle Werte, die wir für die weitere “Verarbeitung” benötigen.
Deshalb wird jetzt mit dem eigentlichen Counter begonnen.

if ((mysql_num_rows($GesperrteIPs) > 1) && !isset($_COOKIE['CounterReloadsperre']))
{
mysql_query(”INSERT INTO IP (Zeit, IP) VALUES (’”.$Zeit.”‘, ‘”.$IP.”‘)”, $DatabasePointer);
mysql_query(”UPDATE Counter SET Counter=Counter+1″);
setcookie(’CounterReloadsperre’, $IP, time()+$Reloadzeit);
}
$CounterstandAbrufen = mysql_query(”SELECT Counter FROM Counter”, $DatabasePointer);
$Stand = mysql_fetch_object($CounterstandAbrufen);
$Counter = $Stand->Counter;

Mithilfe der if-Abfrage wird überprüft, ob die IP des aktuellen Besuchers nicht in der Datenbank vorhanden ist und noch kein Cookie erstellt wurde. Den Cookie kann man mit einem einfachen !isset() auf seine Existenz überprüfen; bei der IP wird überprüft, ob der MySQL Query erfolglos war, denn dann wurde keine Zeile mit der IP des aktuellen Besuchers gefunden.
Sind beide Bedingungen erfüllt, wird der Besucher gezählt. Dazu wird zunächst die aktuelle IP und die Besuchszeit in die IP-Datenbank eingetragen und danach der Counterstand um den Wert 1 erhöht.
Danach wird noch ein Cookie erstellt, der eine “Lebensdauer” von der Reloadzeit bekommt. Deshalb muss der Counterquelltext später ganz am Anfang des jeweiligen Dokuments eingefügt werden.
Schließlich wird dann der aktuelle Stand unseres Counters abgerufen. Da er der Variable $Counter zugewiesen wurde, kann er an einer beliebigen Stelle des Dokuments wieder ausgegeben werden.
Jetzt fehlt nur noch die Reloadsperre für den Counter. Dazu fügen wir noch diese Werte ein.

$Reloadzeit = 86400;
$Loeschen = $Zeit-$Reloadzeit;

Diese beiden Zeilen müssen unter der Zeile in der $Zeit zugewiesen wird eingefügt werden. Als $Reloadzeit kannst du jetzt eine beliebige Zeit in Sekunden angeben (im Beispiel wäre das ein Tag). Danach wird eine Variable $Loeschen definiert. Dazu wird die Reloadzeit von der aktuellen Zeit (die ja auch in Sekunden ist) abgezogen.
Danach arbeiten wir mit diesem Wert mithilfe des folgenden Codes.

mysql_query("DELETE FROM IP WHERE Zeit<'".$Loeschen."'", $DatabasePointer);
Füge diesen Code unter der Zeile ein, wo die Variable $IP zugewiesen wird.
Dieser Query bewirkt, dass alle IPs aus der Datenbank gelöscht werden, deren Reloadsperre abgelaufen ist (dort ist die Reloadzeit kleiner als die aktuelle Löschzeit).
Es ist wichtig, dass dieser Code vor dem if steht, da abgelaufene IP Sperren gelöscht werden sollen, bevor mit dem Zählen von neuen Besuchern begonnen wird.
Hier mit haben wir schon unseren fertigen Counter. Den ganzen Code am Stück kannst du dir hier noch einmal ansehen:

<?php
# Verbindung zur MySQL Datenbank herstellen
$DatabasePointer = mysql_connect("localhost", "Benutzername", "Passwort");
mysql_select_db("Datenbank", $DatabasePointer);
# Variablen definieren
$Zeit = time();
$Reloadzeit = 86400;
$Loeschen = $Zeit-$Reloadzeit;
$IP = $_SERVER['REMOTE_ADDR'];
# Alte IPs löschen
mysql_query(”DELETE FROM IP WHERE Zeit<’”.$Loeschen.”‘”, $DatabasePointer);
# Gesperrte IP abrufen
$GesperrteIPs = mysql_query(”SELECT IP FROM IP where IP=’”.$IP.”‘”, $DatabasePointer);
# Counterstand erhöhen
if ((mysql_num_rows($GesperrteIPs) < 1) && !isset($_COOKIE['CounterReloadsperre']))
{
mysql_query(”INSERT INTO IP (Zeit, IP) VALUES (’”.$Zeit.”‘, ‘”.$IP.”‘)” $DatabasePointer);
mysql_query(”UPDATE Counter SET Counter=Counter+1″);
setcookie(”CounterReloadsperre”, $IP, time()+$Reloadzeit);
}
# Counterstand abrufen
$CounterstandAbrufen = mysql_query(”SELECT Counter FROM Counter”, $DatabasePointer);
$Stand = mysql_fetch_object($CounterstandAbrufen);
$Counter = $Stand->Counter;
?>
<html>
<head>
<title>Counter mit Reloadsperre</title>
</head>
<body>
<?php
echo $Counter;
?>
</body>
</html>

Einfacher Counter mit PHP und MySQL

Geschrieben in PHP Codeschnippsel am 16 August 2007

In diesem Tutorial möchte ich euch zeigen wie man einen einfachen Counter mit PHP und MySQL erstellt. Um euren eigenen Counter zu erstellen braucht ihr einen Server der PHP 4 und MySQL 4 unterstützt. Aber nun fangen wir an. Als erstes müsst ihr folgende MySQL-Tabelle in eure Datenbank eintragen. Dazu könnt ihr zum Beispiel PhpMyAdmin benutzen. HIer ist der Tabellen Code:
CREATE TABLE IF NOT EXISTS `counter` (
`id` int(2) NOT NULL auto_increment,
`hits` int(7) NOT NULL default '0',
PRIMARY KEY (`id`)
);
INSERT INTO `counter` (`id`, `hits`) VALUES ('', 1);

Kurze Erklärung: Als erstes erstellt ihr die MySQL-Tabelle “counter”. Als nächstes gebt ihr mit dem INSERT die Startzahl des Counters ein. In diesem Fall steht der Counter am Anfang auf eins. So nun kommt wir aber zum PHP-Teil:

Als erstes müsst ihr folgendes an dem Anfang eures PHP-Scriptes schreiben.

define('MYSQL_HOST', 'localhost'); //HIer müsst ihr euren Server eingeben(meistens localhost)
define('MYSQL_USER', 'testuser'); //HIer müsst ihr den Datenbankuser eingeben
define('MYSQL_PASS', 'passwort'); // Hier müsst ihr euer Passwort eingeben
define('MYSQL_DATABASE', 'datenbank'); //Hier müsst ihr den Namen euer Datenbank eingeben
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS);
mysql_select_db(MYSQL_DATABASE);
$sql = "UPDATE counter SET hits = hits +1";
mysql_query($sql) or die(mysql_error());

In den ersten 6 Zeilen wird die Verbindung zur Datenbank hergestellt. Da müsst ihr nur noch eure Datenbankeinstellungen hereinschreiben. In Zeile 7 wird die Anzahl im Counter einfach um 1 erhöht. In Zeile 8 wird dann nur noch der Code aus Zeile 7 in die Datenbank geschrieben. Jetzt braucht ihr nur noch folgendes dahinzuschreiben, wo der Counter angezeigt werden soll:

$sql = "SELECT id, hits FROM counter WHERE id=1 LIMIT 1";
$result = mysql_query($sql) or die (mysql_error());
$zeile=mysql_fetch_assoc($result);
echo $zeile['hits'];

In Zeile 1 wird der Code für die Abfrage von der Datenbank geschrieben. In Zeile 2 wird die Abfrage zur Datenbank geschickt. In Zeile 3 wird das Ergebnis von der Datenbank abgefangen. In Zeile 4 wird dann nur noch das Ergebnis ausgegeben.

Jetzt noch viel Spaß beim erstellen eurer eigenen Counter.

Einfacher Textcounter mit PHP

Geschrieben in PHP Codeschnippsel am 2 August 2007

Der Code

<?php
$data = "database.txt";
$datei1 = fopen("database.txt","r");
$zeile = fgets($datei1, 4096);
$count = $zeile + 1;
$datei = fopen($data,"w");
fwrite($datei, $count);
fclose($datei1);
fclose($datei);
?>

Die Erklärung

Als erstes müssen Sie eine Textdatei im ihrem Rootverzeichnis mit dem Namen database.txt erstellen. In diese schreiben Sie den Wert 1 rein. Jetzt speichern Sie den oben geschriebenen Code als counter.php ab und kopieren Sie ihn ins selbe Verzeichnis. Geben Sie beiden Dateien die Chmod-Rechte 777. Den Counter können Sie jetzt mit include “counter.php”; einbinden. Nun aber zur wirklichen Erklärung des Codes. In Zeile 2 wird der Variablen $data die Datei zugeordnet in der der Counter die Besucher zählt. In Zeile 3 wird diese Datei zum lesen geöffnet. In Zeile 4 wird die aktuelle Besucherzahl auisgelesen. In Zeile 5 wird in der Variable $count die aktuelle Besucherzahl zugeordnet. In Zeile 6 wird die selbe Datei zum schreiben geöffnet. In Zeile 7 wird die aktuelle Benutzerzahl in die Datei geschrieben. Nun wird die Datei in Zeile 8 und 9 die Datei wieder geschloßen. In Zeile 10 wird die aktuelle Besucherzahl ausgegeben.