2016-05-26 17 views
0

1つの関数内に4つのクエリがあります。これは、再開を作成するためのnsertです。これには、教育、雇用、スキル、およびそれらに加わる主なCVが含まれます。すべてが実行されていない場合、複数のクエリからの成功メッセージを返す

CVを作成するときに、上記のもの(教育、仕事、スキル)を作成するために、必ずしもすべての異なるフォームに記入するわけではありませんが、1回の成功メッセージを返す必要があります。それ以外の場合、私は使用することはできません:行数にそれはそれらまたはnoneのすべての値を返しますので、どのように私はエコーすることができますので:

Alert::success('adding_resume', true); 

一度にもそれらのいくつかのフォームが空の場合。

ちょうどそれのいずれかを確認せずにすべてを挿入しようと、あなたがこのについて移動するための奇妙な方法のように思えるが、あなたはこれを行うことができます
public static function create_resume() 
{ 

    // Let's define the rules and filters 
    $rules = array(
     'resume_title' => 'max_len,100|required', 
     'expected_level' => 'max_len,100|required', 
     'expected_salary' => 'required|max_len,12|integer', 
     'work_location' => 'max_len,100', 
     'year_experience' => 'max_len,100|integer' 
    ); 


    //validate the info 
    $validated = FormValidation::is_valid($_POST, $rules); 

    // Check if validation was successful 
    if($validated !== TRUE):  

     //exit with an error 
     exit(Alert::error(false, true, $validated)); 

    endif; 

    //initate db 
    $database = DatabaseFactory::getFactory()->getConnection(); 


    //sql to run 
    $sql = "INSERT INTO resumes 
      (
       resume_title, 
       resume_work_level, 
       resume_total_work_experience, 
       resume_salary, 
       resume_work_country, 
       resume_about, 
       resume_user, 
       resume_date_created 
      ) 
      VALUES 
      (
       ?, 
       ?, 
       ?, 
       ?, 
       ?, 
       ?, 
       ?, 
       ? 
      )"; 

    //run the sql 
    $resume = $database->prepare($sql); 
    $resume->execute(array(Request::post('resume_title'), Request::post('expected_level'), Request::post('year_experience'), 
         Request::post('expected_salary'), Request::post('work_location'), Request::post('about'), Session::get('id'), 
         date("Y-m-d"))); 


    //results? 
    if($resume->rowCount()) 
    { 

     //resume id 
     $resume_id = $database->lastinsertid(); 

     //create employment 
     $sql_employment = "INSERT INTO employment 
          (
           employment_company, 
           employment_name, 
           employment_datestart, 
           employment_dateend, 
           employment_description, 
           employment_country, 
           employment_user, 
           employment_resume 
          ) 
          VALUES 
          (
           ?, 
           ?, 
           ?, 
           ?, 
           ?, 
           ?, 
           ?, 
           ? 
          )"; 

     //run the sql 
     $employments = $database->prepare($sql_employment); 

     //if they have more than 1 
     foreach($_POST['experience'] as $employment): 
      $employments->execute(array($employment['company'], $employment['title'], date("Y-m-d", strtotime($employment['year_begin'])), 
            date("Y-m-d", strtotime($employment['year_finish'])), $employment['notes'], $employment['country'], 
            Session::get('id'), $resume_id)); 
     endforeach; 

     if($employments->rowCount()) 
     { 

      //sql to run 
      $education_sql = "INSERT INTO education 
           (
            education_institute, 
            education_degree, 
            education_dateobtained, 
            education_dateexpires, 
            education_description, 
            education_user, 
            education_date, 
            education_resume 

          ) 
           VALUES 
           (
            ?, 
            ?, 
            ?, 
            ?, 
            ?, 
            ?, 
            ?, 
            ? 
          )"; 

      //run the sql 
      $educations = $database->prepare($education_sql); 

      //for multiple education 
      foreach(Request::post('education') as $education): 
       $educations->execute(array($education['institution'], $education['degree'], date("Y-m-d", strtotime($education['year_begin'])), 
            date("Y-m-d", strtotime($education['year_finish'])), $education['about'], Session::get('id'), date("Y-m-d"), 
            $resume_id)); 

      endforeach; 

      //results 
      if($educations->rowCount()) 
      { 
       //sql to run 
       $sql_skill = "INSERT INTO skills 
           ( 
            skill_type, 
            skill_percent, 
            skill_user, 
            skill_resume 
          ) 
           VALUES 
           (
            ?, 
            ?, 
            ?, 
            ? 
          )"; 
       //run the sql 
       $skills = $database->prepare($sql_skill); 

       //for each skill 
       foreach(Request::post('skill') as $skill): 
        $skills->execute(array($skill['name'], $skill['percentage'], Session::get('id'), $resume_id)); 
       endforeach; 

       //the results? 
       if($skills->rowCount()) 
       { 
        Alert::success('adding_resume', true); 
       }else{ 
        Alert::alert('adding_resume', true); 
       } 
      }else{ 
       Alert::error('adding_resume', true); 
      } 

     }else{ 
      Alert::error('adding_resume', true); 
     } 

    }else{ 
     Alert::error('adding_resume', true); 
    } 

} 

答えて

0

  1. 最初はブール値を作成します。 falseに設定します。
  2. 各クエリの後に、結果を確認します。
  3. 結果が真である場合は、ブール変数をtrueに変更します。結果がfalseの場合、ブール変数を変更しないでください。

  4. すべてのクエリが実行された後、ブール変数がtrueの場合、少なくとも1つのクエリが成功しました。

例コード:

$good_query = false; 

<build sql query for resume stuff> 

$check = $resume->execute(<blah>); 

if ($check) { $good_query = true; } 

<build sql query for employment stuff> 

$check = $resume->execute(<blah>); 

if ($check) { $good_query = true; } 

<build sql query for education stuff> 

$check = $resume->execute(<blah>); 

if ($check) { $good_query = true; } 

<build sql query for skills stuff> 

$check = $resume->execute(<blah>); 

if ($check) { $good_query = true; } 

の$ good_queryが最後に真である場合は、クエリの少なくとも一方が成功しました。

関連する問題