过去一小时已经过了这个,无法弄清楚可能导致错误的原因.以前我通过mysql中的命令行填充数据库.它工作正常.但我想为不懂linux/line命令等的普通用户添加GUI元素.
所以我决定添加一个将发布到php的html表单.我以前在另一种形式上做过,所以无法弄清楚可能导致错误的原因.
这是html表单:
<form action="insertjob.php" method="post" class="basic-grey">
<label>Job Title:</label><input type="text" name="job_title" id="job_title"/><br>
<label>Job Description:</label><input type="text" name="job_description" id="job_description"/><br>
<label>Job Location:</label><input type="text" name="job_location" id="job_location"/><br>
<label>Job Category:</label><input type="text" name="job_category" id="job_category"/><br>
<input type="submit" name=submit value="Submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
然后,当用户按下提交...它导致...
insertjob.php
<?php
$user = "root";
$password = "*****";
$host = "********";
$dbase = "jobslist";
$table = "jobs_list";
$job_title= $_POST['jobtitle'];
$job_description= $_POST['jobdescription'];
$job_location= $_POST['joblocation'];
$job_category= $_POST['jobcategory'];
$dbc= mysqli_connect($host,$user,$password,$dbase)
or die("Unable to select database");
$query= "INSERT INTO $table ". "VALUES ('$job_title', '$job_description', '$job_location', '$job_category')";
mysqli_query ($dbc, $query)
or die ("Error querying database");
//header('Location: thankyou.html');
mysqli_close($dbc);
?>
Run Code Online (Sandbox Code Playgroud)
我检查过这不是数据库问题.我不认为这是一个连接问题,因为我检查了开发人员工具并且没有错误.我怀疑它可能是变量?
表单元素的名称属性包含单词之间的下划线:
<label>Job Title:</label><input type="text" name="job_title" id="job_title"/><br>
^
<label>Job Description:</label><input type="text" name="job_description" id="job_description"/><br>
^
<label>Job Location:</label><input type="text" name="job_location" id="job_location"/><br>
^
<label>Job Category:</label><input type="text" name="job_category" id="job_category"/><br>
^
Run Code Online (Sandbox Code Playgroud)
但是你的POST变量没有:
$job_title= $_POST['jobtitle'];
^
$job_description= $_POST['jobdescription'];
^
$job_location= $_POST['joblocation'];
^
$job_category= $_POST['jobcategory'];
^
Run Code Online (Sandbox Code Playgroud)
所以改为:
$job_title= $_POST['job_title'];
$job_description= $_POST['job_description'];
$job_location= $_POST['job_location'];
$job_category= $_POST['job_category'];
Run Code Online (Sandbox Code Playgroud)
使用错误报告http://php.net/manual/en/function.error-reporting.php会发出"未定义索引..."通知.
$query= "INSERT INTO $table VALUES ('$job_title', '$job_description', '$job_location', '$job_category')";
mysqli_query ($dbc, $query) or die(mysqli_error($dbc));
Run Code Online (Sandbox Code Playgroud)
另外,提交按钮的name属性周围缺少引号.
<input type="submit" name=submit value="Submit"/>
^^^^^^
Run Code Online (Sandbox Code Playgroud)
如果您的输入数据包含MySQL可能不同意的字符,例如撇号,您也应该同时使用stripslashes()和mysqli_real_escape_string().更不用说保护免受注射(更多内容见下文).
诺塔:
您现在的代码对SQL注入是开放的.使用准备好的语句,或PDO与准备好的语句,它们更安全.
脚注:
通常最好实际使用插入的列名.
从他们的例子:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
$query= "INSERT INTO $table (job_title, job_description, job_location, job_category)
VALUES ('$job_title', '$job_description', '$job_location', '$job_category')";
Run Code Online (Sandbox Code Playgroud)
另一件事是利用mysqli_error()你的优势,以获得真正的错误,如果某个地方出现问题.
$dbc= mysqli_connect($host,$user,$password,$dbase)
or die("Error " . mysqli_error($dbc));
Run Code Online (Sandbox Code Playgroud)
将错误报告添加到文件的顶部,这将有助于查找错误.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Run Code Online (Sandbox Code Playgroud)
旁注:错误报告应该只在暂存中完成,而不是生产.
编辑:检查所有字段是否设置为空:
您也可以替换isset()为!empty():
if(isset($_POST['job_title'])
&& isset($_POST['job_description'])
&& isset($_POST['job_location'])
&& isset($_POST['job_category'])
)
{
$job_title= $_POST['job_title'];
$job_description= $_POST['job_description'];
$job_location= $_POST['job_location'];
$job_category= $_POST['job_category'];
}
Run Code Online (Sandbox Code Playgroud)
根据我们的对话,解决方案是使用:
$query= "INSERT INTO $table (id, job_title, job_description, job_location, job_category)
VALUES ('','$job_title', '$job_description', '$job_location', '$job_category')";
Run Code Online (Sandbox Code Playgroud)
关于你得到的错误,是:
列数与第1行的值计数不匹配
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |