2016-05-12 9 views
0

私のテーブルにmoodleの項目を追加する際に問題が発生しました。これは私が成功していないものです。moodleに複数のレコードを追加する

$totalrec = array(); 
$rec2 = $DB->get_records('table1', null, '', '*', 0, 0); 
$rec4 = $DB->get_records('table2', array('x' => 'y') , '', '*', 0, 0); 

foreach ($rec2 as $records2) { 
    $rec3 = $DB->get_records('z', array('m' => 'n') , '', '*', 0, 0); 
    foreach ($rec3 as $records3) { 
     if (isset($_REQUEST['a']) && isset($_REQUEST['b'])) { 
      $ca = $_REQUEST['a']; 
      $co = $_REQUEST['b']; 
      $pi = $records2->idp; 
      $recorsh = new class(); 

      $recorsh->id = $records2->id; 
      $recorsh->te = $co; 
      $recorsh->idt = $ti; 
      $recorsh->res = $ca; 
      $recorsh->ida = $idaud; 
      $totalrec[$n] = array($recorsh); 
      $n++; 
     } 
    } 
} 

$lastinsertid2 = $DB->insert_records('table4', $totalrec); 

と、この1:

$rec2 = $DB->get_records('table1', null, '', '*', 0, 0); 
$rec4 = $DB->get_records('table2', array('x' => 'y') , '', '*', 0, 0); 

foreach($rec2 as $records2) { 
    $rec3 = $DB->get_records('z', array('m' => 'n') , '', '*', 0, 0); 
    foreach($rec3 as $records3) { 
     if (isset($_REQUEST['a']) && isset($_REQUEST['b'])) { 
      $ca = $_REQUEST['a']; 
      $co = $_REQUEST['b']; 
      $pi = $records2->idp; 
      $recorsh = new class(); 

      $recorsh->id = $records2->id; 
      $recorsh->te = $co; 
      $recorsh->idt = $ti; 
      $recorsh->res = $ca; 
      $recorsh->ida = $idaud; 
      $lastinsertid = $DB->insert_record('table4', $recorsh, false); 
     } 
    } 
} 

それらの両方が私に「データベースへの書き込みエラー」を与えるが、特定の何かを言っていない、私は "私は挿入をやっていないよということを知っています私は間違って何をしているのですか?

+0

デバッグが開発者(HTTPS://docs.moodle.org/en/Debugging)に設定されていることを確認すると、より意味のあるエラーが発生するはずです。 $ _REQUESTではなく、required_pa​​ram/optional_paramも使用してください。 – davosmith

答えて

1

これは、挿入する前に各オブジェクトにIDが追加されたためです。

$recorsh->id = $records2->id; 

davosmithと同様、開発時には常に開発者レベルに設定されたデバッグがあります。あなたのconfig.phpで

この

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', 0); 

$CFG->debug = E_ALL | E_STRICT; // 32767; 
$CFG->debugdisplay = true; 

はまた、これまで直接$ _REQUESTまたは$ _GETや$ _POSTを使用したことがありません。これはSQLインジェクションを導入することができます。

あなたが期待しているパラメータのタイプに使用

$a = optional_param('a', null, PARAM_XXX); 
$b = optional_param('b', null, PARAM_XXX); 

または

$a = required_param('a', PARAM_XXX); 
$b = required_param('b', PARAM_XXX); 

変更PARAM_XXX。例えばPARAM_INT,など

関連する問題