I tried to look for any error but I couldn't find it. When I tried to submit, it said that I have "Error Connection". Even though the image that I want to upload is uploaded just fine in the specified folder in my pc but no data are inserted into mysql database in phpmyadmin
Please help me spot the errors in this code. Thank you!
This is my db.php
<?php
$con= mysqli_connect("localhost","root","","bookmarket");
?>
This is my code
<?php
include("includes/db.php");
?>
<html>
<head>
<title>Inserting Books</title>
<script src="//cdn.tinymce.com/4/tinymce.min.js"></script>
<script>tinymce.init({ selector:'textarea' });</script>
</head>
<body bgcolor="skyblue">
<form action="insert_book.php" method="post" enctype="multipart/form-data">
<table align="center" width="700" border="2" bgcolor="orange">
<tr align="center">
<td colspan="7"><h2>Insert New Post Here</h2></td>
</tr>
<tr>
<td align="right"><b>Book Title:</b></td>
<td><input type="text" name="book_title" size="60" required/></td>
</tr>
<tr>
<td align="right"><b>Book Subject:</b></td>
<td>
<select name="book_subject" required>
<option>Select a subject</option>
<?php
$get_subjects="select * from subjects";
$run_subjects=mysqli_query($con,$get_subjects);
while($row_subjects=mysqli_fetch_array($run_subjects)){
$subjects_id=$row_subjects['subjects_id'];
$subjects_title=$row_subjects['subjects_title'];
echo "<option value='$subjects_id'>$subjects_title</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td align="right"><b>Book Course Type:</b></td>
<td>
<select name="book_course_type" required>
<option>Select a course type</option>
<?php
$get_book_course_type="select * from course_type";
$run_book_course_type=mysqli_query($con,$get_book_course_type);
while($row_course_type=mysqli_fetch_array($run_book_course_type)){
$course_type_id=$row_course_type['course_type_id'];
$course_type_title=$row_course_type['course_type_title'];
echo "<option value='$course_type_id'>$course_type_title</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td align="right"><b>Book Author:</b></td>
<td><input type="text" name="book_author" required/></td>
</tr>
<tr>
<td align="right"><b>Book Image:</b></td>
<td><input type="file" name="book_image" required/></td>
</tr>
<tr>
<td align="right"><b>Book Price:</b></td>
<td><input type="text" name="book_price" required/></td>
</tr>
<tr>
<td align="right"><b>Book Description:</b></td>
<td><textarea name="book_desc" cols="20" rows="10"></textarea></td>
</tr>
<tr>
<td align="right"><b>Book keywords:</b></td>
<td><input type="text" name="book_keywords" required/></td>
</tr>
<tr align="center">
<td colspan="7"><input type="submit" name="insert_post" value="Insert Book Now"/></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if(isset($_POST['insert_post'])){
//getting the text data from the fields
$book_title=$_POST['book_title'];
$book_subject=$_POST['book_subject'];
$book_course_type=$_POST['book_course_type'];
$book_author=$_POST['book_author'];
$book_price=$_POST['book_price'];
$book_desc=$_POST['book_desc'];
$book_keywords=$_POST['book_keywords'];
//getting the image from the field
$book_image= $_FILES['book_image']['name'];
$book_image_tmp= $_FILES['book_image']['tmp_name'];
move_uploaded_file($book_image_tmp,"book_images/$book_image");
$insert_book = "insert into books(books_course_type,books_subject,books_title,books_price,books_desc,books_author,books_image,books_keywords) values('$book_course_type','$book_subject','$book_title','$book_price','$book_desc','$book_author','$book_image','$book_keywords')";
$insert_pro= mysqli_query($con,$insert_book)
or die ('Error connecting');
if($insert_pro){
echo "<script>alert('Book Has Been Inserted!')</script>";
echo "<script>window.open('insert_book.php','_self')</script>";
}
}
?>
EDIT: I think I found the problem. When I entered the query in the database I got ERROR 1062: Duplicate entry '0' for key 'PRIMARY'. So every time I add another input, the value for books_id (primary key of table "books") is always zero, it doesnt increase. How do I solve this?
mysqliyou should be using parameterized queries andbind_paramto add user data to your query. DO NOT use string interpolation or concatenation to accomplish this because you have created a severe SQL injection bug. NEVER put$_POSTor$_GETdata directly into a query, it can be very harmful if someone seeks to exploit your mistake.