Upload file and access $_FILES - php

I'm trying to upload a file on some directory. The directory is recorded in the database. However, the code cannot read $_FILES i get null value everytime i try to upload files,. but the other input data are recorded to the database,. what happen is I cannot record the name of the file in the database its just blank.
if(isset($_POST['btn-upload'])){
$record_title = $_POST['record_title'];
$record_recieved_date_time = $_POST['record_recieved_date_time'];
$record_checked_date_time = $_POST['record_checked_date_time'];
$record_approved_date_time = $_POST['record_approved_date_time'];
$record_status = $_POST['record_status'];
$record_remarks = $_POST['record_remarks'];
$record_type = $_POST['record_type'];
$file = $_FILES['file']['name'];
$sql = "INSERT INTO records (record_id , record_title , record_recieved_date_time , record_checked_date_time , record_approved_date_time , record_status ,record_remarks , file , record_type)
VALUES (NULL, '$record_title' , '$record_recieved_date_time','$record_checked_date_time','$record_approved_date_time' , '$record_status ' , '$record_remarks' , '$file' , '1')";
if (mysqli_query($dbconfig, $sql)) {
header('Location:memberAWP.php');
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($dbconfig);
}
}
here is the Form, im using modal with the help of bootstrap
<form method="post" action="" enctype="multipart/form-data name="loginform" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="record_title"> TITLE </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_title" name = "record_title" placeholder="Enter Title">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_recieved_date_time"> RECIEVED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_recieved_date_time" name = "record_recieved_date_time" placeholder="Enter RECIEVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_checked_date_time"> CHECKED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_checked_date_time" name = "record_checked_date_time" placeholder="Enter CHECKED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_approved_date_time"> APPROVED DATE / TIME</label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_approved_date_time" name = "record_approved_date_time" placeholder="Enter APPROVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_status"> STATUS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_status" name = "record_status" placeholder="Enter STATUS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_remarks"> REMARKS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_remarks" name = "record_remarks" placeholder="Enter REMARKS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="file"> ATTACHMENTS </label>
<div class="col-sm-10">
<input type="file" class="form-control" id="file" name="file" placeholder="Enter ATTACHMENTS">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="submit" value="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>

if( isset( $_POST['btn-upload'], $_FILES['file'] ) ){
/*
The sql is vulnerable to sql injection as you directly embed variables within the sql
rather than using `prepared statements` so some extra care ought to be taken with the supplied
data, perhaps use:
filter_input( INPUT_POST, 'record_title', FILTER_SANITIZE_STRING );
*/
$record_title = $_POST['record_title'];
$record_recieved_date_time = $_POST['record_recieved_date_time'];
$record_checked_date_time = $_POST['record_checked_date_time'];
$record_approved_date_time = $_POST['record_approved_date_time'];
$record_status = $_POST['record_status'];
$record_remarks = $_POST['record_remarks'];
$record_type = $_POST['record_type'];
/*
Access the uploaded file as an object for simplicity
and use the values for saving the file etc
*/
$obj=(object)$_FILES['file'];
$file = $obj->name;
$size = $obj->size;
$tmp = $obj->tmp_name;
$type = $obj->type;
$error= $obj->error;
if( is_uploaded_file( $tmp ) && $error == UPLOAD_ERR_OK ){
/* determine the location the file should be saved to */
$destination = '/path/to/folder/' . $file;
/* Save the file */
$result = move_uploaded_file( $tmp, $destination );
/* Proceed with the sql command if the file was saved OK */
if( $result ){
$sql = "INSERT INTO records ( `record_title`, `record_recieved_date_time`, `record_checked_date_time`, `record_approved_date_time`, `record_status`, `record_remarks`, `file`, `record_type`)
VALUES ( '$record_title', '$record_recieved_date_time', '$record_checked_date_time', '$record_approved_date_time', '$record_status', '$record_remarks', '$file', '1' )";
$result = mysqli_query( $dbconfig, $sql );
if( $result )header('Location:memberAWP.php');
else echo "Error: " . $sql . "<br>" . mysqli_error($dbconfig);
}
}
}
As was pointed out in a comment, ensure that the form has the correct enctype attribute set - for file uploads it should be enctype='multipart/form-data'
Unless you use the move_uploaded_file() function the file will remain in the tmp directory for a limited time before garbage collection removes it and the reference to the file ( in the db ) will no longer be valid.

There are some basics thing you should know when working on file uploading.
1) You should define encryption type in your form for example
<form action="demo_post_enctype.asp" method="post" enctype="multipart/form-data">
2) Next you must use move_uploaded_file(source,destination) function in order to upload your file.

<form method="post" enctype="multipart/form-data" name="loginform" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="record_title"> TITLE </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_title" name = "record_title" placeholder="Enter Title">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_recieved_date_time"> RECIEVED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_recieved_date_time" name = "record_recieved_date_time" placeholder="Enter RECIEVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_checked_date_time"> CHECKED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_checked_date_time" name = "record_checked_date_time" placeholder="Enter CHECKED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_approved_date_time"> APPROVED DATE / TIME</label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_approved_date_time" name = "record_approved_date_time" placeholder="Enter APPROVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_status"> STATUS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_status" name = "record_status" placeholder="Enter STATUS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_remarks"> REMARKS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_remarks" name = "record_remarks" placeholder="Enter REMARKS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="file"> ATTACHMENTS </label>
<div class="col-sm-10">
<input type="file" class="form-control" id="file" name="file" placeholder="Enter ATTACHMENTS">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="btn-upload" value="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
change html code after try this code
if(isset($_POST['btn-upload']))
{
$record_title = $_POST['record_title'];
$record_recieved_date_time = $_POST['record_recieved_date_time'];
$record_checked_date_time = $_POST['record_checked_date_time'];
$record_approved_date_time = $_POST['record_approved_date_time'];
$record_status = $_POST['record_status'];
$record_remarks = $_POST['record_remarks'];
// $record_type = $_POST['record_type'];
$file = $_FILES['file']['name'];
//echo $fileName= $_FILES["file"]["name"];
echo $sql = "INSERT INTO records (record_id , record_title , record_recieved_date_time , record_checked_date_time , record_approved_date_time , record_status ,record_remarks , file , record_type)
VALUES (NULL, '$record_title' , '$record_recieved_date_time','$record_checked_date_time','$record_approved_date_time' , '$record_status ' , '$record_remarks' , '$file' , '1')";
if (mysqli_query($dbconfig, $sql)) {
header('Location:memberAWP.php');
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($dbconfig);
}
}
try this code

First of go to your project folder and create a new folder with the name of "uploads". the try the following code. if file upload get successfully done you can write your query in the IF block where we used echo for success. but first try this. i hope it works for you.
<?php
if(isset($_POST['submit'])){
$record_title = $_POST['record_title'];
$record_recieved_date_time = $_POST['record_recieved_date_time'];
$record_checked_date_time = $_POST['record_checked_date_time'];
$record_approved_date_time = $_POST['record_approved_date_time'];
$record_status = $_POST['record_status'];
$record_remarks = $_POST['record_remarks'];
$record_type = $_POST['record_type'];
$file = $_FILES['file']['name'];
$target_dir = "uploads/";
$path = $target_dir.$file;
$tmp = $_FILES['file']['tmp_name'];
if(move_uploaded_file($tmp,$path))
{
echo "File successfully uploaded";
}
else
echo "file did not upload";
}
?>
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form method="post" action="" enctype="multipart/form-data" name="loginform" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="record_title"> TITLE </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_title" name = "record_title" placeholder="Enter Title">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_recieved_date_time"> RECIEVED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_recieved_date_time" name = "record_recieved_date_time" placeholder="Enter RECIEVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_checked_date_time"> CHECKED DATE / TIME </label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_checked_date_time" name = "record_checked_date_time" placeholder="Enter CHECKED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_approved_date_time"> APPROVED DATE / TIME</label>
<div class="col-sm-10">
<input type="datetime-local" class="form-control" id="record_approved_date_time" name = "record_approved_date_time" placeholder="Enter APPROVED DATE / TIME">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_status"> STATUS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_status" name = "record_status" placeholder="Enter STATUS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="record_remarks"> REMARKS </label>
<div class="col-sm-10">
<input type="text" class="form-control" id="record_remarks" name = "record_remarks" placeholder="Enter REMARKS">
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="file"> ATTACHMENTS </label>
<div class="col-sm-10">
<input type="file" class="form-control" id="file" name="file" placeholder="Enter ATTACHMENTS">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="submit" value="submit" class="btn btn-default">Submit</button>
</div>
</div>
</form>
</body>
</html>

Related

What might the issue with this my code to upload image in my users form

I created a form to capture user details including their passport, but when ever the user fill the form, it went blank without populating the database with the filled data, but the image will be moved to specified directory. How do correct the error so that the data and the image path will be populated into the database.
if(isset($_POST['submit']))
{
$name=$_POST['name'];
$image = $_FILES['image']['name'];
$regno=$_POST['regno'];
$email=$_POST['email'];
$password=$_POST['password'];
$status=1;
// image file directory
$target = "images/".basename($image);
move_uploaded_file($_FILES['image']['tmp_name'], $target);
$sql="INSERT INTO tblstudents(name,image,regno,email,password,status) VALUES(:name,:image,:regno,:email,:password, :status)";
$query = $dbh->prepare($sql);
$query->bindParam(':name',$name,PDO::PARAM_STR);
$query->bindParam(':image',$_image,PDO::PARAM_STR);
$query->bindParam(':regno',$regno,PDO::PARAM_STR);
$query->bindParam(':email',$email,PDO::PARAM_STR);
$query->bindParam(':password',$password,PDO::PARAM_STR);
$query->bindParam(':status',$status,PDO::PARAM_STR);
$query->execute();
$Id = $dbh->Id();
if($Id)
{
$msg="user added successfully";
}
elseif (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
$msg = "Image uploaded successfully";
}else
{
$error="Something went wrong. Please try again";
}
}
?>
Here is my html form
<form class="form-horizontal" method="post" enctype="multipart/form-data">
<!-- image file enctype="multipart/form-data" -->
<div class="form-group">
<label for="default" class="col-sm-2 control-label">Full Name</label>
<div class="col-sm-10">
<input type="text" name="name" class="form-control" id="name" required="required" autocomplete="off">
</div>
</div>
<div class="form-group">
<label for="default" class="col-sm-2 control-label">Registration Number</label>
<div class="col-sm-10">
<input type="text" name="regno" class="form-control" id="regno" maxlength="50" required="required" autocomplete="off">
</div>
</div>
<div class="form-group">
<label for="default" class="col-sm-2 control-label">Email Address</label>
<div class="col-sm-10">
<input type="email" name="email" class="form-control" id="email" required="required" autocomplete="off">
</div>
</div>
<div class="form-group">
<label for="default" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<input type="password" name="password" class="form-control" id="password" required="required" autocomplete="off">
</div>
</div>
<!-- passport to upload -->
<div class="form-group">
<label for="default" class="col-sm-2 control-label">Upload Passport</label>
<div class="col-sm-10">
<input type="file" name="image" id="image">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>

How do I enable folders on my computer to allow php to move files into them?

So, I am trying to upload files using PHP into a folder, however, the images are not appearing. There are no error messages. I would think an error would appear to tell me they were unable to be uploaded.
<?php
if (isset($_POST['postsubmit'])) {
$postTitle = trim($_POST['posttitle']);
$postAuth = trim($_POST['postauthor']);
$postStat = trim($_POST['poststatus']);
$post_image = $_FILES['image']['name'];
$post_image_temp = $_FILES['image']['tmp_name'];
$postTags = trim($_POST['posttags']);
$postDate = date('y-m-d');
$postContent = trim($_POST['postcontent']);
$postComCount = 4;
move_uploaded_file($post_image_temp, "../images/$post_image");
}
?>
<h1>Add New Post</h1>
<div class="col-xs-6">
<form action="" method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="posttitle">Post Title</label>
<input type="text" name="posttitle" id="posttitle" class="form-control" maxlength="99"/>
</div>
<div class="form-group">
<label for="postauthor">Post Author</label>
<input type="text" name="postauthor" id="postauthor" class="form-control" maxlength="25"/>
</div>
<div class="form-group">
<label for="postauthor">Post Status</label>
<input type="text" name="poststatus" id="poststatus" class="form-control" maxlength="25"/>
</div>
<div class="form-group">
<label for="postauthor">Post Image</label>
<input type="file" name="image" id="image" class="form-control"/>
</div>
<div class="form-group">
<label for="postauthor">Post Tags</label>
<input type="text" name="posttags" id="posttags" class="form-control" maxlength="25"/>
</div>
<div class="form-group">
<label for="postcontent">Post Content</label>
<textarea type="text" name="postcontent" id="postcontent" class="form-control" rows="15" maxlength="10000"></textarea>
</div>
<button class="btn btn-primary" value="submit" name="postsubmit">Submit Post</button>
</form>
</div>
Try changing
move_uploaded_file($post_image_temp, "../images/$post_image");
to
move_uploaded_file($post_image_temp, "../images/".$post_image);
It is because you are just passing a string $post_image rather than the variable itself
Add error reporting to debug, something like this:
if (! move_uploaded_file($post_image_temp, "../images/$post_image") ) {
echo 'move failed: ';
print_r(error_get_last());
}

showing undifined index while uploading file

I have an error saying:
undefined index while uploading picture .
all other fields are getting but file type is not setting.
code below is page 1 where I posting the image
<form name="adduser" id="adduser" class="form-horizontal form-bordered" action="{$ROOT_OBJECT}/addpointtypetodo/save" enctype="multipart/form-data">
<div class="form-group">
<label class="col-sm-2 control-label">Point Type Tittle*</label>
<div class="col-sm-4">
<input type="text" class="form-control" placeholder="Name" name="addPointTypeTittle" id="addPointTypeTittle" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Point Type Subtitle*</label>
<div class="col-sm-4">
<input type="text" class="form-control" placeholder="Name" name="addPointTypeSubtitle" id="addPointTypeSubtitle" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Point Type Parse Tagline*</label>
<div class="col-sm-4">
<input type="text" class="form-control" placeholder="Name" name="addPointTypeTagline" id="addPointTypeTagline" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Point Type Icon URL</label>
<div class="col-sm-4">
<input type="file" class="form-control" placeholder="select file.." id="addPointTypeIcon" name="addPointTypeIcon">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Point Type Marker URL</label>
<div class="col-sm-4">
<input type="file" class="form-control" placeholder="select file.." id="addPointTypeMarker" name="addPointTypeMarker">
</div>
</div>
<div class="form-group">
<div class="col-sm-4">
<input type="submit" class="btn btn-primary" name="addPointTypeSubmit" id="addPointTypeSubmit" value="Save">
</div>
</div>
</form>
and this is the page getting this image:
$uploadedFile = $_FILES['addPointTypeIcon']['tmp_name'];
$pointTypeIcon = 'images/category/' . $_FILES['addPointTypeIcon']['name'];
if (is_uploaded_file($uploadedFile))
{
$this->model->fields = array();
move_uploaded_file($uploadedFile, $pointTypeIcon);
array_push($this->model->fields, $pointTypeIndex);
array_push($this->model->fields, $pointTypeIcon);
$this->model->saveIcon();
}
// }
// if(isset($_FILES['addPointTypeMarker']))
// {
$uploadedFile = $_FILES['addPointTypeIcon']['tmp_name'];
$pointTypeIcon = 'images/marker/' . $_FILES['addPointTypeMarker']['name'];
if (is_uploaded_file($uploadedFile))
{
$this->model->fields = array();
move_uploaded_file($uploadedFile, $pointTypeIcon);
array_push($this->model->fields, $pointTypeIndex);
array_push($this->model->fields, $pointTypeIcon);
$this->model->saveMarker();
}
It saying images not set.
please help.
You have to specify the post method on the form
<form name="adduser" id="adduser" method="post" class="form-horizontal form-bordered" action="{$ROOT_OBJECT}/addpointtypetodo/save" enctype="multipart/form-data">
Files cannot be uploaded to PHP using the GET method, which is the default method for submitting forms.
Relevant W3 Spec

Storing the values into database using php forms

Final Edit:
Thank you everyone for the help. I have been trying to write all the code related to connection in index.php rather than submit.php. It is resolved now.
Edit:
I have updated the code based on your feedback.
I am able to get the values to the database now but the thing is it is showing only empty results. here is the updated code.
<form action="submit.php" method="post" class="form-horizontal">
<div class="form-group">
<label for="name" class ="col-lg-2 control-label" > Name</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="name" name="name" placeholder="Enter your Name" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="email" class ="col-lg-2 control-label" > Email</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="email" name="email" placeholder="Enter your email address" required>
</div>
</div>
</div> <div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="subject" class ="col-lg-2 control-label" > Subject</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="subject" name="subject" placeholder="Your Subject" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal">
<div class="form-group">
<label for="message" class ="col-lg-2 control-label" > Message</label>
<div class="col-lg-7">
<textarea name="message" class="form-control" id ="message" cols="20" rows="3" placeholder="Your Message"></textarea>
</div>
</div> <!-- end form -->
<div class="col-lg-1">
</div>
<div class="form-group">
<div class="col-lg-7 col-lg-offset-2">
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
PHP Code:
<?php
if (isset($_POST)) {
$conn = mysqli_connect($servername, $username, $password, $db_name);// Establishing Connection with Server
mysqli_set_charset($conn, 'utf8');
if (!$conn) {
die("Database connection failed: " . mysqli_error($conn));
}
else
echo "connected successfully";
//Escaping string, not 100% safe, also consider validating rules and sanitization
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$subject = mysqli_real_escape_string($conn, $_POST['subject']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
$result = mysqli_query($conn, "INSERT INTO contact (user, email, subject, message) VALUES ('$name', '$email', '$subject', '$message')");
}
?>
Here is the snapshot of the database
I have a form made using HTML. I want to store the results when i submit the form in the database. The connection was successful but the data is not being stored in the database.
Basically what submit.php does is just sent the text "Successfully submited the form".
Here's my code:
<form action="submit.php" method="post" class="form-horizontal">
<div class="form-group">
<label for="name" class ="col-lg-2 control-label" > Name</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="name" placeholder="Enter your Name" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="email" class ="col-lg-2 control-label" > Email</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="email" placeholder="Enter your email address" required>
</div>
</div>
</div> <div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="subject" class ="col-lg-2 control-label" > Subject</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="subject" placeholder="Your Subject" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal">
<div class="form-group">
<label for="message" class ="col-lg-2 control-label" > Message</label>
<div class="col-lg-7">
<textarea name="message" class="form-control" id ="message" cols="20" rows="3" placeholder="Your Message"></textarea>
</div>
</div> <!-- end form -->
<div class="col-lg-1">
</div>
<div class="form-group">
<div class="col-lg-7 col-lg-offset-2">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
PHP code:
$conn = mysqli_connect($servername, $username, $password, $db_name);// Establishing Connection with Server
mysqli_set_charset($conn, 'utf8');
if (!$conn) {
die("Database connection failed: " . mysqli_error($conn));
}
else
echo "connected successfully";
if (isset($_POST['submit'])) {
//Escaping string, not 100% safe, also consider validating rules and sanitization
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$subject = mysqli_real_escape_string($conn, $_POST['subject']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
$result = mysqli_query($conn, "INSERT INTO contact (user, email, subject, message) VALUES ('$name', '$email', '$subject', '$message');");
if ($result) {
$message="successfully sent the query!!";
}
else
{$message="try again!!";}
}
?>
None of your input fields have a name="" attribute, including the button. So none of these fields will be sent in the $_POST array.
Add a name="" attribute like this to all the fields you want sent to PHP
<form action="submit.php" method="post" class="form-horizontal">
<div class="form-group">
<label for="name" class ="col-lg-2 control-label" > Name</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="name" name="name" placeholder="Enter your Name" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="email" class ="col-lg-2 control-label" > Email</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="email" name="email" placeholder="Enter your email address" required>
</div>
</div>
</div>
<div class="col-lg-1"></div>
<div class="form-horizontal" >
<div class="form-group">
<label for="subject" class ="col-lg-2 control-label" > Subject</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="subject" name="subject" placeholder="Your Subject" required>
</div>
</div>
</div>
<div class="col-lg-1"></div>
<div class="form-horizontal">
<div class="form-group">
<label for="message" class ="col-lg-2 control-label" > Message</label>
<div class="col-lg-7">
<textarea name="message" class="form-control" id ="message" name="message" cols="20" rows="3" placeholder="Your Message"></textarea>
</div>
</div> <!-- end form -->
<div class="col-lg-1"></div>
<div class="form-group">
<div class="col-lg-7 col-lg-offset-2">
<button type="submit" class="btn name="submit" btn-primary">Submit</button>
</div>
</div>
</form>
Also in your code in submit.php change this so you see an actual error message if one occurs.
if ($result) {
$message="successfully sent the query!!";
} else {
$message="Insert failed : " . mysqli_error($conn);
}
echo $message;
Although this does assume you are actually showing the $message value somewhere in your code that you have not shown us.
You have to add name attribute to your button element so that if (isset($_POST['submit'])) will be true.
Please change
<button type="submit" class="btn btn-primary">Submit</button>
to
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
or
<input type="submit" name="submit" value="Submit" class="btn btn-primary" />
First of all you must need to provide name attribute for each input tags and button tags for a better approach :
<form action="submit.php" method="post" class="form-horizontal">
<div class="form-group">
<label for="name" class ="col-lg-2 control-label" > Name</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="name" name ="name" placeholder="Enter your Name" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="email" class ="col-lg-2 control-label" > Email</label>
<div class="col-lg-7">
<input type="text" class="form-control" name ="email" id ="email" placeholder="Enter your email address" required>
</div>
</div>
</div> <div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="subject" class ="col-lg-2 control-label" > Subject</label>
<div class="col-lg-7">
<input type="text" class="form-control" name ="subject" id ="subject" placeholder="Your Subject" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal">
<div class="form-group">
<label for="message" class ="col-lg-2 control-label" > Message</label>
<div class="col-lg-7">
<textarea name="message" class="form-control" name ="message" id ="message" cols="20" rows="3" placeholder="Your Message"></textarea>
</div>
</div> <!-- end form -->
<div class="col-lg-1">
</div>
<div class="form-group">
<div class="col-lg-7 col-lg-offset-2">
<button type="submit" name ="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
Php Code for Insert data in DB :
$result = mysqli_query($conn, "INSERT INTO contact (user, email, subject, message) VALUES ('".$name."', '".$email."', '".$subject."', '".$message."')");
Try this code :-
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$conn = mysqli_connect($servername, $username, $password, $db_name);// Establishing Connection with Server
mysqli_set_charset($conn, 'utf8');
if (!$conn) {
die("Database connection failed: " . mysqli_error($conn));
}
else
echo "connected successfully";
//Escaping string, not 100% safe, also consider validating rules and sanitization
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$subject = mysqli_real_escape_string($conn, $_POST['subject']);
$message = mysqli_real_escape_string($conn, $_POST['message']);
$result = mysqli_query($conn, "INSERT INTO contact (user, email, subject, message) VALUES ('$name', '$email', '$subject', '$message')");
echo "INSERT INTO contact (user, email, subject, message) VALUES ('$name', '$email', '$subject', '$message')";//die;
if ($result) {
$message="successfully sent the query!!";
}
else
{$message="try again!!";}
}
?>
<form action="index.php" method="post" class="form-horizontal">
<div class="form-group">
<label for="name" class ="col-lg-2 control-label" > Name</label>
<div class="col-lg-7">
<input type="text" class="form-control" name ="name" id ="name" placeholder="Enter your Name" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="email" class ="col-lg-2 control-label" > Email</label>
<div class="col-lg-7">
<input type="text" class="form-control" id ="email" name="email" placeholder="Enter your email address" required>
</div>
</div>
</div> <div class="col-lg-1">
</div>
<div class="form-horizontal" >
<div class="form-group">
<label for="subject" class ="col-lg-2 control-label" > Subject</label>
<div class="col-lg-7">
<input type="text" name="subject" class="form-control" id ="subject" placeholder="Your Subject" required>
</div>
</div>
</div>
<div class="col-lg-1">
</div>
<div class="form-horizontal">
<div class="form-group">
<label for="message" class ="col-lg-2 control-label" > Message</label>
<div class="col-lg-7">
<textarea name="message" class="form-control" id ="message" cols="20" rows="3" placeholder="Your Message"></textarea>
</div>
</div> <!-- end form -->
<div class="col-lg-1">
</div>
<div class="form-group">
<div class="col-lg-7 col-lg-offset-2">
<button type="submit" class="btn btn-primary" name="submit">Submit</button>
</div>
</div>
</form>

Submitting HTML data to a google App Engine MySQL database using PHP

I have been trying to create a simple web form that will be used to submit data to a Google App Engine database that uses MySQL. The database is connecting fine and the try catch statement seems to be working properly. The problem is that when i click the submit button, the data is not being committed into the database. Any help would be much appreciated, I'm sure there is just some small error that i am overlooking.
HTML form
<form class="form-horizontal" role="form" action="connection.php" method="post">
<div class="form-group">
<label for="patientName" class="col-sm-2 control-label">Patient Name</label>
<div class="col-sm-10">
<input type="Name" class="form-control" id="patientName" name="patientName">
</div>
</div>
<div class="form-group">
<label for="Address1" class="col-sm-2 control-label">Address 1</label>
<div class="col-sm-10">
<input type="text" class="form-control" rows='3' id="Address1" name="Address1"></input>
</div>
</div>
<div class="form-group">
<label for="Address2" class="col-sm-2 control-label">Address 2</label>
<div class="col-sm-10">
<input type="text" class="form-control" rows='3' id="Address2" name="Address2"></input>
</div>
</div>
<div class="form-group">
<label for="Address3" class="col-sm-2 control-label">Address 3</label>
<div class="col-sm-10">
<input type="text" class="form-control" rows='3' id="Address3" name="Address3"></input>
</div>
</div>
<div class="form-group">
<label for="postCode" class="col-sm-2 control-label">PostCode</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="postCode" name="postCode">
</div>
</div>
<div class="form-group">
<label for="symptoms" class="col-sm-2 control-label">Symptoms</label>
<div class="col-sm-10">
<textarea type="text" class="form-control" rows='5' id="symptoms" name="symptoms"></textarea>
</div>
</div>
<div class="form-group">
<label for="contactNumber" class="col-sm-2 control-label">Contact Number</label>
<div class="col-sm-10">
<input type="Tel" class="form-control" id="contactNumber" name="contactNumber">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Log Call Details</button>
</div>
</div>
</form>
PHP connection file
<?php
use google\appengine\api\users\User;
use google\appengine\api\users\UserService;
try {
$db = new pdo('mysql:host=111.111.111.11:3306;dbname=MyDB',
'root',
'password'
);
$patientName = $_POST["patientName"];
$address1 = $_POST["Address1"];
$address2 = $_POST["Address2"];
$address3 = $_POST["Address3"];
$postCode = $_POST["postCode"];
$symptoms = $_POST["symptoms"];
$contactNumber = $_POST["contactNumber"];
$sql = "INSERT INTO patient (patientName, patientAddress1, patientAddress2, patientAddress3, patientPostcode, PatientSymptoms, patientPhoneNumber)
VALUES ($patientName, $address1, $address2, $address3, $postCode, $symptoms, $contactNumber)";
$db->execute($sql);
} catch (PDOException $ex) {
echo "Could not connect to the database.";
exit;
}
$db = null;
echo "Woo-hoo!";
?>
I should probably also mention that the HTML page is using bootstrap.
You can try this code snippet below, It works, I did not used $_POST data but hard-coded values, Hope it helps !
more infos:
http://php.net/manual/en/pdo.prepare.php
$username="test12";
$role="test1";
$sql = "INSERT INTO test (username, role) VALUES (:username, :role)";
$conn = new pdo('mysql:host=127.0.0.1:3306;dbname=home',
'root',
'password'
);
$q = $conn->prepare($sql);
$q->execute(array(':username'=>$username, ':role'=>$role));

Categories