2017-07-30 13 views
0

ちょっとPHP/MySqliが新しくなっていますので、特定のIDのScanstatusフィールドが既に "スキャンされている"場合、更新前に確認したいと思います。すでにスキャン済みの場合は「既にスキャン済み」、それ以外の場合は「更新済み」と表示されます。更新前のPHP/Mysqliチェック

以下のコードは更新のみで、既に存在するかどうかはチェックしません。

使用if(mysqli_affected_rows($mysqli) > 0)またはまったく比較:

<?php 
$id = $_POST['id']; 

$connection = mysqli_connect("localhost", "username", "passwd","dbname"); 
if(mysqli_connect_errno()) 
{ 
    echo "failed to connect " . mysqli_connect_error(); 
} 

if(isset($_POST['Submit'])) 
{ 

    $query = "UPDATE `sales` SET `ScanStatus` = 'Scanned' WHERE `id` = $id"; 
    $result = mysqli_query($connection,$query); 

    if (!$result) { 
    die('Error' . mysqli_error($connection)); 
    } 
    else 
    { 
    echo "Successfully updated"; 
    } 
} 
?> 
+0

あなたのコードあなたはまだ[プリペアドステートメント](http://php.net/manual/en/mysqli.quickstartで簡単に見てみてくださいPHP&MySQLのについて学んでいるとして、SQLInjections攻撃に対して脆弱です。 prepared-statements.php) – hassan

答えて

-1

あなたはこのコードを使用することができます。

これであなたのコードを置き換えます。ボタン "ISSET($ _ POST [ '送信'])" 真であることとに指示しますが、[送信]をクリックしたとき

<?php 
$id = $_POST['id']; 

$connection = mysqli_connect("localhost", "username", "passwd","dbname"); 
if(mysqli_connect_errno()) 
{ 
    echo "failed to connect " . mysqli_connect_error(); 
} 

if(isset($_POST['Submit'])) 
{ 

    $my_query = mysqli_query($connection, "SELECT * FROM `sales` WHERE `id` = ". $id . " AND `ScanStatus` = 'Scanned'"); 
    if(mysqli_num_rows($my_query) > 0){ 
     echo "Already ScanStatus is Scanned"; 
    } 
    else{ 
     $query = "UPDATE `sales` SET `ScanStatus` = 'Scanned' WHERE `id` = ".$id; 
     //echo $query;die; 
     $result = mysqli_query($connection, $query); 

     if(mysqli_affected_rows($connection) > 0){ 
      echo "Successfully updated"; 

      /* get new updated data */ 
      $new_query = mysqli_query($connection, "SELECT * FROM `sales` WHERE `id` = '$id' LIMIT 1"); 
      $new_info = mysqli_fetch_array($new_query); 
      echo "<pre>"; print_r($new_info); 

     } 
     else 
     { 
      echo "Not updated"; 
     } 
    } 
} 
?> 
+0

あなたは本当にあなたの答えを試しましたか?選択されたクエリでIDを確認せず、間違った条件をチェックしています。 –

+0

あなたは 'SELECT'クエリを実行しており、結果をどこにフェッチしていますか? 'SELECT'を実行するポイントは何ですか? –

+0

あなたは 'mysqli_affected_rows'を使用すると言いましたが、どこで使用しましたか? –

0

は、PHPコード

$id = $_POST['id']; 

$connection = mysqli_connect("localhost", "username", "passwd","dbname"); 
if(mysqli_connect_errno()) 
{ 
echo "failed to connect " . mysqli_connect_error(); 
} 

else{ 
if(isset($_POST['Submit'])) 
{ 
$sql = "UPDATE sales SET ScanStatus = 'Scanned' WHERE id = '$id'"; 
     $result = $connection->query($sql); 
    if ($result->num_rows > 0) { 

       echo "Successfully updated"; 

     } else { 
     die('Error' . mysqli_error($connection)); 
     } 
} 
}  

を以下試してみてくださいifステートメント。 sqlコマンドを実行し、SQLクエリが影響を受けた結果があれば、 "$ result-> num_rows> 0"の真の後に次のif文に入り、 "Successfully updated"を返します。

+0

"試してください"あなたはどのような変更を行ったのか説明する必要がありますか?どうして?理由は..誰もが理解できるように。あなたはOPを試してほしい場合は、コメントと答えではなく、より良い使用するよりも。 –

0

私は理解しているように、あなたはScanStatusフィールドだからあなたは、レコードをフェッチする必要がなく、このようなあなたの既存のクエリを変更することができますScanned

ない場合にのみ更新したい:

$query = "UPDATE `sales` SET `ScanStatus` = 'Scanned' WHERE `id` = $id AND `ScanStatus` != 'Scanned'"; 

だけの変更上記と使用にクエリ:

if(mysqli_affected_rows($result) > 0){

ここでは、完全なコードです:

<?php 

$connection = mysqli_connect("localhost", "username", "passwd","dbname"); 
if(mysqli_connect_errno()) { 
    echo "failed to connect " . mysqli_connect_error(); 
} 

if(isset($_POST['Submit'])) { 
    $id = $_POST['id']; 
    $query = "UPDATE `sales` SET `ScanStatus` = 'Scanned' WHERE `id` = $id AND `ScanStatus` != 'Scanned'"; 
    $result = mysqli_query($connection, $query); 

    if(mysqli_affected_rows($connection) > 0){ 
     echo "Successfully updated"; 
    } 
    else { 
     echo 'Already Scanned'; 
    } 
} 
+0

これはうまくいかない...... – A2zbollywood

+0

それはどんなエラーを投げているのですか? 'ScanStatus'!= 'Scanned'の' $ id'をチェックしておきたいと思います。 –

+0

私は初心者ですから完全な例を教えてください。私は何かを見逃しているかもしれません。 – A2zbollywood

関連する問題