Foros del Web » Programando para Internet » PHP »

Problema con un formulario

Estas en el tema de Problema con un formulario en el foro de PHP en Foros del Web. Hola a todos. Bueno pues tengo un problema con este formulario. No quiere funcionar. Supuestamente debes de rellenar todos los campos con un *, sino ...
  #1 (permalink)  
Antiguo 17/10/2012, 15:17
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Problema con un formulario

Hola a todos. Bueno pues tengo un problema con este formulario. No quiere funcionar. Supuestamente debes de rellenar todos los campos con un *, sino debería devolverte con una franja roja los campos que no has rellenado. Pero nada no quiere ir. La cosa me esta trayendo de cabeza por que no consigo ver el error.
La verdad es que estoy aprendiendo PHP y no se ya que hacer. Si lo ejecutas, solo falla los campos de Firstname, Lastname, Yourgender. Los campos de password y el texto que hay debajo de Membership Form si funcionan. Sale resaltados de color si no rellenan.
Y si rellenas todos los campos si se envía el formulario.
Osea el fallo esta en: Firstname, Lastname, Yourgender. Debe ser que el codigo esta mal construido. Algo que no se, seguro. Os dejo el script a ver si me podeis ayudar:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
			<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
			
			
	<head>
	<title>Membership Form</title>
	<link rel="stylesheet" type="text/css" href="common.css">
	<style type="text/css">
		.error { background: #90EE90; color: white; padding: 0.2em;}
		</style>
	
	</head>
	 
	<body>
	
	<?php
	
	
		if ( isset ( $_POST["submitbutton"] ) ) {
			processform ();
			} else {
				displayform ( array() );
				}
				
		function validatefield ( $fieldname, $missingfields ) {
			if ( in_array( $fieldname, $missingfields ) ) {
			 echo   ' class id="error" ';
			 }	
			 	}
			 	
		function setvalue ( $fieldname ) {
			if ( isset ( $_POST[$fieldname] ) ) {
				echo $_POST[$fieldname];
				}
						}
						
		function setchecked ( $fieldname, $fieldvalue )  {
			if ( isset ( $_POST[$fieldname]) and $_POST[$fieldname] == $fieldvalue) {
				echo ' checked="checked" ' ;
				}
					}
					
		function setselected ( $fieldname, $fieldvalue ) {
			if ( isset ( $_POST[$fieldname] ) and $_POST[$fieldname] == $fieldvalue ) {
				echo ' selected="selected" ' ;
				}
				}
				
				
		function processform () {
			$requiredfields = array ("firstname", "lastname", "password1", "password2", "gender" );
				$missingfields = array ();
				
		foreach ( $requiredfields as $requiredfield ) {
			if ( !isset ( $_POST[$requiredfield]) or !$_POST[$requiredfield] ) {
				$missingfields[] = $requiredfield;
				}
					}
					
		if ($missingfields) {
			displayform ($missingfields);
				} else {
					displaythanks ();
					
				}
						}
							 
		
		function displayform ($missingfields) {
		
		?>
	
		<h1>Membersship Form</h1>
		
		<?php if ( $missingfields ) { ?>
		
		<p class="error">There were some problems with the form you submitted.
		Please complete the fields highlighted below and click Send Details to 
		resend the form.</p>
		
		<?php } else { ?>
		
		<p>Thanks for choosing to join The Widget Club. To register, please fill
		in your details below and click Send Details. Fields marked with an
		asterisk (*) are requiered. </p>
		
		<?php } ?>
		
		
		<form action="registration.php" method="post">
		<div style="width: 30em;">
		
		// yo creo que el eror esta apartir de firstname 
		
			<label for="firstname" <?php validatefield ( "firstname", $missingfields ) ?> > First name * </label>
			<input type="text" name="firstname" id="firstname" value="<?php setvalue("firstname") ?>" />
			
			<label for="lastname"<?php validatefield ("lastname", $missingfields ) ?>> Last name * </label>
			<input type="text" name="lastname" id="lastname" value="<?php setvalue ("lastname") ?> "/>
			
			<label for="password1"<?php if ($missingfields) echo ' class="error" ' ?>> Choose a password *</label>
			<input type="password" name="password1" id="password1" value="" />
		 	<label for="password2"<?php if ($missingfields) echo ' class="error" ' ?>> Retype password *</label>
			<input type="password" name="password2" id="password2" value="" />
			
			<label <?php validatefield ("gender", $missingfields ) ?> > Your gender: * </label>
			<label for="gendermale">Male</label>
			<input type="radio" name="gender" id="gendermale" value="M"<?php setchecked ("gender" , "M" ) ?> />
			<label for="genderfemale">Female</label>
			<input type="radio" name="gender" id="gendermale" value="F"<?php setchecked ("gender" , "F") ?> />
			
			<label for="favoritewidget">What's your favorite widget? * </label>
			<select name="favoritewidget" id="favoritewidget" size="1">
				<option value="superwidget"<?php setselected ("favoritewidget", "superwidget") ?>> The Superwidget</option>
				<option value="megawidget" <?php setselected ("favoritewidget", "megawidget" ) ?>> The Megawidget</option>
				<option value="wonderwidget"<?php setselected ("favoritewidget", "wonderwidget") ?>> The Wonderwidget</option>
				</select>
				
			<label for="newsletter">Do you want to receive our newsletter? </label>
			<input type="checkbox" name="newsletter" id="newsletter" value="yes" <?php setchecked ("newsletter", "yes" ) ?> />
			
			<label for="comments">Any comments?</label>
			<textarea name="comments" id="comments" rows="4" cols="250"><?php setvalue ("comments") ?></textarea>
			
			
			<div style="clear:both;">
				<input type="submit" name="submitbutton" id="submitbutton" value="Send Details" />
				<input type="reset" name="resetbutton" id="resetbutton" value="Reset Form" style="margin-right: 20px;" />
				
				</div>
				
					</div>
					
						</form>
						
							<?php
							
			}
			
			function displayThanks() {
			
			?>
			
					<h1>Thank You</h1>
					<p>Thank you, your applicaton has been received.</p>
					<?php
					}
					?>
					
								</body>
								
									</html>
Agradecería cualquíer ayuda.
  #2 (permalink)  
Antiguo 17/10/2012, 21:08
Avatar de cmarti  
Fecha de Ingreso: noviembre-2003
Ubicación: Buenos Aires - Argentina
Mensajes: 442
Antigüedad: 20 años, 5 meses
Puntos: 1
Respuesta: Problema con un formulario

disculpa que me meta en tu post pero no te convendría mas administrar las "ausencias" de un formulario directamente con JavaScript. Hay infinidad de ejemplos en la web. Yo he tenido (de hecho tengo) varios problemas a la hora de validar "situaciones" de un form bajo php siendo que con JavaScript es mucho más fácil. Por qué no le hechas una mirada a JavaScript googleando por ejemplo... validaciones en JavaScript. Suerte.
__________________
When all else is lost the future still remains.
  #3 (permalink)  
Antiguo 18/10/2012, 13:10
 
Fecha de Ingreso: marzo-2010
Mensajes: 30
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Problema con un formulario

Hola cmarti, tienes razón pero estoy empezando con esto de PHP y es un ejercicio que tengo que hacer. Había un par de errores que he corregído como:

Código PHP:
function validatefield $fieldname$missingfields ) {
            if ( 
in_array$fieldname$missingfields ) ) {
                  echo  
' class id="error" ';
            }
        } 
Le quite el id. Ahorra me funciona todo menos el campo lastname. No se por que. El codigo lo deje asi:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
            
            
    <head>
    <title>Membership Form</title>
    <link rel="stylesheet" type="text/css" href="common.css">
    <style type="text/css">
        .error { background: #90EE90; color: white; padding: 0.2em;}
        </style>
    
    </head>
     
    <body>
    
    <?php
    
    
        
if ( isset ( $_POST["submitbutton"] ) ) {
            
processform ();
            } else {
                
displayform ( array() );
                }
                
        function 
validatefield $fieldname$missingfields ) {
            if ( 
in_array$fieldname$missingfields ) ) {
             echo   
' class="error" ';
             }    
                 }
                 
        function 
setvalue $fieldname ) {
            if ( isset ( 
$_POST[$fieldname] ) ) {
                echo 
$_POST[$fieldname];
                }
                        }
                        
        function 
setchecked $fieldname$fieldvalue )  {
            if ( isset ( 
$_POST[$fieldname]) and $_POST[$fieldname] == $fieldvalue) {
                echo 
' checked="checked" ' ;
                }
                    }
                    
        function 
setselected $fieldname$fieldvalue ) {
            if ( isset ( 
$_POST[$fieldname] ) and $_POST[$fieldname] == $fieldvalue ) {
                echo 
' selected="selected" ' ;
                }
                }
                
                
        function 
processform () {
            
$requiredfields = array ("firstname""lastname""password1""password2""gender" );
                
$missingfields = array ();
                
        foreach ( 
$requiredfields as $requiredfield ) {
            if ( !isset ( 
$_POST[$requiredfield]) or !$_POST[$requiredfield] ) {
                
$missingfields[] = $requiredfield;
                }
                    }
                    
        if (
$missingfields) {
            
displayform ($missingfields);
                } else {
                    
displaythanks ();
                    
                }
                        }
                             
        
        function 
displayform ($missingfields) {
        
        
?>
    
        <h1>Membersship Form</h1>
        
        <?php if ( $missingfields ) { ?>
        
        <p class="error">There were some problems with the form you submitted.
        Please complete the fields highlighted below and click Send Details to 
        resend the form.</p>
        
        <?php } else { ?>
        
        <p>Thanks for choosing to join The Widget Club. To register, please fill
        in your details below and click Send Details. Fields marked with an
        asterisk (*) are requiered. </p>
        
        <?php ?>
        
        
        <form action="registration.php" method="post">
        <div style="width: 30em;">
        
        
        
            <label for="firstname" <?php validatefield "firstname"$missingfields ?> > First name * </label>
            <input type="text" name="firstname" id="firstname" value="<?php setvalue("firstname"?>" />
            
            <label for="lastname" <?php validatefield ("lastname"$missingfields ?> > Last name * </label>
            <input type="text" name="lastname" id="lastname" value="<?php setvalue ("lastname"?> "/>
            
            <label for="password1"<?php if ($missingfields) echo ' class="error" ' ?>> Choose a password *</label>
            <input type="password" name="password1" id="password1" value="" />
             <label for="password2"<?php if ($missingfields) echo ' class="error" ' ?>> Retype password *</label>
            <input type="password" name="password2" id="password2" value="" />
            
            <label <?php validatefield ("gender"$missingfields ?> > Your gender: * </label>
            <label for="gendermale">Male</label>
            <input type="radio" name="gender" id="gendermale" value="M"<?php setchecked ("gender" "M" ?> />
            <label for="genderfemale">Female</label>
            <input type="radio" name="gender" id="gendermale" value="F"<?php setchecked ("gender" "F"?> />
            
            <label for="favoritewidget">What's your favorite widget? * </label>
            <select name="favoritewidget" id="favoritewidget" size="1">
                <option value="superwidget"<?php setselected ("favoritewidget""superwidget"?>> The Superwidget</option>
                <option value="megawidget" <?php setselected ("favoritewidget""megawidget" ?>> The Megawidget</option>
                <option value="wonderwidget"<?php setselected ("favoritewidget""wonderwidget"?>> The Wonderwidget</option>
                </select>
                
            <label for="newsletter">Do you want to receive our newsletter? </label>
            <input type="checkbox" name="newsletter" id="newsletter" value="yes" <?php setchecked ("newsletter""yes" ?> />
            
            <label for="comments">Any comments?</label>
            <textarea name="comments" id="comments" rows="4" cols="250"><?php setvalue ("comments"?></textarea>
            
            
            <div style="clear:both;">
                <input type="submit" name="submitbutton" id="submitbutton" value="Send Details" />
                <input type="reset" name="resetbutton" id="resetbutton" value="Reset Form" style="margin-right: 20px;" />
                
                </div>
                
                    </div>
                    
                        </form>
                        
                            <?php
                            
            
}
            
            function 
displayThanks() {
            
            
?>
            
                    <h1>Thank You</h1>
                    <p>Thank you, your applicaton has been received.</p>
                    <?php
                    
}
                    
?>
                    
                                </body>
                                
                                    </html>

Etiquetas: formulario, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:02.