Post email from input into the database

Post email from input into the database
0.0 0

#1

Hello. My problem is:

1.I need submit button to be not active before real email will be written down. I have this form now:

<form action ="/includes/newsletter-signup.php" method="post" id="submit-email">

<input "autocomplete="off" type="email" name="email-address" id ="txtmail"
 placeholder="<?php echo $lang['e-mail-footer']; ?>">

<input disabled="true" class="btn-disabled btn-reset button button-blue" 
type="submit" id = "btn-reset" value="<?php echo $lang['sign-up']; ?>">
</form>

and code:

$(document).ready(function(){
  

// news subscription:
	$("#submit-email").validate({
		rules: {
			txtmail: {
				required: true,
				email: true
			}

		},
		messages: {
			email: "Please enter a valid email address"
		}

	}); // end reset-form
  
  $("#txtmail").on("blur", function(){
    if($("#submit-email").valid())
   {
       $("#btn-reset").removeAttr("disabled");
   }
 }); 
});  

And I do not know if it works because it proceed nothing to database and there is 2 question.
2. Is it the right way to collect email from the input and put it into the database(newsletter_subscribers TABLE and sub_email ROW)?
This file below is newsletter-signup.php which is mentioned in the code before.

<?php
							
	$email_data = $_POST['email-address']; 
	$sql_email = "INSERT INTO newsletter_subscribers (sub_email)VALUES ($email_data)";
?>

Thanks in advance for every help.


#2

I’m not sure what your question is, but this is not an easy thing to debug without having access to your project. If you can run your server using a debugger, that would be ideal. Otherwise, have it output something to the console when it receives a POST request at your specified path.


#3

The code looks okay to me. The problem that I do see is that, although you’ve constructed your query correctly, you’re not executing it.

To keep things simple, first open connection to the database and then run your query stored in $sql_email. Only problem being your $sql_query is a variable and you need to concatenate it to your query. Also the value needs to be wrapped in single quotes

So your

$sql_email = "INSERT INTO newsletter_subscribers (sub_email)VALUES ($email_data)";

should really be

$sql_email = "INSERT INTO newsletter_subscribers (sub_email)VALUES ('" . $email_data . "')";

You will need a php extension for sql connectivity called mysqli

Making your final code look like

<?php
$hostname = "localhost";
$username = "username";
$password = "password";
$dbname = "some-db";

// Establish a connection with the db
$conn = new mysqli($hostname, $username, $password, $dbname);
// Check if connection was successful
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$email_data = $_POST['email-address']; 
$sql_email = "INSERT INTO newsletter_subscribers (sub_email)VALUES ('" . $email_data . "')";

if ($conn->query($sql_email ) === TRUE) {
    echo "New email record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

#4

Thank you so much for help!