php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.09.2007, 21:01  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard formmailer nur mit zusatzfunktion ohne notices verwendbar

ich habe mir einen kleinen aber feinen formmailer gemacht, welcher auch gut funktioniert. aber einen kleinen schönheitsfehler hat das ganze für mich. bei error_reporting(E_ALL), welches ich immer aktiviere, bekomme ich logischerweise beim ersten aufruf der seite notices da ja noch keine post variablen existieren und auch die zugehörigen errors nicht:
PHP-Code:
<?php

/**
 * form.php
 */

error_reporting(E_ALL);

/**
 * needed functions
 **/
function formerror($error$name) {
  
$ret $error === true '<font color="ff0000">'.$name.'</font>' $name.'';
  return 
$ret;
}

// required field
function required_field($value) {
  
$ret $value === '*' '';
  return 
$ret;
}

// define which fields should be checked
// 0 = not checked, 1 = checked
$ch_prename       1;  // prename
$ch_lastname      1;  // lastname

if (isset($_POST['submit'])) {
  
$error false;
  if(
$_POST['prename'] == '' && $ch_prename === 1) {
    
$error_prename true;
    
$error true;
  };
  if(
$_POST['lastname'] == '' && $ch_lastname === 1) {
    
$error_lastname true;
    
$error true;
  };
}

if (isset(
$error) AND $error === false) {
  echo 
'Formular OK';
} else {
  echo 
'<form action="form.php" method="post">';
  echo 
formerror($error_prename'Vorname:'.required_field($ch_prename)).'<input type="text" name="prename" value="'.$_POST['prename'].'">
'
;
  echo 
formerror($error_prename'Nachname:'.required_field($ch_prename)).'<input type="text" name="lastname" value="'.$_POST['lastname'].'">
'
;
  echo 
'<input type="submit" name="submit" value="Absenden">';
  echo 
'</form>';
};
?>
ich habe mir jetzt, aber recht unschön, mit einer zusatzfunktion beholfen:
PHP-Code:
<?php
function validateVar(&$var) {
  
$var = isset($var) ? $var false;
  return 
$var;
}

// modifizierte zeile 44:
echo formError(validateVar($error_prename), 'Vorname:'.requiredField($ch_prename)).'<input type="text" name="prename" value="'.validateVar($_POST['prename']).'">
'
;
?>
was anderes kann ich hier ja nicht machen ohne das ganze komplett umzustrukturieren oder (jaja... ich weiss... das ganze ist für profis natürlich nicht akzeptabel)?
__________________
mfg Alexander Haim
Promaetheus ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.09.2007, 22:42  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Alex,

eine Validierung darfst du natürlich immer erst dann vollziehen, wenn das Formular abgesendet ist. Alles andere macht keinen Sinn und vor allem mehr Arbeit. Dazu prüfe zunächst ab, ob das Formular gesendet ist und innerhalb des ifs validierst du dann. Das Validieren an sich würde ich auch mit einer Validator-Klasse standardisieren.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 20.09.2007, 23:05  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wenn ich den value für <input>-Tags setze, schreibe ich meist:
Code:
<input type="text" name="xy" value="<?=@$_POST["xy"]?>" />
eines der wenigen Male, bei denen ich @ verwende.

Ein <?=isset($_POST["xy"])?$_POST["xy"]:""?> ist da einfach zu unhandlich.
Zergling-new ist offline  
Alt 21.09.2007, 09:08  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

@zergling: danke. ich hatte mir immer strikt selbst verboten so etwas mit @ zu lösen. wenn aber auch profis das verwenden so könnte mich mir für das $_POST diese zusatzfunktion sparen.

@dr.e: hi christian. die validierung wird ja tatsächlich erst nach absenden des formulars durchgeführt. die funktion formError() ist nur dazu da zu schauen ob eben ein fehler vorliegt und dann einen roten text auszugeben anstatt des normalen. deshalb existiert die variable $xy_error ja leider noch nicht, da diese erst bei der validierung erzeugt wird. wie meinst du das mit der validatorklasse? ich wollte das ganze ja auch schon standardisieren, aber leider habe ich diese möglichkeit aufgrund der formerror() funktion wieder verworfen, denn ich erzeuge beim validieren ja eine variable $nameDesFeldes_error und diese kann ich nicht generisch erzeugen. ich könnte höchstens ein array $errorNames erzeugen und dieses dann im falle eines fehlers mit dem jeweiligen error füllen lassen. ich habe mal ein beispiel für die idee unten angehängt. allerdings muss ich hier doch wieder auf die @ version zurückgreifen.

so werde ich wohl doch bei meiner zusatzfunktion bleiben müssen.

PHP-Code:
<?php

/**
 * form.php
 */

error_reporting(E_ALL);

/**
 * needed functions
 **/
function formError($error$name) {
  
$ret $error === true '<font color="ff0000">'.$name.'</font>' $name.'';
  return 
$ret;
}

// required field
function requiredField($val) {
  
$ret $val === '*' '';
  return 
$ret;
}

$fields = array(
                
0  => array('Vorname',  1),
                
1  => array('Nachname'1)
               );
$fieldErrors = array();

if (isset(
$_POST['submit'])) {
  
$error false;
  for(
$i=0$i<count($fields); $i++) {
    list(
$name,$check) = $fields[$i];
    if(
$_POST[$name] == '' && $check == 1) {
      
$error true;
      
$fieldErrors[$name] = true;
    };
  }
}

if (isset(
$error) AND $error === false) {
  echo 
'Formular OK';
} else {
  echo 
'<form action="form.php" method="post">';
  for(
$i=0$i<count($fields); $i++) {
    list(
$name,$check) = $fields[$i];
    echo 
formError(@$fieldErrors[$name], $name), requiredField($check).'<input type="text" name="'.$name.'" value="'.@$_POST[$name].'">
'
;
  }
  echo 
'<input type="submit" name="submit" value="Absenden">';
  echo 
'</form>';
};
?>
__________________
mfg Alexander Haim
Promaetheus ist offline  
Alt 21.09.2007, 12:18  
Erfahrener Benutzer
 
Registriert seit: 07.11.2003
Beiträge: 526
Promaetheus
Standard

ich habe das ganze jetzt noch ein wenig generischer gemacht. jetzt muss man wirklich nur mehr den oberen array befüllen, der rest geht von selber:
PHP-Code:
<?php

/**
 * form.php
 */

error_reporting(E_ALL);

/**
 * configure fields
 * 
 * type:  text, checkbox, textarea, reset or submit
 * name:  fieldname also used as $_POST-index
 * check: 0 = fieldname invisible
 *        1 = fieldname visible & field errorchecked
 *        2 = fieldname visible but field not errorchecked
 **/
$fields = array(
                
0  => array('type'  => 'text',
                            
'name'  => 'Vorname',
                            
'check' => 1),
                
1  => array('type'  => 'text',
                            
'name'  => 'Nachname',
                            
'check' => 1),
                
2  => array('type'  => 'checkbox',
                            
'name'  => 'AGB',
                            
'check' => 2),
                
3  => array('type'  => 'textarea',
                            
'name'  => 'Nachricht',
                            
'check' => 1),
                
4  => array('type'  => 'reset',
                            
'name'  => 'Löschen',
                            
'check' => 0),
                
5  => array('type'  => 'submit',
                            
'name'  => 'Abschicken',
                            
'check' => 0)
               );

/**
 * needed functions
 **/
// formerror formats fieldname as error in case
function formError($error$name) {
  
$ret $error === true '<font color="ff0000">'.$name.'</font>' $name.'';
  return 
$ret;
}

// required field formats fieldname as required field in case
function requiredField($val) {
  
$ret $val === '*' '';
  return 
$ret;
}

// draw input field draws input field
function drawInputField($type$name$value=false$size=false$maxlength=false) {
  switch(
$type){
    case 
'reset':
    case 
'submit':
      
$ret sprintf(
                     
'<input type="%s" name="%s" value="%s">',
                     
$type,
                     
$type,
                     
$name
                     
);
       break;
    case 
'text':
      
$ret sprintf(
                     
'<input type="%s" name="%s" value="%s"%s>',
                     
$type,
                     
$name,
                     
$value,
                     
$size = isset($size) ? ' size="'.$size.'"' ''
                     
);
      break;
    case 
'checkbox':
      
$ret sprintf(
                     
'<input type="checkbox" name="%s" value="1"%s>',
                     
$name,
                     
$checked $value == '1' ' checked="checked"' ''
                     
);
      break;
    case 
'textarea':
      
$ret sprintf(
                     
'<textarea name="%s">%s</textarea>',
                     
$name,
                     
$value
                     
);
      break;
    default:
      
$ret false;
  } 
// switch
  
return $ret;
}

$fieldErrors = array();

if (isset(
$_POST['submit'])) {
  
$error false;
  for(
$i=0$i<count($fields); $i++) {
    
extract($fields[$i]);
    if(empty(
$_POST[$name]) && $check == 1) {
      
$error true;
      
$fieldErrors[$name] = true;
    };
  }
}

if (isset(
$error) AND $error === false) {
  echo 
'Formular OK

'
;
  echo 
'<pre>';print_r($_POST); echo '</pre>';
} else {
  echo 
'<form action="form.php" method="post">';
  for(
$i=0$i<count($fields); $i++) {
    
extract($fields[$i]);
    if(
$check) echo formError(@$fieldErrors[$name], $name), requiredField($check);
    echo 
'';
    echo 
drawInputField($type$name, @$_POST[$name]);
    echo 
'
'
;
  }
  echo 
'</form>';
};
?>
__________________
mfg Alexander Haim
Promaetheus ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Formmailer airkiller PHP Tipps 2008 9 15.07.2008 11:41
Formmailer lavey242 PHP Tipps 2006 5 06.05.2006 12:39
Formmailer geht bei der email zuschickung nicht richtig PHP Tipps 2005 2 02.06.2005 22:54
[Erledigt] Im Intranet einen Formmailer benutzen ?!?! Server, Hosting und Workstations 3 16.12.2004 21:47
[Erledigt] Intranet Formmailer Server, Hosting und Workstations 4 15.12.2004 12:34
[Erledigt] Formmailer anpassen PHP Tipps 2004 7 21.09.2004 10:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
how to define size in draw_inputfield php, draw_inputfield() size

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.