I've run into a curious error today while coding a HTML / JS / PHP webform.
"Execute failed: (1048) Column 'title' cannot be null"
The way my form works is as follows;
Upon submit, my HTML form takes entered values, and sends them to a javascript function "processIdea()". This function then checks for errors and if none are found, the form is POSTed to ideaSubmission.php. The purpose of this code is to take posted values, check that they exist and then insert them into my Mysql database.
Here are my 3 files; *note one field is disabled while I work on a fix for it - I'm aware of this :)*
HTML FORM:
<form id="submit_idea" action ="submitIdea.php" method="POST">
<fieldset>
<legend>Idea submission</legend>
<label for="title">Title</label>
<input type="text" name="title"/>
<br>
<label for="brief">Brief</label>
<input type="text" name="brief"/>
<br>
<label for="problem">Problem</label>
<input type="text" name="problem"/>
<br>
<label for="solution">solution</label>
<input type="text" name="solution"/>
<br>
<label for="audience">audience</label>
<input type="text" name="audience"/>
<br>
<label for="prediction">prediction</label>
<input type="text" name="prediction"/>
<br>
<label for="constraints">constraints</label>
<input type="text" name="constraints"/>
<br>
<!--<label for="categories">Please select applicable categories / from the list below</label>
<input type="checkbox" id="categories" name"categories[]" value"App" /> App<br />>
<input type="checkbox" name"categories[]" value"business_venture" /> Business venture<br />>
<input type="checkbox" name"categories[]" value"home-ware" /> Home-ware<br />>
<input type="checkbox" name"categories[]" value"technology" /> Technology<br />>
<input type="checkbox" name"categories[]" value"furniture" /> Furniture<br />>
<input type="checkbox" name"categories[]" value"art" /> Art<br />>
<input type="checkbox" name"categories[]" value"jewellery" /> Jewellery<br />>
<input type="checkbox" name"categories[]" value"fashion" /> Clothing / Fashion<br />>
<input type="checkbox" name"categories[]" value"culinary" /> Culinary<br />>
<input type="checkbox" name"categories[]" value"misc" /> Misc<br /> -->
<button type="submit" onclick="processIdea();">Submit</button>
<div style="clear:both;"></div>
</fieldset>
</form>
JAVASCRIPT FUNCTION:
$("document").ready(function() {
$("#submit_idea").submit(function() {
processIdea();
return false;
});
});
function processIdea() {
var errors = '';
// Validate title
var title = $("#submit_idea [name='title']").val();
if (!title) {
errors += ' - Please enter a title\n';
}
// Validate brief
var brief = $("#submit_idea [name='brief']").val();
if (!brief) {
errors += ' - Please enter a short idea brief\n';
}
// Validate Problem
var problem = $("#submit_idea [name='problem']").val();
if (!problem) {
errors += ' - Please discribe the problem you want to solve\n';
}
//Validate Solution
var solution = $("#submit_idea [name='solution']").val();
if (!solution) {
errors += ' - Please discribe your solution to the above problem\n';
}
//Validate Audience
var audience = $("#submit_idea [name='audience']").val();
if (!audience) {
errors += ' - Please discribe the audience your solution targets\n';
}
//Validate Prediction
var prediction = $("#submit_idea [name='prediction']").val();
if (!prediction) {
errors += ' - Please discribe the prediction you want to solve\n';
}
//Validate constraints
var constraints = $("#submit_idea [name='constraints']").val();
if (!constraints) {
errors += ' - Please discribe the constraints of your solution\n';
}
//Validate Categories
// var categories = $("#submit_idea [name='categories[]']:checked").length;
//if (!categories) {
// errors += ' - Please select the category your solution falls within\n';
//}
if (errors){
errors = 'The following errors occurred:\n' + errors;
alert(errors);
return false;
} else {
// Submit our form via Ajax and then reset the form
$("#submit_idea").ajaxSubmit({success:showResult, type: 'post'});
return false;
}
}
function showResult(data) {
if (data == 'save_failed') {
alert('Form save failed, please contact your administrator');
return false;
} else {
$("#submit_idea").clearForm().clearFields().resetForm();
alert('Form save success');
return false;
}
}
PHP:
<?php
//Starts session
include_once '/includes/db_connect.php';
include_once '/includes/functions.php';
sec_session_start();
if(login_check($mysqli) == true) {
// Retrieve form data
if (empty($_POST)){
echo "empty!"; }
if(isset($_POST['submit_idea'])){
if(isset($_POST['title'])){ $title = $_POST['title']; }
if(isset($_POST['brief'])){ $brief = $_POST['brief']; }
if(isset($_POST['problem'])){ $problem = $_POST['problem']; }
if(isset($_POST['solution'])){ $solution = $_POST['solution']; }
if(isset($_POST['audience'])){ $audience = $_POST['audience']; }
if(isset($_POST['prediction'])){ $prediction = $_POST['prediction']; }
if(isset($_POST['constraints'])){ $constraints = $_POST['constraints']; }
// if(isset($_POST['categories'])){ $categories = $_POST['categories']; }
if (!$title || !$brief || !$problem || !$solution || !$audience || !$prediction || !$constraints) {
echo "save_failed";
return;
}
//
//Convert categories array to a serialized string
// $categories_list = serialize($categories);
//if (!$link) {
// echo "save_failed";
// return;
//}
//mysql_select_db($db['idea']);
// Clean variables before performing insert
$clean_title = $mysqli->real_escape_string($title);
$clean_brief = $mysqli->real_escape_string($brief);
$clean_problem = $mysqli->real_escape_string($problem);
$clean_solution = $mysqli->real_escape_string($solution);
$clean_audience = $mysqli->real_escape_string($audience);
$clean_prediction = $mysqli->real_escape_string($prediction);
$clean_constraints = $mysqli->real_escape_string($constraints);
// $clean_categories_list = mysql_real_escape_string($categories_list);
}
else {
// Perform insert
$now = time();
$user_id = $_SESSION['user_id'];
if(!$stmt = $mysqli->prepare("INSERT INTO idea_thread (user_id, time, title, Brief, problem, solution, audience, prediction, constraints) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")) {echo "Prepare failed!";}
if(!$stmt->bind_param('issssssss', $user_id, $now, $clean_title, $clean_brief, $clean_problem, $clean_solution, $clean_audience, $clean_prediction, $clean_constraints)){echo "Binding parameters failed:";}
if(!$stmt->execute()){echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;}
// if (@mysql_query($sql, $link)) {
echo "success";
}
// return;
//} else {
// echo "save_failed";
// return;
//}
} else {
echo "How did you get here? Please log in first!";
header("Location: ../signup.php");
exit;
}
?>
All help appreciated, thanks!
EDIT: ajaxSubmit is a jquery form plugin that is sourced from this;
As you can see in your php code and the result of your
var_dump($_POST)
thesubmit_idea
is never submitted therefore, it never goes to theif is_set($_POST['submit_idea'])
to set other posted values to proper variables.Submit that value in your form or change your condition in php