Tak přesně tento problém jsem také řešil. Po půl hodince skoumání a porovnávání kódů se mi to podařilo vyřešit. A zde je návod:
1) Otevřete si soubor view.php a do něj vložte před první funkci ("function Znamkuj($id_clanek = '',$znamka = 0)") tento kód:
//captcha kontorolní otázky
function NactiKontrolniRetezec()
{
$vysl['captcha_id']='';
$vysl['captcha_otazka']='';
// dotaz na vypis vsech dostupnych kontrolnich otazek
// tento zpusob ziskani kontrolni otazky nepocitani s prilis velkym mnoztvim otazek v databazi; v pripade vetsiho mnozstvi by se musel upravit dotazovaci mechanizmus
$dotaz="select * from ".$GLOBALS["rspredpona"]."captcha_test_otazky where zobrazit=1 order by idc";
$dotazpol=phprs_sql_query($dotaz,$GLOBALS["dbspojeni"]);
$pocetpol=phprs_sql_num_rows($dotazpol);
if ($pocetpol>0):
$akt_vybrana_otazka=rand(0,($pocetpol-1));
if (phprs_sql_data_seek($dotazpol,$akt_vybrana_otazka)):
// nacteni kontrolni otazky
$pole_data=phprs_sql_fetch_assoc($dotazpol);
// zaplneni vysledkoveho pole
$vysl['captcha_id']=$pole_data['identifikator'];
$vysl['captcha_otazka']=$pole_data['otazka'];
endif;
endif;
return $vysl;
}
function OverKontrolniRetezec($captcha_id = '', $captcha_odpoved = '')
{
// bezpecnostni korekce
$captcha_id=phprs_sql_escape_string($captcha_id);
$captcha_odpoved=phprs_sql_escape_string($captcha_odpoved);
// uprava odpovedi
$captcha_odpoved=strtolower(trim($captcha_odpoved));
// kontrolni dotaz
$dotaz="select idc from ".$GLOBALS["rspredpona"]."captcha_test_otazky where identifikator='".$captcha_id."' and odpoved='".$captcha_odpoved."' and zobrazit=1";
$dotazpol=phprs_sql_query($dotaz,$GLOBALS["dbspojeni"]);
if ($dotazpol!=0&&phprs_sql_num_rows($dotazpol)==1):
return 1; // OK; kontrolni retezec plati
else:
return 0; // chyba
endif;
}
To máme funkce pro captcha otazky a ted zobrazeni pod formulářem pro přidání komentáře:
2) Najděte si stále v souboru view.php řádek:
$prctenar_mail=$GLOBALS["prmyctenar"]->Ukaz("email");
a pod něj vložte další řádek s tímto kódem:
$prctenar_test_robot=''; // bez testu
(bez uvozovek) to zajistí že podkud je čtenář registrovaný nezobrazí se mu captcha otázka.
3) kousek níž je toto:
$prctenar='';
$prctenar_mail='@';
Místo těchto dvou řádku vložte tento kód:
$akt_pole_test_robot=NactiKontrolniRetezec();
$prctenar='';
$prctenar_mail='@';
$prctenar_test_robot='<p align="center" class="kom-z">'.RS_KO_ZPR_KONTROLA.'<br /><br />'.$akt_pole_test_robot['captcha_otazka'].' <input type="text" name="captchaodpoved" size="12" class="textpole" /><input type="hidden" name="captchaid" value="'.$akt_pole_test_robot['captcha_id'].'" /></p>';
To bychom měli kontrolu přihlášeného čtenáře a nakonec ještě zobrazování kontrolní otázky:
Najděte si opět o kousek níž tento řádek:
<p align=\"center\"><textarea name=\"kobsah\" cols=\"60\" rows=\"16\" wrap=\"yes\" class=\"textbox\"></textarea></p>
a pod něj vložde toto: ".$prctenar_test_robot." (tentokrát včetně uvozovek)
A to je vše máme hotovo teď už jen stačí aktualizovat stránku. :) Nakonec bych zde ještě rád uvedl svou stránku: [
http://www.grafika3d.ic.cz]
Filip Sádovský
ICQ: 232-994-303 (Prosím do autorizace psát phprs, jinak ignoruji)
Web: www.grafika3d.ic.cz
Celkem upraveno 4×. Poslední úprava sad69 v 23.02.2008 11:53.