2017-07-19 20 views
-1

でnullまたは空の外部キーに私はPHPでデータベースとフォームについての問い合わせがありますデータ挿入PHP

私は、次のユーザーテーブル

CREATE TABLE IF NOT EXISTS `login`.`usuarios` (
    `nombres` VARCHAR(30) NULL, 
    `apellidos` VARCHAR(30) NULL, 
    `cedula` VARCHAR(13) NOT NULL, 
    `telefono` VARCHAR(15) NULL, 
    `direccion` VARCHAR(45) NULL, 
    `sexo` VARCHAR(10) NULL, 
    `sesion_id` INT(10) NOT NULL, 
    PRIMARY KEY (`cedula`), 
    INDEX `fk_usuarios_sesion_idx` (`sesion_id` ASC), 
    CONSTRAINT `fk_usuarios_sesion` 
    FOREIGN KEY (`sesion_id`) 
     REFERENCES `login`.`sesion` (`id`) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE) 
ENGINE = InnoDB; 

を持っていると私はセッションテーブルを持っています

CREATE TABLE IF NOT EXISTS `login`.`sesion` (
    `id` INT(10) NOT NULL AUTO_INCREMENT, 
    `correo` VARCHAR(45) NULL, 
    `usuario` VARCHAR(10) NULL, 
    `password` VARCHAR(100) NULL, 
    `last_session` DATETIME NULL, 
    `activacion` INT NULL, 
    `token` VARCHAR(40) NULL, 
    `token_password` VARCHAR(100) NULL, 
    `password_request` INT(11) NULL, 
    `id_tipo` INT(11) NULL, 
    `estatus` INT(2) NULL, 
    PRIMARY KEY (`id`)) 
ENGINE = InnoDB; 

これらは、1対1の関係にあります。メインセッションキーは、外部キーi nユーザー。

PHPでは、ユーザー用のフォームがあります。すべてがテーブルに挿入されていますが、sesionsテーブルのIDがautoincrementなのは、ユーザー自身が外国語で書かれていないので、問題は1つしかありません。

この時点で私は既にシステムに複数のユーザーを登録していますが、すべてがうまく挿入されますが、外部キーは常に空です。セッションの自動インクリメントが割り当てられた番号には関連付けられません。

次のように私はそれを行う挿入するには:

function registraUsuario($nombres, $apellidos, $cedula, $telefono, $direccion, $sexo){ 

    global $mysqli; 

    $stmtr= $mysqli->prepare("INSERT INTO usuarios (nombres, apellidos, cedula, telefono, direccion, sexo) VALUES(?,?,?,?,?,?)"); 
    $stmtr->bind_param('ssssss', $nombres, $apellidos, $cedula, $telefono, $direccion, $sexo); 

    if ($stmtr->execute()){ 
     return true; 
    } else { 
     return 0; 
    } 

}

function registraSesion($email, $usuario, $pass_hash, $activo, $token, $tipo_usuario, $estatus){ 

    global $mysqli; 

    $stmt = $mysqli->prepare("INSERT INTO sesion (correo, usuario, password, activacion, token, id_tipo, estatus) VALUES(?,?,?,?,?,?,?)"); 
    $stmt->bind_param('sssisii', $email, $usuario, $pass_hash, $activo, $token, $tipo_usuario, $estatus); 

    if ($stmt->execute()){ 
     return $mysqli->insert_id; 
    } else { 
     return 0; 
    } 

} 

私はそれがNULL入れていない場合ので、私は、私はNULLとして外部キーを持っていると言わなければならない追加、単にユーザー(名前、姓、名前)に登録するデータは登録されていませんが、外部キーを除いてすべてが不都合なく登録されていればNULLになります。

私はこの問題を手伝ってもらえますか、もしあなたが私のやり方や私が間違っていることを教えてもらえますか?

+0

ここで、セッションIDを使用してusersテーブルを更新しようとしていますか? – Shadow

+0

更新ステートメントを発行することによって... – Shadow

+0

@ Shadow これは何をしたいのですか 私はどのようにしてsesion_idがuserテーブルにあるのかを知りたいのですが、それはプライマリとして持つIDに従って更新されますテーブルセションのキー。 – rodrigo2324

答えて

1

コードについてしか話していない場合は、まずセッションを登録してからセッションIDを取得してから、ユーザー登録を行う必要があります。

しかし、伝統的な考え方では、sessionテーブルはuserテーブルからの外部キーを持っている必要がありますが、その逆はありません。

+0

私はちょうどコメントの中で、セッションが従属テーブルであることについて同じことを言っていました。私もそうだと思います。 – ArtisticPhoenix

+0

私はこれが正しいと思います - ユーザーはセッションなしで存在することができますが、ユーザーがいないセッションが存在する可能性があります。これを考えると、ヌルIDが気になることは決してありません。 – ArtisticPhoenix

+0

しかし、セッションテーブルにユーザーのメインキーを渡すと、同じままになるので、同じです。私の質問は、その外部キーを埋める方法に焦点が当てられていますか?文章の書き方が分かりません – rodrigo2324