2016-08-14 9 views
0

データベースにユーザーを追加するためにバッチアップロード機能を作成しようとしています。 、バッチアップロードのwhileループwhile mysqli結果なし

$excel = new Spreadsheet_Excel_Reader(); 
$excel->read($target_file); 

     $company = mysql_prep($_POST["company"]); 

while($x<=$excel->sheets[0]['numRows']) { 
      $username = isset($excel->sheets[0]['cells'][$x][1]) ? $excel->sheets[0]['cells'][$x][1] : ''; 
      $email = isset($excel->sheets[0]['cells'][$x][2]) ? $excel->sheets[0]['cells'][$x][2] : ''; 

      //generate random password 
      $password = generate_random_password(); 

      //hash the password 
      $hashed_password = password_encrypt($password); 
      $status = "Employee"; 

      //save details in db 
      $result = add_single_user($username, $hashed_password, $email, $status, $company); } 

このループの外から呼び出されたときに結果を返すadd_single_user機能:私は、DBへの単一のユーザーの詳細情報を追加して機能を持っている、と私は、Excelシートから読み込むwhileループ内からそれを呼び出します上記のようにユーザーを挿入することはありません。私は値がExcelのリーダーによって読み込まれ、割り当てられていることを確認しました。ここでは関数は次のとおりです。

INSERTクエリの
function add_single_user($username, $hashed_password, $email, $status, $company){ 
global $connection; 
$safe_username = mysqli_real_escape_string($connection, $username); 
$safe_email = mysqli_real_escape_string($connection, $email); 
$safe_status = mysqli_real_escape_string($connection, $status); 
$safe_company = mysqli_real_escape_string($connection, $company); 

$query = "INSERT INTO users ("; 
$query .= " username, hashed_password, email, status, company"; 
$query .= ") VALUES ("; 
$query .= " '{$safe_username}', '{$hashed_password}', '{$safe_email}', '{$safe_status}', '{$safe_company}'"; 
$query .= ")"; 
$result = mysqli_query($connection, $query); 
return $result; 

}

+0

最初に簡単なデバッグ/トラブルシューティング:mysqli_queryが実行される直前に、$ query文字列を画面/ブラウザにエコーします。あなたが期待しているSQLが表示されたら - あなたのPHP管理SQLウィンドウにコピー/ペーストして、それをテストしてください – dbmitch

+0

@dbmitchありがとうございます。前にコピー/貼り付けを試みましたが、これはトラブルシューティングのより良い方法です。私がそこにあったことを知らなかったデータベースフィールドの1つに制限がありました。とても有難い。 – SeemsLegit57

答えて

0

mysqli_querytrueまたはfalseのいずれかを返す必要があります。

実際には、$connectionにDB接続のオブジェクトが含まれていると仮定すると、(DBに挿入されるVALUES部分の中括弧は別として)クエリが機能するはずです。

mysqli_connect_error()またはmysqli_error()が(何らかのエラーがDBへの接続を確立することにし、クエリを実行するに存在する場合それはとにかくコントロールに良い習慣だ)接続またはクエリ内のエラーをcomunicateかどうかを確認してください。

さらに、mysql_prep、real_escape_string、およびmysqli_queryの代わりにprepared statementsを使用することをお勧めします。これは注入に対して有効ではないためです。