PHP Classes

File: form_handler.php

Recommend this page to a friend!
  Classes of Max V. Moiseenko   form_handler   form_handler.php   Download  
File: form_handler.php
Role: ???
Content type: text/plain
Description: definition of a class
Class: form_handler
Author: By
Last change:
Date: 22 years ago
Size: 18,829 bytes
 

Contents

Class file image Download
<? include("html_mime_mail.php"); ################################################################################################ class form_handler extends html_mime_mail{ var $form_fields=array();//form fields var $title;//form title var $lang='ru';//language var $answer="";//answer table var $form_check="true";//sring which will be iserted into javascript check function var $url='.';//path at 'action' option of form /**************************************************************************************/ //constutor //public void function form_handler($lang){ $this->lang=$lang; } /**************************************************************************************/ //add fields text,hidden,textarea,password,submit,reset //public void function add_field($name,$ru,$en, $value_ru='',$value_en='', $type='text', $obligation=false, $size='50'){ $this->form_fields[count($this->form_fields)]=array( 'name'=>$name, 'ru'=>$ru, 'en'=>$en, 'type'=>$type, 'value_ru'=>$value_ru, 'value_en'=>$value_en, 'size'=>$size, 'obligation'=>$obligation ); } /**************************************************************************************/ //add field checkbox //public void function add_checkbox($name,$ru,$en, $value='', $type='checkbox', $obligation=false, $checked=false){ $this->form_fields[count($this->form_fields)]=array( 'name'=>$name, 'ru'=>$ru, 'en'=>$en, 'value'=>$value, 'type'=>$type, 'checked'=>$checked, 'obligation'=>$obligation ); } /**************************************************************************************/ /* add field select * example format of $values * $values=array( * "email" => array('ru'=>"e-mail", 'en'=>"e-mail", 'selected'=>true), * "fax" => array('ru'=>"факс", 'en'=>"fax", 'selected'=>false) ); */ //public void function add_select($name,$ru,$en, $values, $obligation=false, $size=1, $multiple=false){ $this->form_fields[count($this->form_fields)]=array( 'name'=>$name, 'ru'=>$ru, 'en'=>$en, 'type'=>"select", 'values'=>$values, 'size'=>$size, 'multiple'=>$multiple, 'obligation'=>$obligation ); } /**************************************************************************************/ /* add feild radio * example format of $values * $values=array( * "email" => array('ru'=>"e-mail", 'en'=>"e-mail", 'checked'=>true), * "fax" => array('ru'=>"факс",'en'=>"fax",'checked'=>false) ); */ //public void function add_radio($name,$ru,$en, $values, $obligation=false){ $this->form_fields[count($this->form_fields)]=array( 'name'=>$name, 'ru'=>$ru, 'en'=>$en, 'type'=>"radio", 'values'=>$values, 'obligation'=>$obligation ); } /**************************************************************************************/ //add title of form //public void function add_title($ru,$en){ $this->title['ru']=$ru; $this->title['en']=$en; } /**************************************************************************************/ //add commet into form //public void function add_comment($ru,$en){ $this->form_fields[count($this->form_fields)]=array( 'ru'=>$ru, 'en'=>$en, 'type'=>"comment" ); } /**************************************************************************************/ //add file field //public void function add_file($name, $ru,$en,$filetype,$filesize=20000, $obligation=false){ $this->form_fields[count($this->form_fields)]=array( 'name'=>$name, 'ru'=>$ru, 'en'=>$en, 'filetypes'=>$filetype, 'filesize'=>$filesize, 'obligation'=>$obligation, 'type'=>"file" ); } /**************************************************************************************/ //print form into html output //public string function print_form(){ $str ="<form action='".$this->url."' method=post name='fomer' enctype='multipart/form-data' onsubmit='return check();'>"; $str.="<p><table width=510 border=0 cellspacing=0 cellpadding=1 bgcolor=#cccccc><tr><td>"; $str.="<table width=100% border=0 cellspacing=0 cellpadding=2 bgcolor=#ffffff>"; $str.="<tr bgcolor=#cccccc><td colspan=2><b>".$this->title[$this->lang]."</b></td></tr>"; $str.="<tr><td width=1%><img src='".LEVEL."images/spacer.gif' width=190 height=1></td><td width=*><img src='".LEVEL."images/spacer.gif' width=310 height=1></td></tr>"; for($i=0;$i<count($this->form_fields);$i++){ $bg=($i%2)? "#eeeeee" : "#ffffff"; switch($this->form_fields[$i]['type']){ case 'text': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]; if($this->form_fields[$i]['obligation']){ $this->form_check.=" && (f.elements['".$this->form_fields[$i]['name']."'].value!='".$this->form_fields[$i]['value_'.$this->lang]."')"; $str.="&nbsp;*</td><td>"; }else $str.="</td><td>"; $str.="<input type=".$this->form_fields[$i]['type']." name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value_'.$this->lang]."' size=".$this->form_fields[$i]['size']." style='width:100%;'>"; $str.="</td></tr>"; break; case 'checkbox': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]; $str.=($this->form_fields[$i]['obligation'])? "&nbsp;*</td><td>" : "</td><td>"; $str.="<input type=checkbox name='".$this->form_fields[$i]['name']."'"; $str.=($this->form_fields[$i]['checked'])? " checked>" : ">"; $str.="</td></tr>"; break; case 'textarea': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]; if($this->form_fields[$i]['obligation']){ $this->form_check.=" && (f.elements['".$this->form_fields[$i]['name']."'].value!='".$this->form_fields[$i]['value_'.$this->lang]."')"; $str.="&nbsp;*</td><td>"; }else $str.="</td><td>"; $str.="<textarea name='".$this->form_fields[$i]['name']."' cols=50 rows=5 style='width:100%;'>".$this->form_fields[$i]['value_'.$this->lang]."</textarea>"; $str.="</td></tr>"; break; case 'hidden': $str.="<input type=hidden name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value']."'>"; break; case 'select': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]; if($this->form_fields[$i]['obligation']){ $this->form_check.=" && (f.elements['".$this->form_fields[$i]['name']."'].value!='".$this->form_fields[$i]['value']."')"; $str.="&nbsp;*</td><td>"; }else $str.="</td><td>"; $str.="<select name='".$this->form_fields[$i]['name']; $str.=($this->form_fields[$i]['multiple'])? "[]' multiple" : "'"; $str.=($this->form_fields[$i]['size'] > 1)? " size=".$this->form_fields[$i]['size']." style='width:100%;'>" : " style='width:100%;'>"; while(list($key,$val)=each($this->form_fields[$i]['values']) ){ $str.="<option value='".$key."'"; $str.=($val['selected'])? " selected>" : ">"; $str.=$val[$this->lang]."</option>"; } $str.="</select>"; $str.="</td></tr>"; break; case 'radio': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]; if($this->form_fields[$i]['obligation']){ $this->form_check.=" && (f.elements['".$this->form_fields[$i]['name']."'].value!='".$this->form_fields[$i]['value']."')"; $str.="&nbsp;*</td><td>"; }else $str.="</td><td>"; while(list($key,$val)=each($this->form_fields[$i]['values']) ){ $str.="<input type=radio name='".$this->form_fields[$i]['name']."' value='".$key."'"; $str.=($val['checked'])? " checked>&nbsp;" : ">&nbsp;"; $str.=$val[$this->lang]."<br>"; } $str.="</td></tr>"; break; case 'comment': $str.="<tr bgcolor=$bg><td class=doc colspan=2>"; $str.=$this->form_fields[$i][$this->lang]; $str.="</td></tr>"; break; case 'file': $str.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; $str.="<input type=file name='".$this->form_fields[$i]['name']."' style='width:100%;'>"; $str.="</td></tr>"; break; case 'submit': $str.="<tr bgcolor=$bg><td class=doc colspan=2>".$this->form_fields[$i][$this->lang]; $str.="<input type=submit name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value_'.$this->lang]."'>"; $str.="</td></tr>"; break; case 'reset': $str.="<tr bgcolor=$bg><td class=doc colspan=2>".$this->form_fields[$i][$this->lang]; $str.="<input type=reset name='".$this->form_fields[$i]['name']."' value='".$this->form_fields[$i]['value_'.$this->lang]."'>"; $str.="</td></tr>"; break; case 'image'; default: break; } } $str.="<tr bgcolor=#cccccc><td colspan=2 align=center><input type=submit name=ok value='Ok'></td></tr></table>"; $str.="</td></tr></table><br>"; $str.="</p></form>"; if($this->form_check!="true"){ if($this->lang=='ru'){ $str.="<p><span class=doc>* - обязательны для заполнения</span></p>"; }else{ $str.="<p><span class=doc>* - are obligatory for filling</span></p>"; } $str.="<script><!--".CRLF; $str.="var f=document.forms['fomer'];".CRLF; $str.="function check(){".CRLF; $str.=" if(".$this->form_check."){".CRLF; $str.=" f.submit();".CRLF; $str.=" return true;".CRLF; $str.="}else{".CRLF; if($this->lang=='ru'){ $str.=" alert('Обязательные поля для заполнения обозначены звёздочкой!');".CRLF; }else{ $str.=" alert('The obligatory fields for filling are marked by an asterisk!');".CRLF; } $str.=" return false;".CRLF; $str.="}}".CRLF; $str.="//--></script>"; } return $str; } /**************************************************************************************/ //convert plain text into html specialchars //private string function htmlspecial($str){ $str=htmlspecialchars(stripslashes($str)); $str=ereg_replace("\n","<br>",$str); return $str; } /**************************************************************************************/ //make anwer string as html table //private string function make_html_table(){ global $HTTP_POST_FILES,$PATH_TRANSLATED,$SERVER_NAME,$PHP_SELF; $this->answer ="<p><table width=510 border=0 cellspacing=0 cellpadding=1 bgcolor=#cccccc><tr><td>"; $this->answer.="<table width=100% border=0 cellspacing=0 cellpadding=3 bgcolor=#ffffff>"; $this->answer.="<tr bgcolor=#cccccc><td colspan=2><b>".$this->title[$this->lang]."</b></td></tr>"; //<img src='".LEVEL."images/arrow-down-blue.gif' width=16 height=16 align=right> $this->answer.="<tr><td width=30%></td><td width=*></td></tr>"; for($i=0;$i<count($this->form_fields);$i++){ $bg=($i%2)? "#eeeeee" : "#ffffff"; switch($this->form_fields[$i]['type']){ case 'text': case 'textarea': $this->answer.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; $this->answer.=$this->htmlspecial( $GLOBALS[$this->form_fields[$i]['name']] ); $this->answer.="</td></tr>"; break; case 'select': $this->answer.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; if( is_array($GLOBALS[$this->form_fields[$i]['name']]) ){ for($j=0;$j<count($GLOBALS[$this->form_fields[$i]['name']]);$j++){ $this->answer.=$this->form_fields[$i]['values'][ $GLOBALS[$this->form_fields[$i]['name']][$j] ][$this->lang]."<br>"; } }else{ $this->answer.=$this->form_fields[$i]['values'][ $GLOBALS[$this->form_fields[$i]['name']] ][$this->lang]; } $this->answer.="</td></tr>"; break; case 'radio': $this->answer.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; $this->answer.=$this->form_fields[$i]['values'][ $GLOBALS[$this->form_fields[$i]['name']] ][$this->lang]; $this->answer.="</td></tr>"; break; case 'checkbox': if($GLOBALS[$this->form_fields[$i]['name']]=="on"){ $this->answer.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; $this->answer.=$this->form_fields[$i]['value']; $this->answer.="</td></tr>"; } break; case 'file': if($this->is_file_uploaded($HTTP_POST_FILES[ $this->form_fields[$i]['name'] ]['tmp_name'])){ $this->form_fields[$i]['tmp_name']=$HTTP_POST_FILES[ $this->form_fields[$i]['name'] ]['tmp_name']; $this->form_fields[$i]['post_name']=$HTTP_POST_FILES[ $this->form_fields[$i]['name'] ]['name']; $this->form_fields[$i]['post_type']=$HTTP_POST_FILES[ $this->form_fields[$i]['name'] ]['type']; $this->form_fields[$i]['post_size']=$HTTP_POST_FILES[ $this->form_fields[$i]['name'] ]['size']; $this->form_fields[$i]['move_into']=dirname($PATH_TRANSLATED)."/".$this->form_fields[$i]['post_name']; $this->answer.="<tr bgcolor=$bg><td class=doc>".$this->form_fields[$i][$this->lang]."</td><td>"; if( !eregi($this->form_fields[$i]['filetypes'], $this->form_fields[$i]['post_type'] ) ){ $this->answer.="Image type uncorrect</td></tr>"; break; }elseif($this->form_fields[$i]['post_size'] > $this->form_fields[$i]['filesize']){ $this->answer.="Image size exceed maximum</td></tr>"; break; }else{ @$this->move($this->form_fields[$i]['tmp_name'], $this->form_fields[$i]['move_into']); $img="img.php?id=".$this->encrypt($this->form_fields[$i]['post_name'])."&name=".urlencode($this->form_fields[$i]['post_name']); $this->add_html_image("".$this->form_fields[$i]['post_name'], $img, $this->form_fields[$i]['post_type']); $this->answer.="<img src='".$img."' alt='"; $this->answer.="name: ".$this->form_fields[$i]['post_name']."\n"; $this->answer.="size: ".$this->form_fields[$i]['post_size']."\n"; $this->answer.="type: ".$this->form_fields[$i]['post_type']; $this->answer.="'><br>"; $this->answer.="</td></tr>"; } //$this->del($this->form_fields[$i]['move_into']); } break; case 'hidden': case 'password': case 'submit': case 'reset': case 'image': default: break; } } $this->answer.="</table></td></tr></table></p>"; } /**************************************************************************************/ //send e-mail message //public void function send_form($to,$subject=''){ $this->add_html($this->answer, ""); $this->build_message(); $this->send($to, "you@email.adress", $subject); } /**************************************************************************************/ //is really file uploaded from remote computer //private boolean function is_file_uploaded($filename) { if(function_exists(is_uploaded_file))return is_uploaded_file($filename); else{ if(!$tmp_dir=get_cfg_var('upload_tmp_dir'))$tmp_dir=dirname(tempnam('','')); $tmp_file=$tmp_dir.'/'.basename($filename); if(WIN) return (ereg_replace('/+','',$tmp_file)==$filename); else return (ereg_replace('/+','/',$tmp_file)==$filename); } } /**************************************************************************************/ var $challenge="secret string"; function validate_param($param,$response){ $param=$this->decrypt($param); $response=$this->decrypt($response); $exspected_response = md5($param.":".$this->challenge); return $exspected_response == $response; } /**************************************************************************************/ function encrypt($str){ return urlencode(md5($str.":".$this->challenge)); } /**************************************************************************************/ function decrypt($str){ return urldecode($str); } /**************************************************************************************/ //public string function mime_types($file){ switch(strtolower(ereg_replace("^(.+)([\.])(.+)$","\\3",$file))){ case "bmp": $mime="image/bmp"; break; case "gif": $mime="image/gif"; break; case "jpeg": case "jpg": case "jpe": $mime="image/pjpeg"; break; case "png": $mime="image/png"; break; } return $mime; } /**************************************************************************************/ //public boolean function read_file($file){ @set_time_limit(600); header("Content-type: ".$this->mime_types($file)); header("Pragma: no-cache"); header("Expires: 0"); readfile($file); } /**************************************************************************************/ //move file on a server //public boolean function move($from,$to){ //if(!file_exists($from) || file_exists($to)) return false; else if(!rename($from,$to)) return false; return true; } /**************************************************************************************/ //delete file //public boolean function del($file){ if(!file_exists($file)){ return false; }elseif(is_file($file)){ if(!unlink($file)) return false; } return true; } /**************************************************************************************/ }//end class ################################################################################################ ?>