2017-10-30 19 views
0

3つのテーブルがあります。 B、参照あり;位置と参照の間の関係を行うCとC。各位置は複数の参照を持つことができますが、その反対は許されません。 私のルーチン: 位置と参照の間の関係を保存するページがフォームからsubmit buttomによって読み込まれたとき、私はこれを行います: 1.この位置が存在するかどうかを確認します はいの場合は2に行きます。 いいえの場合は、エラー。 2.この参照が存在するかどうかを確認します。 「はい」の場合は、この参照とこの位置の間の関係を追加します。 いいえの場合は、この参照を追加した後に、この参照とこの位置の間の関係を追加します。テーブルから最後に追加したエントリを別のテーブルに挿入します。

これは私の基本ルーチンです。私の問題?参照が存在しない場合、スクリプトは新しい参照を追加した後、新しい参照と位置の間の関係を追加します...しかし、うまくいきません。最初に、スクリプトは参照を追加するだけですが、関係を追加しないでください...私はページに戻って必要があり、再び作業に追加する必要があります。

マイコード:リロードページなしで、DBへと後に新しい参照を追加します。私は正常に動作すること、これを行うための別の方法を知らない

<?php 
#verify if this position exists at db 
if(!empty($_POST['position'])) { 
    $query_position = "SELECT `PositionsId`, `PositionsIdentifier` from `positions` WHERE `PositionsId` = '".$_POST['position']."'"; 
    $select_position = mysqli_query($connect, $query_ref); 
    #if yes, proceed to insert the new reference into this position... 
    if (mysqli_num_rows($select_position)) { 
     #verify if the reference exists at DB 
     if(!empty($_POST['ref'])) { 
      $query_ref = "SELECT `ReferencesId`, `ReferencesIdentifier` from `references` WHERE `ReferencesIdentifier` = '".$_POST['ref']."'"; 
      $select_ref = mysqli_query($connect, $query_ref); 
      if (mysqli_num_rows($select_ref)) { 
       $list_ref = mysqli_fetch_array($select_ref, MYSQLI_ASSOC); 
       #verify if this reference exists to this position 
       $query_reference = "SELECT `PositionRefId`, `PositionsRef_PosId`, `PositionRef_RefId` FROM `positions_refs` WHERE `PositionsRef_PosId` = '".$id."' AND `PositionsRef_RefId` = '".$list_ref['ReferencesId']."'"; 
       $select_reference = mysqli_query($connect, $query_reference); 
       if (mysqli_num_rows($select_reference)) { 
        echo "This reference exists to this position..."; 
       } 
       else { 
        #insert this reference to this position 
        $query_insert_reference = "INSERT INTO `positions_refs` (`PositionsRef_PosId`, `PositionRef_RefId`) VALUES ('".$id."','".$list_ref['ReferencesId']."')"; 
        if (mysqli_query($connect, $query_insert_reference)) { 
         echo "OK."; 
        } 
        else { 
         echo "Error."; 
         echo "<br /><br />"; 
         echo mysqli_error($connect); 
        } 
       } 
      } 
      else { 
       #if don't exists at db, insert the new reference 
       if(!empty($_POST['ref'])) { 
        $query_insert_ref = "INSERT INTO `references`(`ReferencesIdentifier`) VALUES ('".$_POST['ref']."')"; 
        if (mysqli_query($connect, $query_insert_ref)) { 
         #select the new reference ID 
         $query_new_ref = "SELECT `ReferencesId`, `ReferencesIdentifier` from `references` WHERE `ReferencesIdentifier` = '".$_POST['ref']." LIMIT 1'"; 
         $select_new_ref = mysqli_query($connect, $query_new_ref); 
         if (mysqli_num_rows($select_new_ref)) { 
          $list_new_ref = mysqli_fetch_assoc($select_new_ref, MYSQLI_ASSOC); 
          #insert the new reference to this position 
          $query_insert_reference = "INSERT INTO `positions_ref`(`PositionsRef_PosId`, `PositionRef_RefId`) VALUES ('".$id."','".$list_new_ref['ReferencesId']."')"; 
          if (mysqli_query($connect, $query_insert_reference)) { 
           echo "OK."; 
          } 
          else { 
           echo "Error."; 
          } 
         } 
         else { 

         } 
        } 
        else { 
         echo "Error."; 
        } 
       } 
       else { 
        echo "Error"; 
       } 

      } 
     } 
     else { 
      echo "Error"; 
     } 
    } 
} 
else { 
    echo "Error."; 
} 
?> 

... これを行うにはどのような方法を持っていますなど、この新しい参照を位置に追加しますか?

おかげで、

+1

あなたのコードはに対して脆弱である[** SQLインジェクション**](HTTPSを://en.wikipedia.org/wiki/SQL_injection)攻撃。あなたは[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)または[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)ドライバ。 [**この記事**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)には、いくつかの良い例があります。 –

+0

私は正直に言えば、あなたの言及と位置の説明は私を混乱させる。しかし、あなたのコードを見て、私はあなたの2つの挿入ステートメントは、同じテーブルに挿入されていない気づいた...? INSERT INTO 'positions_refs' ....他のINSERT INTO' variantsref'は...それは普通ですか?最終的なコメント、あなたは取引を調べるべきです。 3つのクエリのうちの1つが失敗すると、参照整合性が損なわれる可能性があります(またはdbレベルで処理されます)。そして準備された声明! – Nic3500

+0

こんにちは、 私はこれを修正しましたが、それは同じテーブルです。私はクエリを表示し、存在する場合はエラーを表示しますが、このスクリプトを実行すると、参照が存在しない場合は挿入されますが、この新しい参照を目的の位置に挿入しません。もう一度追加してみてください... この参照と位置の間の関係を追加するために最後の参照からIDを取得するのに問題があると思いますが、それが問題かどうかわかりません。 – Rafael

答えて

関連する問題