0

I'm very new to php and I really want to learn it. I'm learning from w3school, but I can't manage to do this (saving to database)... I also tried specifying the values in the .php and managed not to get error but it did not save in the database. Please tell me what is wrong in this.

<form action="submit.php" method="POST">
    <p>Name:<input type="text" name="name"/></p>
    <p>Email:<input type="text" name="email"/></p>
    <p>Message:<textarea rows="3" cols="1" name="message"></textarea></p>
    <a href="submit.php">Submit</a>
</form>

PHP File

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$sql = "INSERT INTO kellywood (messages.name, messages.email, messages.message) VALUES ('$_POST[name]','$_POST[email]','$_POST[message]')");

if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
}

mysqli_close($con);
?>

No error, and I specified the values but it did not save in the database.

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

mysqli_query($con,"INSERT INTO kellywood(messages.name, messages.email, messages.message) VALUES ('Peter', 'Griffin',35)");


mysqli_close($con);
?>

Sorry for the noob question but i'm very new in php... Please help

8
  • I'd suggest not using w3school to learn. It's not that good. If you're really interested, look into PDO prepared statements as it's safer and it'd be better for you to get started with that than learn bad habits that you have to later fix. Commented Nov 26, 2013 at 2:51
  • Just change this messages.name, messages.email, messages.message to this name, email, message I guess that your table kellywood just have this fields On your insert statement Commented Nov 26, 2013 at 2:53
  • @Niketa Using PDO doesn't protect one from bad habits. Mysqli is perfectly good. I have seen some truly awful uses of prepared statements created using PDO. Commented Nov 26, 2013 at 2:56
  • @jorge, still error, "Parse error: syntax error, unexpected ')' in C:\wamp\www\For Allied Web\submit.php on line 10" Commented Nov 26, 2013 at 3:01
  • Try this: $sql = "INSERT INTO kellywood (name, email, message) VALUES ('" .$_POST['name'] . "','" . $_POST['email'] . "','" . $_POST['message']"')"; Commented Nov 26, 2013 at 3:03

2 Answers 2

2

There are a few things that are incorrect.

First:

<a href="submit.php">Submit</a>

which should be a button and not a link:

<input type="submit" name="submit" value="Submit">

And based on a comment that was made: "database is kellywood, messages is the table."

This:

mysqli_query($con,"INSERT INTO kellywood(messages.name, messages.email, messages.message)
VALUES ('Peter', 'Griffin',35)");

Should be:

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('Peter', 'Griffin',35)");

However and based on your input variables, it should resemble more like this:

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')");

While assigning your input variables such as:

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

Rewrite:

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$name = $con->real_escape_string($_POST['name']);
$email = $con->real_escape_string($_POST['email']);
$message = $con->real_escape_string($_POST['message']);

mysqli_query($con,"INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')");

mysqli_close($con);
?>

Or you can use:

<?php 
$con = mysqli_connect("localhost","root","","kellywood");

if (mysqli_connect_errno()) {
    echo "Failed to connect to Database";
} else {
    echo "Connected";
}

$name = $con->real_escape_string($_POST['name']);
$email = $con->real_escape_string($_POST['email']);
$message = $con->real_escape_string($_POST['message']);

$sql = "INSERT INTO messages (name, email, message) 
VALUES ('" . $name . "', '" . $email . "', '" . $message . "')";

if (!mysqli_query($con,$sql)) {
    die('Error: ' . mysqli_error($con));
}

else {
echo "SUCCESS!";
}

mysqli_close($con);
?>

HTML form

<form action="submit.php" method="POST">
    <p>Name:<input type="text" name="name"/></p>
    <p>Email:<input type="text" name="email"/></p>
    <p>Message:<textarea rows="3" cols="20" name="message"></textarea></p>
    <input type="submit" name="submit" value="Submit">
</form>

Both of the above worked on my server, using VARCHAR(255) for all 3 columns.

Columns: name - email - message

Sign up to request clarification or add additional context in comments.

Comments

2

Try using a button type="submit", instead of the href tag.

6 Comments

I tried, an new error occured, "SCREAM: Error suppression ignored for"
That signifies a coding error somewhere. ive seen it if HTML code works it's way into PHP code. Can you post your new code sample?
Your PHO also needs some more error checking, like wrapping the insert code in: "if (isset($_POST['submit']) { ///sql stuff here }
just to clarify...kellywood is the name of BOTH the database AND the table? it's fine if it is, just making sure that's not a mistake.
replace your sql line with this: $name = $con->real_escape_string($_POST['name']); $email = $con->real_escape_string($_POST['email']); $message = $con->real_escape_string($_POST['message']); $result = $con->query("INSERT INTO messages (name, email, message) VALUES ('$name', '$email', '$message'") or die (mysqli_error());
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.