Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Crear nueva variable PHP

Estas en el tema de Crear nueva variable PHP en el foro de PHP en Foros del Web. Buenos días, Soy novato en PHP y HTML y estoy creando un formulario de contacto. Me ha funcionado perfectamente hasta que he intentado crear una ...
  #1 (permalink)  
Antiguo 13/06/2014, 05:12
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Crear nueva variable PHP

Buenos días,

Soy novato en PHP y HTML y estoy creando un formulario de contacto.
Me ha funcionado perfectamente hasta que he intentado crear una nueva variable (teléfono), no sé por qué motivo esta variable queda vacía y no me la envía a mi correo.

Este es el código del formulario:

<form method="post" action="contact2.php" class="form contact-form">
<fieldset>
<h3>Formulari de contacte</h3>
<div id="message"></div>
<div class="formRow">
<div class="textField"><input type="text" name="contact-name" id="name" placeholder="El seu nom ..." /></div>
</div>

<div class="formRow">
<div class="textField"><input type="text" name="contact-email" id="email" placeholder="El seu email ..." /></div>
</div>

<div class="formRow">
<div class="textField"><input type="text" name="contact-telf" id="telf" placeholder="El seu telèfon ..." /></div>
</div>

<div class="formRow">
<div class="textField"><textarea cols="20" name="contact-comment" id="comment" rows="4" placeholder="Comentari o suggeriment ..."></textarea></div>
</div>

<div class="formRow">
<button class="btnGreen btn submit right">
<span>Enviar</span>
</button>

</div>
</fieldset>
</form>


Y este es el PHP:


?php

if(!$_POST) exit;

// Email address verification, do not edit.
function isEmail($email) {
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|a s|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn |bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|c l|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk| dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|f o|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs |gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|in t|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr| kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md |me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mus eum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|n o|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn |pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se| sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td |tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|u k|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu| za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$name = $_POST['name'];
$email = $_POST['email'];
$comment = $_POST['comment'];
$telf = $_POST['telf'];



if(trim($name) == '') {
echo '<div class="error_message">Atenció! Introdueixi el seu nom.</div>';
exit();
} else if(trim($email) == '') {
echo '<div class="error_message">Atenció! Introdueixi un adreça de mail vàlida.</div>';
exit();
} else if(!isEmail($email)) {
echo '<div class="error_message">Atenció! Introdueixi una adreça de mail vàlida.</div>';
exit();
}

if(trim($comment) == '') {
echo '<div class="error_message">Atenció! Introdueixi el seu missatge.</div>';
exit();
}

if(get_magic_quotes_gpc()) {
$comment = stripslashes($comment);
}


// Configuration option.
// Enter the email address that you want to emails to be sent to.
// Example $address = "[email protected]";

//$address = "[email protected]";
$address = "[email protected]";


// Configuration option.
// i.e. The standard subject will appear as, "You've been contacted by John Doe."

// Example, $e_subject = '$name . ' has contacted you via Your Website.';

$e_subject = 'Contacte de ' . $name . '.';


// Configuration option.
// You can change this if you feel that you need to.
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.

$e_body = "Contacte de $name" . PHP_EOL . PHP_EOL;
$e_content = "\"$comment\"" . PHP_EOL . PHP_EOL;
$e_reply = "Contacti a $name via email: $email o $telf";

$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

// Email has sent successfully, echo a success page.

echo "<div class='ok_message'><p>Gràcies, <strong>$name</strong>, el seu missatge ha estat enviat.</p></div>";

} else {

echo '<div class="error_message">ERROR!</div>';

}

Como os decía, funciona perfectamente con las variables $name, $address y $comment. Pero $telf siempre me queda vacía y no me la incluye en el mensaje, no entiendo por qué!

A ver si alguien me puede echar una mano.

¡Muchas gracias!
  #2 (permalink)  
Antiguo 13/06/2014, 08:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Crear nueva variable PHP

Los "name" de tus input son los nombres que debes de recoger usando $_POST, si revisas tu formulario, estos son diferentes (empiezan con "contact-") quita eso y los vas a poder recoger bien del lado de PHP .
  #3 (permalink)  
Antiguo 13/06/2014, 08:13
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Crear nueva variable PHP

Por favor, el código envuélvelo entre las etiquetas PHP del menú desplegable Highlight que aparece cuando redactas un mensaje. Eso ayuda a leer el código.

Tienes lo siguiente

Código PHP:
Ver original
  1. $name = $_POST['name'];
  2. $email = $_POST['email'];
  3. $comment = $_POST['comment'];
  4. $telf = $_POST['telf'];

Pero en el formulario tienes names de claves para el array POST distintos de los que intentas recoger, como resultado recogerás NULL, el array POST existe, pero esas claves no existen y su contenido es NULL.

Código HTML:
Ver original
  1. <div class="textField"><input type="text" name="contact-name" id="name" placeholder="El seu nom ..." /></div>
  2.  
  3. <div class="textField"><input type="text" name="contact-email" id="email" placeholder="El seu email ..." /></div>
  4.  
  5. <div class="textField"><input type="text" name="contact-telf" id="telf" placeholder="El seu telèfon ..." /></div>
  6.  
  7. <div class="textField"><textarea cols="20" name="contact-comment" id="comment" rows="4" placeholder="Comentari o suggeriment ..."></textarea></div>
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 14/06/2014, 03:43
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Crear nueva variable PHP

Muchas gracias por vuestras respuestas. He hecho el cambio en los "name" y la variable $telf sigue siendo nula.

Sin embargo, esto no explica por qué anteriormente las tres variables $name $address y $comment funcionaban bien.

He eliminado la clase del formulario (form contact-form):

Código HTML:
Ver original
  1. <form method="post" action="contact2.php" class="form contact-form">

Y me ha funcionado correctamente con todas las variables, aunque la respuesta final al usuario que rellena el formulario no aparece como debiera. Normalmente aparece un borde verde sobre el formulario que da el mensaje de ok o el de error. Al quitar la clase form se envían correctamente todas las variables pero el mensaje de ok/error lo da en una página en blanco.

Esto me ha hecho sospechar que el problema tenga algo que ver con la hoja de estilos. ¿Es posible que el .css controle alguno de estos parámetros?

Estas son las partes del CSS que afectan al form:

Código CSS:
Ver original
  1. form,
  2.     fieldset {
  3.         padding:0;
  4.         margin:0;
  5.         border:0;
  6.     }
  7.  
  8.  
  9.  
  10. #message p{margin: 0;}
  11.     .error_message{
  12.         padding: 5px 10px!important;
  13.         border-width: 2px !important;
  14.         background:rgba(247,0,0,0.5) !important;
  15.         margin: 0 0 15px;
  16.     }
  17.     .ok_message{
  18.         padding: 10px 15px!important;
  19.         background:rgba(57,143,20,0.5) !important;
  20.         margin: 0 0 15px;
  21.     }
  22.  
  23.  
  24. .formRow{
  25.         width:100%;
  26.         margin:0 0 1.5em;
  27.     }
  28.     .formRow:after{
  29.         content:"";
  30.         display:block;
  31.         clear:both;
  32.     }
  33.     .textField{
  34.         width:100%;
  35.         overflow:hidden;
  36.         border:1px solid #505a68;
  37.         background:#798493;
  38.         font-weight:bold;
  39.         padding:0.5em;
  40.        
  41.         -webkit-border-radius: 2em;
  42.         -moz-border-radius: 2em;
  43.         border-radius: 2em;
  44.                
  45.         -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
  46.         -moz-box-sizing: border-box;    /* Firefox, other Gecko */
  47.         box-sizing: border-box;
  48.        
  49.         -moz-box-shadow:    0 1px 1px rgba(255,255,255,0.36);
  50.         -webkit-box-shadow: 0 1px 1px rgba(255,255,255,0.36);
  51.         box-shadow:         0 1px 1px rgba(255,255,255,0.36);
  52.     }
  53.     input,
  54.     textarea{
  55.         display:block;
  56.         background:#fff;
  57.         font:1em/1.214em Arial, Helvetica, sans-serif;  /*14px/17px*/
  58.         color:#444;
  59.         width:100%;
  60.         padding:0.75em 1.5em;
  61.         border:1px solid #505762;
  62.         margin:0;
  63.        
  64.         resize:none;
  65.        
  66.         -moz-box-shadow:    inset 0 0px 3px rgba(0,0,0,0.75);
  67.         -webkit-box-shadow: inset 0 0px 3px rgba(0,0,0,0.75);
  68.         box-shadow:         inset 0 0px 3px rgba(0,0,0,0.75);
  69.        
  70.         -webkit-border-radius: 1.5em;
  71.         -moz-border-radius: 1.5em;
  72.         border-radius: 1.5em;
  73.                
  74.         -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
  75.         -moz-box-sizing: border-box;    /* Firefox, other Gecko */
  76.         box-sizing: border-box;         /* Opera/IE 8+ */
  77.     }
  78.     textarea {
  79.         overflow:auto;
  80.         height:10.812em;
  81.     }
  82.     * +html input,
  83.     * +html textarea,
  84.     * +html .textField{
  85.         width:99%;
  86.         padding:0;
  87.     }
  88.     ::-webkit-input-placeholder {
  89.         color:    #444;
  90.     }
  91.     :-moz-placeholder {
  92.         color:    #444;
  93.     }


Perdonad por el desorden. He sacado del CSS las partes que creo que afectan a las etiquetas del formulario, pero es posible que haya alguna que no haya adjuntado.

Muchas gracias de nuevo.

¡Saludos!
  #5 (permalink)  
Antiguo 14/06/2014, 06:51
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Crear nueva variable PHP

Hola de nuevo,

Muchas gracias por vuestra ayuda. Ya he resuelto el problema. Resulta que había un js con este trozo de código:

Código Javascript:
Ver original
  1. jQuery.post(action, {
  2.         name: $('#name').val(),
  3.         email: $('#email').val(),
  4.         comment: $('#comment').val(),
  5.                
  6.     },

Y esto es lo que controlaba las variables aceptadas, y el $telf me lo rechazaba. Añadiendo:

Código Javascript:
Ver original
  1. telf: $('#telf').val(),

se ha resuelto y ahora acepta la nueva variable y no estropea la respuesta de ok/error al formulario.

Gracias por vuestra ayuda y hasta pronto. Es la primera vez que participo en este foro y lo seguiré haciendo.

¡Saludos!
  #6 (permalink)  
Antiguo 14/06/2014, 07:16
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Crear nueva variable PHP

Cita:
Iniciado por sergi_ruiz Ver Mensaje
Muchas gracias por vuestras respuestas. He hecho el cambio en los "name" y la variable $telf sigue siendo nula.

Sin embargo, esto no explica por qué anteriormente las tres variables $name $address y $comment funcionaban bien.
Porque seguramente cambiastes los nombres de las variables que recogías en PHP y no en el formulario, dando la sensación errónea de que lo que nos mostrastes sí te funcionaba, pero no es así, es imposible indicar que recoges $_POST['name'] mientras que en el formulario la clave es contact-name.

Cita:

He eliminado la clase del formulario (form contact-form):

Código HTML:
Ver original
  1. <form method="post" action="contact2.php" class="form contact-form">

Y me ha funcionado correctamente con todas las variables, aunque la respuesta final al usuario que rellena el formulario no aparece como debiera. Normalmente aparece un borde verde sobre el formulario que da el mensaje de ok o el de error. Al quitar la clase form se envían correctamente todas las variables pero el mensaje de ok/error lo da en una página en blanco.

Esto me ha hecho sospechar que el problema tenga algo que ver con la hoja de estilos. ¿Es posible que el .css controle alguno de estos parámetros?

Estas son las partes del CSS que afectan al form:

Código CSS:
Ver original
  1. form,
  2.     fieldset {
  3.         padding:0;
  4.         margin:0;
  5.         border:0;
  6.     }
  7.  
  8.  
  9.  
  10. #message p{margin: 0;}
  11.     .error_message{
  12.         padding: 5px 10px!important;
  13.         border-width: 2px !important;
  14.         background:rgba(247,0,0,0.5) !important;
  15.         margin: 0 0 15px;
  16.     }
  17.     .ok_message{
  18.         padding: 10px 15px!important;
  19.         background:rgba(57,143,20,0.5) !important;
  20.         margin: 0 0 15px;
  21.     }
  22.  
  23.  
  24. .formRow{
  25.         width:100%;
  26.         margin:0 0 1.5em;
  27.     }
  28.     .formRow:after{
  29.         content:"";
  30.         display:block;
  31.         clear:both;
  32.     }
  33.     .textField{
  34.         width:100%;
  35.         overflow:hidden;
  36.         border:1px solid #505a68;
  37.         background:#798493;
  38.         font-weight:bold;
  39.         padding:0.5em;
  40.        
  41.         -webkit-border-radius: 2em;
  42.         -moz-border-radius: 2em;
  43.         border-radius: 2em;
  44.                
  45.         -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
  46.         -moz-box-sizing: border-box;    /* Firefox, other Gecko */
  47.         box-sizing: border-box;
  48.        
  49.         -moz-box-shadow:    0 1px 1px rgba(255,255,255,0.36);
  50.         -webkit-box-shadow: 0 1px 1px rgba(255,255,255,0.36);
  51.         box-shadow:         0 1px 1px rgba(255,255,255,0.36);
  52.     }
  53.     input,
  54.     textarea{
  55.         display:block;
  56.         background:#fff;
  57.         font:1em/1.214em Arial, Helvetica, sans-serif;  /*14px/17px*/
  58.         color:#444;
  59.         width:100%;
  60.         padding:0.75em 1.5em;
  61.         border:1px solid #505762;
  62.         margin:0;
  63.        
  64.         resize:none;
  65.        
  66.         -moz-box-shadow:    inset 0 0px 3px rgba(0,0,0,0.75);
  67.         -webkit-box-shadow: inset 0 0px 3px rgba(0,0,0,0.75);
  68.         box-shadow:         inset 0 0px 3px rgba(0,0,0,0.75);
  69.        
  70.         -webkit-border-radius: 1.5em;
  71.         -moz-border-radius: 1.5em;
  72.         border-radius: 1.5em;
  73.                
  74.         -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
  75.         -moz-box-sizing: border-box;    /* Firefox, other Gecko */
  76.         box-sizing: border-box;         /* Opera/IE 8+ */
  77.     }
  78.     textarea {
  79.         overflow:auto;
  80.         height:10.812em;
  81.     }
  82.     * +html input,
  83.     * +html textarea,
  84.     * +html .textField{
  85.         width:99%;
  86.         padding:0;
  87.     }
  88.     ::-webkit-input-placeholder {
  89.         color:    #444;
  90.     }
  91.     :-moz-placeholder {
  92.         color:    #444;
  93.     }


Perdonad por el desorden. He sacado del CSS las partes que creo que afectan a las etiquetas del formulario, pero es posible que haya alguna que no haya adjuntado.

Muchas gracias de nuevo.

¡Saludos!
CSS es para dar estilos, no afecta a las variables GET y POST. De echo hasta donde sé, no afecta a ninguna variable entre el usuario y el servidor y ni del lado del usuario ni del lado del servidor.

un <form> no admite class como atributo. Supongo que la lógica está en que un formulario es único o por lo menos no se debería mostrar más de 1 vez en una misma recogida de datos por parte del usuario. Para dar estilo a un form utiliza el atributo ID y en CSS lo especificas así

Código CSS:
Ver original
  1. #id_del_form{
  2. //estilos para el form
  3. }

Otro apunte, dudo mucho que un nombre de cualquier atributo que contenga espacios funcione en HTML. Eso provocará que el formulario no funcione correctamente o, lo más probable, que no funcione en absoluto.

Saludos.
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: formulario, html, variable
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 21:52.