validar resueltos realiza metodo formularios formulario form ejercicios ejemplos ejemplo datos cómo con codigo captura php forms

resueltos - send form php



Cómo acceder a la variable ''nombre'' del formulario desde PHP (11)

Estoy tratando de crear una calculadora de IMC. Esto debería permitir a las personas usar medidas métricas o imperiales.

Me doy cuenta de que podría usar etiquetas ocultas para resolver mi problema, pero esto me ha molestado antes, así que pensé en preguntar: puedo usar $_POST[''variableName''] para encontrar el campo-valor de variable enviado; pero ... No sé, o veo, cómo verificar qué formulario se utilizó para enviar las variables.

Mi código está debajo (aunque no estoy seguro de que sea estrictamente relevante para la pregunta):

<?php $bmiSubmitted = $_POST[''bmiSubmitted'']; if (isset($bmiSubmitted)) { $height = $_POST[''height'']; $weight = $_POST[''weight'']; $bmi = floor($weight/($height*$height)); ?> <ul id="bmi"> <li>Weight (in kilograms) is: <span><?php echo "$weight"; ?></span></li> <li>Height (in metres) is: <span><?php echo "$height"; ?></span></li> <li>Body mass index (BMI) is: <span><?php echo "$bmi"; ?></span></li> </ul> <?php } else { ?> <div id="formSelector"> <ul> <li><a href="#metric">Metric</a></li> <li><a href="#imperial">Imperial</a></li> </ul> <form name="met" id="metric" action="<?php echo $_SERVER[''PHP_SELF'']; ?>" method="post" enctype="form/multipart"> <fieldset> <label for="weight">Weight (<abbr title="Kilograms">kg</abbr>):</label> <input type="text" name="weight" id="weight" /> <label for="height">Height (<abbr title="metres">m</abbr>):</label> <input type="text" name="height" id="height" /> <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" /> </fieldset> <fieldset> <input type="reset" id="reset" value="Clear" /> <input type="submit" id="submit" value="Submit" /> </fieldset> </form> <form name="imp" id="imperial" action="<?php echo $_SERVER[''PHP_SELF'']; ?>" method="post" enctype="form/multipart"> <fieldset> <label for="weight">Weight (<abbr title="Pounds">lbs</abbr>):</label> <input type="text" name="weight" id="weight" /> <label for="height">Height (Inches):</label> <input type="text" name="height" id="height" / <input type="hidden" name="bmiSubmitted" id="bmiSubmitted" value="1" /> </fieldset> <fieldset> <input type="reset" id="reset" value="Clear" /> <input type="submit" id="submit" value="Submit" /> </fieldset> </form> <?php } ?>

Verifiqué que funcionó (aunque sin validación en este momento -no quería aumentar demasiado mi pregunta) con métrica; He agregado el formulario pero no el procesamiento para el imperial todavía.


Como señaló petervandijck.com , este código puede ser susceptible a ataques XSS si lo tiene detrás de algún tipo de sistema de inicio de sesión o lo tiene incrustado en otro código.

Para evitar un ataque XSS, donde ha escrito:

<?php echo "$weight"; ?>

Deberías escribir en su lugar:

<?php echo htmlentities($weight); ?>

Que podría ser mejor escrito como:

<?=htmlentities($weight); ?>


El nombre del formulario no se envía. Solo debe agregar un campo oculto a cada formulario y llamarlo por día.


En el botón de envío de formulario (el método id de formulario es post ):

<input type="submit" value="save" name="commentData">

En el archivo PHP:

if (isset($_POST[''commentData''])){ // Code }


Para identificar el formulario enviado, puede usar:

  • Un campo de entrada oculto.
  • El nombre o valor del botón de enviar.

El nombre del formulario no se envía al servidor como parte de los datos POST.

Puedes usar el código como seguido

<form name="myform" method="post" action="" enctype="multipart/form-data"> <input type="hidden" name="frmname" value=""/> </form>


Por algún motivo, el nombre del botón de envío no se pasa al superglobal $_POST cuando se envía con Ajax / jQuery.

Solo en caso de que ayude a alguien ...


Puede usar GET en el parámetro de acción del formulario, que utilizo cada vez que hago una página combinada de inicio de sesión / registro.

Por ejemplo: action="loginregister.php?whichform=loginform"

¡Espero que esto ayude!


Puedes hacerlo así:

<input type="text" name="myform[login]"> <input type="password" name="myform[password]">

Verifique los valores publicados

if (isset($_POST[''myform''])) { $values = $_POST[''myform'']; // $login = $values[''login'']; // ... }


Simplemente podría dar un nombre al botón de enviar y hacer lo que debe hacerse en función de eso. Tengo varios formularios en una página y hago exactamente eso. Pase el nombre del botón y luego, si el nombre del botón = nombre del botón, haga algo.


Solo se envían los nombres de los campos de formulario, el nombre del formulario en sí no. Pero puede establecer un campo oculto con el nombre en él.


Te das cuenta que con echo $ height; estás abriendo un agujero de seguridad muy, muy serio en tu aplicación, ¿verdad?


Use un valor único en el botón de enviar para cada formulario, por ejemplo

index.html

<form method="post" action="bat/email.php"> <input type="text" name="firstName" placeholder="First name" required> <input type="text" name="lastName" placeholder="Last name" required> <button name="submit" type="submit" value="contact">Send Message</button> </form> <form method="post" action="bat/email.php"> <input type="text" name="firstName" placeholder="First name" required> <input type="text" name="lastName" placeholder="Last name" required> <button name="submit" type="submit" value="support">Send Message</button> </form>

email.php

<?php if (isset($_POST["submit"])) { switch ($_POST["submit"]) { case "contact": break; case "support": break; default: break; } } ?>