Mi formulario PHP se envía automáticamente cuando se carga mi página. Cuando se envía automáticamente, mi base de datos SQL registra un envío de formulario pero sin datos recopilados.
No estoy seguro de cómo solucionarlo.
Este es mi código.
<?php //connection to database $con = mysqli_connect("localhost","subscriber","password","data-Base"); $emailErr = ""; $email = ""; $Email = $_POST['email']; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Please enter a Valid Email"; } } } //form submission $sql = "INSERT INTO emails (Email) VALUES ('$Email')"; ?> <?php // define variables and set to empty values function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } mysqli_close($con); if($email){ $sent = "Thank You for Subscribing"; } ?> <form id="login" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);? >" method="post"> <fieldset id="inputs"> <input id="username" name="email" type="text" placeholder="Sign up for our newsletter:"> </fieldset> <fieldset id="actions"> <input type="submit" id="submit" value="Subscribe"> </fieldset> <div class="email-sent"> <?php if(!empty($sent)) { echo $sent; } ?> <br> <?php echo $emailErr;?> </div> </form>Rellénelo todo en un cheque, no es necesario consultar nada si no se envía nada, si se envía, hágalo.
<?php if(isset($_POST['submit'])){ $con = mysqli_connect("localhost","subscriber","password","data-Base"); $emailErr = ""; $email = ""; $Email = $_POST['email']; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Please enter a Valid Email"; } } } //form submission $sql = "INSERT INTO emails (Email) VALUES ('$Email')"; } ?> <form action=""> <input type="text" name="email"> <input type="submit" name="submit" value="Submit"> </form> Alternativamente, si tiene varios formularios en una página, puede identificar qué botón de envío se presiona y actuar en consecuencia. En cuyo caso, querrás mover tu $con solo y no en ese bloque, de lo contrario, tendrías que agregarlo a cada uno.
<?php if($_POST['submit'] == 'email_submit'){ $con = mysqli_connect("localhost","subscriber","password","data-Base"); $emailErr = ""; $email = ""; $Email = $_POST['email']; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Please enter a Valid Email"; } } } //form submission $sql = "INSERT INTO emails (Email) VALUES ('$Email')"; } ?> <form action=""> <input type="text" name="email"> <button type="submit" value="submit" value="email_submit">Submit</button> </form>Eso debería funcionar, pero como siempre, no hay promesas :)
Porque eso es lo que le estás diciendo que haga. Envuélvalo en un envío isset. Idealmente, también pondría sus pruebas en eso, lo mostraré después y le daré un recuento de errores, si el error == 0, luego envíelo.
<?php //connection to database $con = mysqli_connect("localhost","subscriber","password","data-Base"); //if we fail to connect $emailErr = ""; $email = ""; $Email = $_POST['email']; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Please enter a Valid Email"; } } } if(isset($_POST['submit'])){ //form submission $sql = "INSERT INTO emails (Email) VALUES ('$Email')"; } ?> <?php // define variables and set to empty values function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } mysqli_close($con); if($email){ $sent = "Thank You for Subscribing"; } ?> <form id="login" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);? >" method="post">Mejor método, envuélvalo todo en un isset y luego valide usando un conteo de errores
<?php //connection to database $con = mysqli_connect("localhost","subscriber","password","data-Base"); //if we fail to connect $emailErr = ""; $email = ""; $Email = $_POST['email']; if(isset($_POST['submit'])){ $errorCount = 0; if (empty($_POST["email"])) { $emailErr = "Email is required"; $errorCount++; } $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Please enter a Valid Email"; $errorCount++; } if($errorCount == 0){ //form submission $sql = "INSERT INTO emails (Email) VALUES ('$Email')"; } } ?> <?php // define variables and set to empty values function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } mysqli_close($con); if($email){ $sent = "Thank You for Subscribing"; } ?> <form id="login" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);? >" method="post">