2017-04-21 50 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

相關問題