2017-10-31 28 views
0

私はシステムを作成していますが、その一部には土曜日のシフトから従業員を削除する必要があります。これを行うには、JavaScript関数「removeEmpFromSaturday」を呼び出すアイコンをクリックし、対応するパラメータを送信します。AJAX呼び出しでデータベースが更新されない

このスクリプトでは、Ajaxリクエストによってデータベースを更新し、従業員を土曜日のシフトから削除する必要があります。

しかし、私が指しているPHPページは、決して実際に呼び出されたり、要求されたりすることはありません(「PHPページで警告します」)。

私は比較的新しいAJAXです。この関数では私の構文が完全に間違っている可能性がありますので、追加のポインターがあれば幸いです。

参照のため、「id、loc、week、year」の値を警告すると、私は期待している正しい値を返しますので、問題はありません。以下は

は、私は問題があると考えているコードです:

<script> 

function removeEmpFromSaturday(id, loc, week, year){ 

    xhttp = new XMLHttpRequest(); 
    xhttp.open("GET", "includes/ajax/remove_emp_from_saturday.php?e_id=" + id + 
         "&location=" + loc + "&week=" + week + "&year=" + year, false); 
    xhttp.send(); 
    resetPlanner(); 
} 

</script> 

私はあまりにも向いていますPHPコード:

<?php require_once dirname(__FILE__)."/../admin_header.php" ;?> 

<script>alert("STARTED");</script> 

<?php 

if(isset($_REQUEST['e_id'])){ 
    $emp_id = escape($_REQUEST['e_id']); 
    $loc = escape($_REQUEST['location']); 
    $week = escape($_REQUEST['week']); 
    $year = escape($_REQUEST['year']); 

    $query = "SELECT e_hp_daily_pat FROM employees WHERE e_id = '{$emp_id}' "; 
    $get_hp_daily_pat_query = mysqli_query($connection, $query); 
    $row = mysqli_fetch_assoc($get_hp_daily_pat_query); 
    $e_hp_daily_pat = escape($row['e_hp_daily_pat']); 

    $query = "SELECT * FROM slots WHERE s_location = '{$loc}' AND s_day = '6' 
     AND s_week = '{$week}' AND s_year = '{$year}' "; 
    $get_emps_query = mysqli_query($connection, $query); 
    $row = mysqli_fetch_assoc($get_emps_query); 
    $s_real_sub = escape($row['s_real_sub']); 
    $s_emps = escape($row['s_emps']); 
    $s_emps = explode(";", $s_emps); 
    $process = false; 
    $e_match = 0; 
    foreach($s_emps as $emp){ 
     if($emp == $emp_id){ 
      unset($s_emps[$e_match]); 
      $process = true; 
      } 
     $e_match++; 
    } 

    if($process == true){ 
     $s_emps = implode(";", $s_emps); 
     $s_real_sub -= $e_hp_daily_pat; 
     $query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week} AND s_year = '{$year}' "; 
     $set_emps_query = mysqli_query($connection, $query); 
     } 
    } 
?> 

<script>alert("COMPLETE");</script> 

そして、誰もがそれを言及する前に、私は私はないですのでご了承下さい私のパラメータをバインドし、それはmysqliで少し古いです、私は後でそれを更新します。

+0

"PHPページの警告で実証されました" - これは証拠ではありません。 PHPスクリプトの出力を新しいWebページとしてブラウザに読み込んでいるわけではありません。あなたはPHPスクリプトの出力で**何も**していません。 – Quentin

+0

@クエンティンは言った:あなたのパスをチェックしましたか?ファイルがあなたが言うところにあると確信していますか? :) – Jordumus

+0

あなたが問題を抱えている場所をデバッグするには、デバッグするためにecho文を正しく実行するサーバーコールを実行してください。 –

答えて

1

あなたの更新クエリにエラーがあります、あなたのPHPコードをデバッグしないようにしてみてください:あなたはs_week

$query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week}' AND s_year = '{$year}' "; 

一般的なアドバイスの後に「'」が欠落している

$query = "UPDATE slots SET s_emps = '{$s_emps}', s_real_sub = '{$s_real_sub}' WHERE s_location = '{$loc}' AND s_day = '6' AND s_week = '{$week} AND s_year = '{$year}' "; 

<script>alert("")</script>を使用してください。代わりに、PHP内から直接echo呼び出しを使用してください。

これは、PHPが見つかって解析されることを保証します。

+0

あなたは完全にスポットです。素晴らしい発見。私は将来、あなたが参照している正確な言語でデバッグするだけで、そのアドバイスを受け取ります。ありがとう! – cmprogram

+1

問題はありません、あなたのプログラムには幸運です。 – Jordumus

+0

GETではなくPOSTリクエスト(またはDELETE)を使用することをお勧めします。 GETのセマンティクスは、要求がサーバーの状態に副作用を伴わないことを意味します。その結果、後続のGET要求がキャッシュされることがあります。 削除クエリには明らかな副作用があり、キャッシュされることは望ましくありません。 – orgasmix

関連する問題