2015-10-14 65 views
0

下面的代碼(reg_org.php)明顯的事情是,登記要求:外鍵沒有在子表中添加一行,雖然被照顧的

<?php 
session_start(); 
if(!empty($_POST)) 
{ 
    $msg=""; 

    if(empty($_POST['org_name']) || empty($_POST['org_domain']) || empty($_POST['org_admin_name']) || empty($_POST['org_admin_email']) || empty($_POST['org_admin_pass1']) || empty($_POST['org_admin_pass2'])) 
    { 
     $msg.="<li>Please full fill all requirement"; 
    } 

    if($_POST['org_admin_pass1']!=$_POST['org_admin_pass2']) 
    { 
     $msg.="<li>Please Enter your Password Again....."; 
    } 

    if(!ereg("^[a-z0-9_]+[a-z0-9_.]*@[a-z0-9_-]+[a-z0-9_.-]*\.[a-z]{2,5}$",$_POST['org_admin_email'])) 
    { 
     $msg.="<li>Please Enter Your Valid Email Address..."; 
    } 


    if(strlen($_POST['org_admin_pass1'])>20) 
    { 
     $msg.="<li>Please Enter Your Password in limited Format...."; 
    } 

    if(is_numeric($_POST['org_name']) || is_numeric($_POST['org_admin_pass1'])) 
    { 
     $msg.="<li>Names must be in String Format..."; 
    } 

    if($msg!="") 
    { 
     header("location:index.php?error=".$msg); 
    } 
    else 
    { 
    $orgname = $_POST['org_name']; 
    $orgdmn = $_POST['org_domain']; 
    $orgadmin = $_POST['org_admin_name']; 
    $orgadminmail = $_POST['org_admin_email']; 
    $orgadminpass = $_POST['org_admin_pass1']; 
    $link=mysql_connect("localhost","root","")or die("Can't Connect..."); 

      mysql_select_db("educon",$link) or die("Can't Connect to Database..."); 
       $query="insert into institutes(inst_nm,inst_dmn) 
      values('$orgname','$orgdmn')"; 
       $res = mysql_query($query,$link) or die("Can't Execute Query... ".mysql_error()); 
     $query="insert into users(u_name,u_pwd,u_email,u_type) 
      values('$orgadmin','$orgadminpass','$orgadminmail','admin')"; 
     $res = mysql_query($query,$link) or die("Can't Execute Query... ".mysql_error()); 
       $_SESSION=array(); 
       $_SESSION['unm']=$orgadmin; 
       $_SESSION['type']="admin"; 
       $_SESSION['status']=true; 
       header('location:profile_admin.php'); 
} 
} 
else 
{ 
    header("location:index.php"); 
} 
?> 

在代碼中,根據規則父表(研究所)是在子表(用戶)之前創建的,子列與父列完全相同,但我面臨以下問題:

無法執行查詢...無法添加或更新子項行:外鍵約束失敗(educonusers,CONSTRAINT users_ibfk_1 FOR橫生KEY(inst_id)參考文獻institutesinst_id)ON DELETE CASCADE ON UPDATE CASCADE)

+0

我很抱歉,排在父表在子表之前在父表中創建!而不是在子表之前創建父表。 –

回答

0

INSERT INTO users語句未供給用於inst_id列中的值。當該語句運行時,inst_id列將被分配該列的默認值(作爲表格中列定義的一部分進行聲明)。默認值也可以被BEFORE INSERT觸發器中的賦值覆蓋。

MySQL錯誤指示插入users表中的行的值爲inst_id,該值在引用(父)institutes表中存在的值不存在。

如果您要引用剛剛插入到institutes表中的行,您需要檢索剛剛插入的行的inst_id列的值。

如果inst_idinstitutes是一個AUTO_INCREMENT列,那麼緊跟在您的INSERT INTO institutes語句之後,您可以檢索已分配的值。有幾個機制可以做到這一點。 MySQL提供了LAST_INSERT_ID()功能...

https://dev.mysql.com/doc/refman/5.6/en/information-functions.html#function_last-insert-id

PHP MySQL的庫提供了自己的功能,以更輕鬆地訪問這個函數的返回值。

棄用 mysql_擴展

http://php.net/manual/en/function.mysql-insert-id.php

(請注意:警告文檔中有關使用替代mysql_擴展庫MySQLi或PDO)