我在尝试插入数据库时遇到了一些错误,主要关注的是我不断收到错误:
无法添加或更新子行
这是我的用户表:
users:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | | |
| email | varchar(25) | NO | | | |
| avatar | varchar(60) | NO | | | |
| username | varchar(25) | NO | | | |
| password | varchar(25) | NO | | | |
| about | text | NO | | | |
+----------+-------------+------+-----+---------+----------------+
这里我只有一个条目,它是索引1
这是我的categoryf表:
categoryf:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | | |
| descri | text | NO | | | |
+----------+-------------+------+-----+---------+----------------+
这里我也有1个条目,还有索引1
这是主题类别:
topic:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| c_id | int(11) | NO | | | |
| user_id | int(11) | NO | | | |
| avatar | varchar(60) | NO | | | |
| title | varchar(25) | NO | | | |
| body | text | NO | | | |
+----------+-------------+------+-----+---------+----------------+
c_id(category_id)
和user_id
是表categoryf
和user
这是我使用的表格:
<form method="post" action="create.php">
<div class="form-group">
<label>Наслов</label>
<input type="text" name="title" class="form-control">
</div>
<div class="form-group">
<label>Вашата Дискусија</label>
<textarea class="form-control" name="post_text" rows="10" cols="80"></textarea>
<script>CKEDITOR.replace('post_text');</script>
</div>
<div class="form-group">
<label>Категорија</label>
<select class="form-control" name="category">
<?php foreach(Categoryf_id() as $category) : ?>
<option><?php echo $category['name']; ?></option>
<?php endforeach ;?>
</select>
</div>
<button type="submit" name="post" class="btn btn-primary">Креирајте Дискусија</button></a>
</form>
其中Categoryf_id是:
function Categoryf_id()
{
$db = new Database();
//Create Query Category name
$query="SELECT * FROM categoryf";
//Run Query Category name
$row=$db->select($query);
return $row;
}
最后我的帖子功能:
function Post()
{
$db=new Database();
if(isset($_POST['post']))
{
$title = mysqli_real_escape_string($db->link, $_POST['title']);
$post_text = mysqli_real_escape_string($db->link, $_POST['post_text']);
$category = mysqli_real_escape_string($db->link, $_POST['category']);
}
$query= "INSERT INTO topic
(category_id, user_id, title, body)
VALUES('$category', '".$_SESSION['id']."', '$title', '$post_text')";
$insert_row = $db->insert($query);
}
我知道我的查询是正确的,因为我在phpmyadmin中使用它来添加一个主题,其中使用的id仅为1,但在这里我得到这些错误:
Notice: Undefined variable: category in /opt/lampp/htdocs/PHP- Wizard/helpers/query.php on line 132
Notice: Undefined variable: title in /opt/lampp/htdocs/PHP-Wizard/helpers/query.php on line 132
Notice: Undefined variable: post_text in /opt/lampp/htdocs/PHP-Wizard/helpers/query.php on line 132
Cannot add or update a child row: a foreign key constraint fails (`PHPWizard`.`topic`, CONSTRAINT `topic_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `categoryf` (`id`))47
我甚至试图用mysql_query('SET foreign_key_checks = 0');
删除外键检查,但没有运气。
我在Stack Overflow上搜索了其他问题,也没有运气。
是什么导致了这个问题,我该如何解决?
如果这篇帖子很长,我也很抱歉,但我想我需要显示这部分的所有代码,如果有人要帮我的话。
答案 0 :(得分:2)
我怀疑在layout_weight
定义为$category
时将topic.category_id
作为字符串处理可能会让您感到悲伤。将您的查询更改为准备好的语句(出于此原因以及众多其他原因),如下所示:
INT(11)
这允许驱动程序层自动处理引用,转义特殊字符和数据类型匹配。
希望有所帮助。
答案 1 :(得分:1)
存在可变范围问题,
请定义
function Post()
{
$title = '';
$post_text = '';
$category = '';
$db=new Database();
if(isset($_POST['post']))
{
$title = mysqli_real_escape_string($db->link, $_POST['title']);
$post_text = mysqli_real_escape_string($db->link, $_POST['post_text']);
$category = mysqli_real_escape_string($db->link, $_POST['category']);
}
$query= "INSERT INTO topic
(category_id, user_id, title, body)
VALUES('$category', '".$_SESSION['id']."', '$title', '$post_text')";
$insert_row = $db->insert($query);
}
答案 2 :(得分:0)
我修好了。
事实证明,在我的html中,在选项部分我将其设置为<option value="<?php echo $category['name']
,而不是<option value="<?php echo $category['id']
。我想当我设置按钮时,它正在寻找一个字符串而不是一个整数。傻傻的我