2017-11-26 17 views
0

最新の更新:コードを整理しましたが、まだいくつかの問題があります。 このコードは3秒ごとに実行されます。最も外側の 'else'ステートメントは実行されているように見えますが、データベーステーブルで時間を0に設定していますが、アクティビティはありません。 実行の最初の時間の後、一番外側の 'else'ステートメントは決して実行されるべきではなく、ユーザーのエイリアスの下に保存された時間値は最新のタイムスタンプで更新され続けるべきですが、単に '0'にあります。PHPを使用してSQLテーブル行を正しく更新する方法

//CHECK FOR NEW CHAT MESSAGES 
setInterval(function() 
{ 
    $.post("chat_update.php", function(data) { $("#rect_comments_text").append(data);} ); 
}, 3000); 

コード:

<?php 
    session_start(); 
    $alias = $_SESSION['username']; 

    $host = 'localhost'; 
    $user = '*'; 
    $pass = '*'; 
    $database = 'vethergen_db_accounts'; 
    $table = 'table_messages'; 
    $time_table = 'table_chat_sync'; 
    $connection = mysqli_connect($host, $user, $pass) or die ("Unable to connect!"); 
    mysqli_select_db($connection,$database) or die ("Unable to select database!"); 
    $timestamp = time(); 

    $last_time_query = "SELECT alias FROM $time_table"; 
    $last_time_result = mysqli_query($connection,$last_time_query); 
    $last_time_rows = mysqli_fetch_array($last_time_result); 

    if ($last_time_rows['alias'] === $alias) 
    { 
     $last_time = $last_time_rows['time']; 
     $query = "SELECT * FROM $table WHERE time > $last_time ORDER BY text_id ASC"; //SELECT NEW MESSAGES 
     $result = mysqli_query($connection,$query); 

     //APPEND NEW MESSAGES 
     while($row = mysqli_fetch_array($result)) 
     { 
      if ($row['alias'] === "Vether") 
      { 
       echo '<p id = "chat_text">'.'<b>'.$row['alias'].'</b>'.': '.$row['text']."</p>"; 
       echo '<p id = "time_stamp">'.$row['time'].'</p>'; 
       echo '<p id = "chat_number">'.$row['text_id'].'</p>'; 
      } 
      else 
      { 
       echo '<p id = "chat_text">'.'<b class = "bold_green">'.$row['alias'].'</b>'.': '.$row['text']."</p>"; 
       echo '<p id = "time_stamp">'.$row['time'].'</p>'; 
       echo '<p id = "chat_number">'.$row['text_id'].'</p>'; 
      } 
      echo '<hr class = "chat_line"></hr>'; 
     } 

     //UPDATE LAST SYNC TIME 
     $update_query = "UPDATE $time_table SET time = '$timestamp' WHERE alias = '$alias'"; 
     mysqli_query($connection,$update_query); 
    } 
    else 
    { 
     echo '<p> HERE </p>'; 
     $update_query = "INSERT INTO $time_table (alias, time) VALUES('$alias','0')"; 
     mysqli_query($connection,$update_query); 
    } 



?> 
+3

「UPDATE」は新しいレコードを作成できません。既存のレコードを変更することはできます。また、準備されたステートメントを使用して調べる必要があります。 –

+0

準備が整いました – Vether

答えて

0

あなたが唯一の挿入するかどうかにmysqli_num_rowsをチェックする必要があり、この

$sql_update = "UPDATE time_table SET time= '$timestamp' WHERE alias = '$alias'"; 
if ($con->query($sql_update) === TRUE) { 
} 
else{ 
    echo "Error: " . $sql_update . "<br>" . $con->error; 
} 
0

を試してみてください

この

は、PHPファイルを実行しますJSでありますまたはデータを更新する。あなたは $aliasのあちこちに 'を追加しなければなりません。

//EITHER UPDATE THE EXISTING VALUE OR CREATE ONE FOR FIRST TIME VISITORS... 
$last_time_query = "SELECT * FROM $time_table WHERE alias = '$alias'"; //change here add ' 
$last_time_result = mysqli_query($connection,$last_time_query); 
if (mysqli_num_rows($last_time_result) == 0) //Only check number of rows 
{ 
    $update_query = "INSERT INTO $time_table (alias, time) VALUES('$alias','$timestamp')"; 
    mysqli_query($connection,$update_query); 
} 
else 
{ 
    $update_query = "UPDATE $time_table SET time = '$timestamp' WHERE alias = '$alias'"; 
    mysqli_query($connection,$update_query); 
} 
関連する問題