Currently I am working on an apply form that staff taking leave. The form is user need to fill on their leaveDuration, leaveDate and reason only. I need to pass the values that they fill in the input to database so I can retrieve. After the user done submit, there will be a message said submitted and redirect to home.php. This problem had stucked me for few days already… Thanks for helping me and I appreciate on your help…
This is the code that I currently have problem passing the values into the database called leave_management The functions that I place at the top of the form.php
<?php $db = mysqli_connect("localhost", "root", "", "leave_management"); if($db === false) die("ERROR: Could not connect. "); if(isset($_POST['submit_btn'])) { $ID = $_SESSION['user']['ID']; $leaveType = $_POST['leaveType']; $leaveDuration = $_POST['leaveDuration']; $dateFrom = $_POST['dateFrom']; $reason = $_POST['reason']; $status; $query = "INSERT INTO form (ID, formID, leaveType, leaveDuration, dateFrom, reason, status, dateApprove, approveBy, remark, Created, Modified) VALUES ('$ID', NULL, '$leaveType', '$leaveDuration', '$dateFrom', '$reason', 'Pending', '', NULL, '', '', '')"; //mysqli_query($db, $query); if(mysqli_query($db ,$query)){ echo "Records inserted successfully."; } else{ echo "ERROR"; } header("Location: home.php"); } ?>
This is the form that user need to fill
<form role="form" method="post" action="form.php"> <div class="form-group"> <label for="employeeName"> Employee Name: </label> <input type="text" class="form-control" value="<?php echo $_SESSION['user']['name']?>" id="employeeName" name="name" disabled /> </div> <div class="form-group"> <label for="ICno"> IC Number: </label> <input type="text" class="form-control" value="<?php echo $_SESSION['user']['IC']?>" id="ICno" name="IC" disabled /> </div> <div class="form-group"> <label for="selectLeave"> Apply Leave for:   </label> <select name="leaveType" required> <option value="Annual Leave">Annual Leave</option> <option value="Unpaid Leave">Unpaid Leave</option> <option value="Sick Leave">Sick Leave</option> </select> </div> <div class="form-inline"> <label for="duration"> Duration:   </label> <input type="number" class="form-control" id="duration" name="leaveDuration" required />  day(s) </div> <br> <div class="form-inline"> <label for="dateFrom"> Date from:   </label> <input type="date" class="form-control" id="datetimepicker" name="dateFrom" required /> </div> <br> <div> <label for="reason"> Reason: </label> <textarea name="reason" class="form-control" id="reason" rows="5" cols="40" required></textarea> </div> <br> <div class="checkbox"> <label> <input type="checkbox" required /> I had understand and agree with the <a href="protocol.php">Leave Office Protocol and Term and Condition</a>. </label> </div> <input type="submit" class="btn btn-primary" name="submit_btn"/> </form>
This is the database of the form.
It display the ERROR in echo “ERROR”…
Advertisement
Answer
The formID column you have made it auto-increment
and not null
in the table. And still, you are passing null
to it in PHP code.
Also have a look at how to get the MySQL errors
https://www.w3schools.com/php/func_mysqli_error.asp
And your code is fully prone to SQL injection
Read about the PHP Prepared statements. https://www.w3schools.com/php/php_mysql_prepared_statements.asp
Note:
And then the columns to which you know can or cannot contain values sometimes, you can mark them as NULL in DB
Your query should be like:
$query = "INSERT INTO form (ID, leaveType, leaveDuration, dateFrom, reason, status) VALUES ('$ID','$leaveType', '$leaveDuration', '$dateFrom', '$reason', 'Pending')";