codeigniter
CAPTCHA Helper
Zoeken…
Deze helper wordt geladen
Deze helper wordt geladen met de volgende code:
In Controller zelf (* kan steeds opnieuw herhalen *)
$this->load->helper('captcha');
In config/autoload.php
( slechts eenmaal laden )
$autoload['helper'] = array('captcha');
create_captcha ($ data)
Neemt een reeks informatie om de CAPTCHA als invoer te genereren en maakt de afbeelding volgens uw specificaties, waarbij een reeks associatieve gegevens over de afbeelding wordt geretourneerd.
[array]
(
'image' => IMAGE TAG
'time' => TIMESTAMP (in microtime)
'word' => CAPTCHA WORD
)
De "afbeelding" is de daadwerkelijke afbeeldingstag:
<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
De "tijd" is de micro-tijdstempel die wordt gebruikt als de afbeeldingsnaam zonder de bestandsextensie. Het zal een getal als dit zijn: 1139612155.3422
Het "woord" is het woord dat in de captcha-afbeelding verschijnt en dat, indien niet aan de functie geleverd, een willekeurige string zal zijn.
De CAPTCHA-helper gebruiken
Eenmaal geladen kun je een captcha als volgt genereren:
$vals = array(
'word' => 'Random word',
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/',
'font_path' => './path/to/fonts/texb.ttf',
'img_width' => '150',
'img_height' => 30,
'expiration' => 7200
);
$cap = create_captcha($vals);
echo $cap['image'];
- De captcha-functie vereist de GD-beeldbibliotheek.
- Alleen het
img_path
enimg_url
zijn vereist. - Als er geen "woord" wordt opgegeven, genereert de functie een willekeurige ASCII-reeks. U kunt uw eigen woordenbibliotheek samenstellen waaruit u willekeurig kunt tekenen.
- Als u geen pad naar een TRUE TYPE-lettertype opgeeft, wordt het oorspronkelijke lelijke GD-lettertype gebruikt. De map "captcha" moet beschrijfbaar zijn (666 of 777)
- De "vervaldatum" (in seconden) geeft aan hoe lang een afbeelding in de captcha-map blijft voordat deze wordt verwijderd. De standaardwaarde is twee uur.
Compleet voorbeeld
Hier is een voorbeeld van gebruik met een database. Op de pagina waar de CAPTCHA wordt getoond, heb je zoiets als dit:
$this->load->helper('captcha');
$vals = array(
'img_path' => './captcha/',
'img_url' => 'http://example.com/captcha/'
);
$cap = create_captcha($vals);
$data = array(
'captcha_time' => $cap['time'],
'ip_address' => $this->input->ip_address(),
'word' => $cap['word']
);
$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);
echo 'Submit the word you see below:';
echo $cap['image'];
echo '<input type="text" name="captcha" value="" />';
Vervolgens heb je op de pagina die de inzending accepteert iets als dit:
// First, delete old captchas
$expiration = time()-7200; // Two hour limit
$this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
// Then see if a captcha exists:
$sql = "SELECT COUNT(*) AS count FROM captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
echo "You must submit the word that appears in the image";
}