Php 正在尝试将验证码添加到表单中

Php 正在尝试将验证码添加到表单中,php,security,captcha,Php,Security,Captcha,这是一些表单生成代码。我想添加验证码或数学验证。我有一个名为captcha.php的captcha类构造文件。我已经在我写的更基本的php表单上使用了这个类,但是下面是其他人写的。我想我可以添加另一个名为captcha的案例,或者制作一个smartforms\u captcha函数。有什么想法吗 function smartforms_form_field($type,$name,$class = '',$extra = array(),$prefill = true) { global

这是一些表单生成代码。我想添加验证码或数学验证。我有一个名为captcha.php的captcha类构造文件。我已经在我写的更基本的php表单上使用了这个类,但是下面是其他人写的。我想我可以添加另一个名为captcha的案例,或者制作一个smartforms\u captcha函数。有什么想法吗

function smartforms_form_field($type,$name,$class = '',$extra = array(),$prefill = true) {
    global $sf_form,$sf_fid;

    if (!empty($extra) && !is_array($extra)) parse_str($extra,$extra);
    $classes = array('input_' . $type, $sf_form->field[$sf_fid][$name]);
    if (!is_array($class)) $class = preg_split('#\s+#',$class);
    $classes = trim(implode(' ',array_merge($classes,$class)));

    $value = ($prefill) ? $sf_form->values[$sf_fid][$name] : '';
    switch ($type) {
        case 'text':
        $autocomplete = ($extra['autocomplete'] == 'off') ? 'off' : 'on';
        $format = '<input type="text" name="%1$s" id="%1$s" class="%2$s" value="%3$s" autocomplete="%4$s" />';
        printf($format,$name,$classes,$value,$autocomplete);
        break;
        case 'textarea':
        $rows = $extra['rows'];
        $cols = $extra['cols'];
        $format = '<textarea name="%1$s" id="%1$s" class="%2$s" rows="%3$d" cols="%4$d">%5$s</textarea>';
        printf($format,$name,$classes,$rows,$cols,$value);
        break;
    }
}
函数smartforms\u form\u字段($type,$name,$class='',$extra=array(),$prefill=true){
全球$sf_表格,$sf_fid;
如果(!empty($extra)&&!is_array($extra))parse_str($extra,$extra);
$classes=array('input_'.$type,$sf_表单->字段[$sf_fid][$name]);
如果(!is_array($class))$class=preg_split('#\s+#',$class);
$classes=trim(内爆(“”,数组合并($classes,$class));
$value=($prefill)?$sf\u form->values[$sf\u fid][$name]:'';
交换机($类型){
案例“文本”:
$autocomplete=($extra['autocomplete']='off')?'off':'on';
$format='';
printf($format、$name、$classes、$value、$autocomplete);
打破
案例“textarea”:
$rows=$extra['rows'];
$cols=$extra['cols'];
$format='%5$s';
printf($format、$name、$classes、$rows、$cols、$value);
打破
}
}

验证码与输入字段不同,输入字段是一个包含两个元素的组,一个输入文本和一个图像,可选一个按钮用于重新加载图像和收听验证码。我个人选择创建一个新函数

function smartforms_captcha($name, $class = '', $extra = array(), $prefill = true) {

    global $sf_form,$sf_fid;

    if (!empty($extra) && !is_array($extra)) parse_str($extra,$extra);
    if (!is_array($class)) $class = preg_split('#\s+#',$class);
    $classes = trim(implode(' ',array_merge($classes,$class)));

    // Create your markup correctly
    $format = '<input type="text" name="$name" id="$name" class="$class" value="" />';
    $format = '<img src="/captha.php?' . uniqid() . '" />'

    }
}
函数smartforms\u captcha($name,$class='',$extra=array(),$prefill=true){
全球$sf_表格,$sf_fid;
如果(!empty($extra)&&!is_array($extra))parse_str($extra,$extra);
如果(!is_array($class))$class=preg_split('#\s+#',$class);
$classes=trim(内爆(“”,数组合并($classes,$class));
//正确创建标记
$format='';
$format=''
}
}

我实现了一个图像验证码类,它也是安全的。。。您可以下载并使用代码,如果您发现任何有趣的更改,请告诉我: