2017-04-21 77 views
0

我遇到了将子行插入到我的数据库中的问题。生病总是得到错误插入错误:SQLSTATE [23000]:完整性约束违规:1452不能添加或更新子行,外键约束失败(dokuserver,约束kunde->server外键(kunden_id)参考文献kundenid))完整性约束违规:1452无法将子行添加或更新到我的数据库中

守则是

<form method="POST" action="server-eintragen.php"> 
       <div class="form-group"> 
        <label for="firmenname">Servername</label> 
        <input type="text" class="form-control" name="name" placeholder="Servername" > 
       </div> 
       <div class="form-group"> 
        <label for="Addresse">Bestückung</label> 
        <input type="text" class="form-control" name="CPU" placeholder="Welche CPU?" > 
        <input type="text" class="form-control" name="CPU-Anzahl" placeholder="Wieviele Sockets?" > 
        <input type="text" class="form-control" name="RAM" placeholder="Wieviel RAM" > 
        <input type="text" class="form-control" name="Festplatte" placeholder="Wie groß ist die Festplatte" > 
        <input type="hidden" class="form-control" name="kunden_id" value=<?php htmlentities($_GET['kundenid']) ?> > 
       </div> 
       <div class="form-group"> 
        <button type="submit" class="btn btn-primary">Abschicken</button> 
       </div> 
      </form> 

<?php 
error_reporting(E_ALL); 
error_reporting(-1); 

include "../../includes/php/db.php"; 
$name = htmlentities($_POST['name']); 
$cpu = htmlentities($_POST['CPU']); 
$cpu_anzahl = htmlentities($_POST['CPU-Anzahl']); 
$ram= htmlentities($_POST['RAM']); 
$festplatte = htmlentities($_POST['Festplatte']); 
$created_at = date("Y-m-d H:i:s"); 
$updated_at = date("Y-m-d H:i:s"); 
$kunden_id = htmlentities($_POST['kundenid']); 

$stmt = $dbh->prepare('INSERT INTO server (name, cpu, cpu_anzahl, ram, festplatte, created_at, updated_at, kunden_id)VALUES(:name, :cpu, :cpu_anzahl, :ram, :festplatte, :created_at, :updated_at, :kunden_id)'); 

try { 
    $stmt->execute(
     array(
      'name' => $name, 
      'cpu' => $cpu, 
      'cpu_anzahl' => $cpu_anzahl, 
      'ram' => $ram, 
      'festplatte' => $festplatte, 
      'created_at' => $created_at, 
      'updated_at' => $updated_at, 
      'kunden_id' => $kunden_id 
     ) 
    ); 
} 
catch (PDOException $e) 
{ 
    echo 'Insert Error: ' . $e->getMessage() . "\n"; 
} 

?> 

我Databasedesign是这样的:http://www.directupload.net/file/d/4698/vczudxas_jpg.htm

+0

那么'$ kunden_id'的值是什么,它存在于数据库中吗? – jeroen

+0

我认为你在$ kunden_id变量中获得一个id,它在父表(kunden)中不可用.kindly打印该变量以查看其值 – Shahrukh

+0

$ kunden_id在我的测试用例3中,这是kunde(客户)在我的数据库中。是的,回声也是“3”,所以它应该存在于我的数据库中,但在服务器端的客户端[ID]的柱子中存在,我想用新的服务器数据 – n1ghty

回答

0

你忘记了隐藏字段值的引号,如果你添加它们,它不是空的,一切都应该正常工作。

此外,您应该检查参数的空白,并且还应该检查kunde是否存在kunden_id,因为可以操作POST参数并更新用户没有权限的kunde。

此外,您只需要ヶ辆输出,如果你有实体插入,你与实体输出,这是错误的,因为你可以在这里看到:https://3v4l.org/5dNGO

提示:使用像Eclipse的IDE或PHPStorm如果你可以负担得起,然后你第一眼看到它。只要看看你的代码就可以了。

+0

谢谢。如果我想插入多行到我的数据库与外键(kunden_id)我怎么做因为它必须是唯一的或索引?像我想有一个客户的3个服务器,但仍然链接到客户ID – n1ghty

+0

如果它的工作,你可以请接受答案?:D它必须是一个索引,而不是唯一的,像这样:http://sqlfiddle.com/#!9/629366/2 – devsteff

1

的错误是自我解释Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

当两个表与foreign key关系绑定说

tbl_parent(id) -> tbl_child(cid); // here cid refers to id 

然后在cid列,只能插入那些已经存在于id列值。

而在你的情况下,我想你试图插入一个值在父表中不存在的父表中。

所以按你最后的评论$kunden_id为空在那里,所以我不能插入空白是不存在的父表(如父表中引用列是唯一或主键列

+0

是的,但是在我的id colum中有值“3”,这等于我的插入... http://www.directupload.net/file/d/4698/3tidwhvz_jpg .htm – n1ghty

+0

回显准备并查询并在mysql终端上运行它,看看会发生什么 –

+0

手动工作。所以我的代码中必定有一些错误。 – n1ghty

相关问题