Connect failed: Connection timed out

[GastForen Programmierung/Entwicklung PHP und MySQL Wie Capcha verlgleichen?

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Wie Capcha verlgleichen?

Blackhead77
Beiträge gesamt: 118

2. Jan 2008, 15:16
Beitrag # 1 von 4
Bewertung:
(1402 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe jetzt einen Capcha gefunden der funktioniert ich möchte jetzt nur noch wissen wie ich die Variable in der diese Gespeichert ist mit meinem Eingabe Feld vergleichen kann?
Der Capcha Code:
Code
<?php 
# Von Rene Schmidt (rene@reneschmidt.de) fuer DrWeb.de

// Diese Klasse erzeugt EINE Ziffer
class Digit {

// Die Zweierpotenzen sind hier schon berechnet notiert, damit sie nicht jedes Mal neu
// ausgerechnet werden muessen. Wir benoetigen fuer eine 5x3-Matrix, deren Zellen mit
// Zweierpotenzen maskiert sein sollen 15 Bits, also die Bitmasken 2^0 bis 2^14
var $bits = array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384);

// Dieses Array enthaelt die Zeilen einer Ziffer, deren Zellen wiederum als Array dargestellt werden
// Siehe Konstruktor
var $matrix = array();

// Dies sind die fertig berechneten Bitmasken der Ziffern 0 bis 9 in Dezimaldarstellung
var $bitmasks = array(31599, 18740, 29607, 31143, 18921, 31183, 31695, 18855, 31727, 31215);

// Konstruktor; nimmt die darzustellende Ziffern entgegen; Matrix wird initialisiert
// setMatrix() wird mit der korrekten Bitmaske der darzustellenden Ziffer aufgeruefen
function digit( $dig ) {
$this->matrix[] = array(0, 0, 0); // 2^0, 2^1, 2^2 ... usw.
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0);
$this->matrix[] = array(0, 0, 0); // ..., ..., 2^14

((int)$dig >= 0 && (int)$dig <= 9) && $this->setMatrix( $this->bitmasks[(int)$dig] );
}

// Methode erzeugt anhand der Bitmaske die Matrix der Ziffer
// Vom Konstruktor erhaelt die Methode die Bitmaske der darzustellenden Ziffer
function setMatrix( $bitmask ) {
$bitsset = array();

// Jetzt wird jedes Bit daraufhin geprueft, ob es zur Bitmaske gehoert
// Wenn ja, wird es im Array $bitset gespeichert
for ($i=0; $i<count($this->bits); ++$i)
(($bitmask & $this->bits[$i]) != 0) && $bitsset[] = $this->bits[$i];

// Nun wird die initialisierte und leere Matrix hergenommen und Zeile fuer Zeile und Zelle fuer Zelle
// bestueckt. Zellen, die leer sein sollen, bleiben auf 0, aktivierte Zellen erhalten den Wert 1
// Beispiel aus dem Konstruktor - die Ziffer 1 wuerde als Matrix so aussehen:
// $this->matrix[] = array(0, 0, 1); // 2^0, 2^1, 2^2 ... usw.
// $this->matrix[] = array(0, 1, 1);
// $this->matrix[] = array(0, 0, 1);
// $this->matrix[] = array(0, 0, 1);
// $this->matrix[] = array(0, 0, 1); // ..., ..., 2^14
foreach($this->matrix AS $row=>$col)
foreach($col AS $cellnr => $bit)
in_array( pow(2,($row*3+$cellnr)), $bitsset) && $this->matrix[$row][$cellnr] = 1;
}
}

// Diese Klasse kuemmert sich um die korrekte Darstellung mehrerer Ziffern (also einer Zahl)
class Number {

var $num = 0; // Zahl, die dargestellt werden soll
var $digits = array(); // Enthaelt spaeter fuer jede Stelle ein Digit-Objekt

// Konstruktor; nimmt direkt die darzustellende Zahl entgegen.
function number( $num ) {
$this->num = (int)$num; // Zur Sicherheit in ganze Zahl umwandeln

$r = "{$this->num}"; // In Zeichenkette konvertieren

// Jetzt fuer jede Stelle der Zahl ein Digit-Objekt erzeugen
for( $i=0; $i<strlen($r); $i++ )
$this->digits[] = new Digit((int)$r[$i]);
}

// Liefert einfach die Zahl, die dargestellt wird.
function getNum() { return $this->num; }

// Gibt die Zeilen aller Ziffern nacheinander aus; also erst alle ersten, dann alle zweiten Zeilen usw.
function printNumber() {
for($row=0; $row<count($this->digits[0]->matrix); $row++) {
foreach( $this->digits AS $digit ) {
foreach($digit->matrix[$row] AS $cell)
if($cell === 1) // 1 bedeutet, die Zelle soll aktiv sein (=schwarz)
print("<span class=\"s\">&nbsp;&nbsp;</span>");
else
print("<span class=\"w\">&nbsp;&nbsp;</span>");
print("<span class=\"w\">&nbsp;</span>"); // Leerraum zwischen den Ziffern
}
print("<br>"); // Naechste Zeile
}
}
}

?>

<html>
<head>
<style>
.s { color: black; background-color: black; }
.w { color: white; background-color: white; }
</style>
</head>
<body>
<h2>Beispiel</h2>
<div >
<?php
$n = new Number( rand(1000,9999) );
$n->printNumber();
printf( "<h2>Dargestellt wird die Zahl %d</h2>", $n->getNum() );
?>
</div>

</body>
</html>


Die Zahl wird in "$n" gespeichert. Wie kann ich diese Variable so expotrieren dass ich sie mit einer einfachen if Abfrage mit dem Eingabefeld vergleichen kann?
X

Wie Capcha verlgleichen?

Intermedia
Beiträge gesamt: 1287

2. Jan 2008, 15:23
Beitrag # 2 von 4
Beitrag ID: #328894
Bewertung:
(1397 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

den Wert in einer Session speichern, bei absenden des Formulars dann den Wert mit dem Sessionwert vergleichen. Das wars schon.

Gruß Sven


als Antwort auf: [#328893]

Wie Capcha verlgleichen?

Blackhead77
Beiträge gesamt: 118

2. Jan 2008, 15:33
Beitrag # 3 von 4
Beitrag ID: #328897
Bewertung:
(1394 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
noch nicht ganz Angelic
kannst du mir noch erklären wie man dass macht? in einer Session speichern?


als Antwort auf: [#328894]

Wie Capcha verlgleichen?

Intermedia
Beiträge gesamt: 1287

2. Jan 2008, 15:43
Beitrag # 4 von 4
Beitrag ID: #328901
Bewertung:
(1390 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

hier sind Beispiele für die Arbeit mit Session: http://www.php.net/...on.session-start.php

Gruß Sven


als Antwort auf: [#328897]
X