2016-05-18 5 views
0

特定のアパートメントの可用性を変更するPHPコードを作成しようとしています。ここに私のコードは次のとおりです。Mysqlテーブルセルがクリック時に値を変更しない

<!DOCTYPE html> 
<html> 

    <head> 
     <title></title> 
    </head> 

    <body> 

     <?php 

      $servername = "localhost"; 
      $username = "bla"; 
      $password = "blabla"; 
      $dbname = "testDB"; 

      // Create connection 
      $connect = mysqli_connect($servername, $username, $password, $dbname); 

      // Check connection 
      if ($connect->connect_error) { 
       die("Connection failed: " . $connect->connect_error); 
      }else{ 
       echo "Connected successfully to the database: " . $dbname . "<br><br>"; 
      } 

      $query = "SELECT * FROM test"; 
      $result = mysqli_query($connect, $query); 
      $row = mysqli_fetch_array($result); 

      echo "id: " . $row["id"] . " // Address: " . $row["address"] . " // Rooms: " . $row["rooms"] . " // Availability: " . $row["availability"] . ".<br>"; 
      ?> 
       <form method ="post" action ="<?php $_PHP_SELF ?>"> 
        <input name="update" type="submit" value="Change Availability"> 
       </form> 
      <?php 

      if(isset($_POST["update"])) { 
       $avail = mysqli_query($connect,"SELECT availability FROM test WHERE id='1'"); 
       $availCheck = mysqli_fetch_array($avail); 
       settype($availCheck, "int"); 

       if($availCheck == 1){ 
        $upAvail = mysqli_query($connect,"UPDATE test SET availability='0' WHERE id='1'"); 
       }else{ 
        $upAvail = mysqli_query($connect,"UPDATE test SET availability='1' WHERE id='1'"); 
       } 
      } 

     ?> 

    </body> 

</html> 

そして、これは私が手に出力されます:データベースへの接続に成功しました

:TESTDB

ID:1 //住所:3787コートデネージュ//部屋: 2 //在庫状況:1. 在庫状況の変更

ここに私の問題があります。可用性が1でボタンを押すと0に変わります。その後、ボタンをもう一度押すと、1に戻りません。

なぜですか?

ありがとうございました。

答えて

0

あなたはavailabilityを切り替えていません。 mysqli_fetch_arrayは、id(id = 1)と一致するtestテーブルからローをフェッチします。したがって、空でない配列を整数にキャストした後に$availCheckは常に1になります。

すべてのロジックを単一のMySQLクエリで置き換えて、値を切り替えることができます。

UPDATE test SET availability = IF(availability = 1, 0, 1) WHERE id=1 

私はあなたがやりたいことだと思う:

$availCheck = mysqli_fetch_array($avail)['availability']; 
+0

はあなたにそれを解決したので、多くの@noahnuをありがとうございました!しかし、私に聞かせてください。私のロジックを使って同じことをする方法はありますか?クリックごとに利用可能な値を取得し、変数に保存してからifステートメントを使用して値を変更しますか?ちょうど教育的理由から。 – Rorrim

+0

はい。私は私の答えを編集しました。最後のコードスニペットを参照してください。 mysqli_fetch_arrayがNULL/falseでないかどうかをチェックしてから、連想インデックスにアクセスしようとすることをお勧めします。 – noahnu

+0

はい、私はあなたに尋ねた直後に私自身の質問に答えました!もう一度、ありがとう! @noahnu – Rorrim

関連する問題