2016-11-21 6 views
0

ここにコードがあります。私が望むすべての要素を完璧に表示します。しかし、「登録」をクリックすると、選択した要素の要素が1つだけ登録されます。考えられる問題は何ですか?データベースにあるすべての要素にアクセスできません

は、ここでは、コードです:あなたが提出enrollボタンと一緒にスクリプトに希望のコースIDを送信していなかったので、

if(array_key_exists("id", $_SESSION)) { 

    include("connection.php"); 
    $query = "SELECT * from `classes`";  

    echo '<div id="accordion" role="tablist" aria-multiselectable="true"> '; 

    $result = mysqli_query($link, $query); 
    $results = array(); 

    $rows = array(); 
    $queries = array(); 

    while($row = mysqli_fetch_array($result)) { 
     array_push($rows, $row); 
    } 

    for ($i = 0; $i < count($rows); $i ++) { 

     $name = $rows[$i]["name"]; 
     $start_time = $rows[$i]["begTime"]; 
     $end_time = $rows[$i]["endTime"]; 

     $price = $rows[$i]["price"]; 
     $places = $rows[$i]["placesAvailable"]; 

     if (array_key_exists("enroll", $_POST)) { 
      $queries[$i] = "UPDATE `users` SET sectionID = ".$rows[$i]["ID"]." WHERE id = ".mysqli_real_escape_string($link, $_SESSION['id'])." LIMIT 1"; 

      $results[$i] = mysqli_query($link, $queries[$i]);    
     } 

     echo ' 
      <div class="card"> 
       <div id = "section" class="card-header" role="tab" id="headingOne"> 
        <h5 class="mb-0"> 
         <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> 
          '.$name.' 
         </a> 
        </h5> 
       </div> 

       <div id="collapse" class="collapse in" role="tabpanel" aria-labelledby="headingOne"> 
        <div class="card-block"> 
        '.$name.' 
         <p> <strong> Time: </strong>'.$start_time.' - '.$end_time.' </p> 
         <p> <strong> Price: </strong>'.$price.' </p> 
         <p> <strong> Places available: </strong>'.$places.' </p> 
         <form action="" method = "post"> 
          <input class="btn btn-success" type="submit" name = "enroll" value = "Enroll"> 
         </form> 
        </div> 
       </div> 
      </div>    
     '; 
    } 
    echo '</div>'; 
} 
+0

更新クエリで1つのアイテム(ユーザー)のみを更新します。 'あなたは何をしたいのか分かりませんが、あなたのフォームにデータを投稿する必要があります。 –

+0

私は、コースに登録するユーザーを希望します。私は、コースのリストとそれぞれのボタンに「登録」するページがあります。ボタンを次にクリックした後特定のコースに、現在のユーザーがコースに登録したというデータベースを更新したいのですが、これを達成するためにコードを変更するにはどうすればよいですか? –

答えて

0

あなたのロジックはかなり正しくありませんでした。 私はそうするためにあなたのコードを適合させました。 このロジックは、ユーザー/学生がその時点で1つのクラスにのみ登録する必要がある場合にのみ機能します。

if(array_key_exists("id", $_SESSION)) { 

include("connection.php"); 

     if (array_key_exists("enroll", $_POST)) { 
      $query = "UPDATE `users` SET sectionID = ".mysqli_real_escape_string($link, $_POST["ID"])." WHERE id = ".mysqli_real_escape_string($link, $_SESSION['id'])." LIMIT 1"; 

      mysqli_query($link, $query); 
     } 


    $query = "SELECT * from `classes`"; 


    echo '<div id="accordion" role="tablist" aria-multiselectable="true"> '; 

    $result = mysqli_query($link, $query); 

    while($row = mysqli_fetch_array($result)) { 

     $name = $row["name"]; 

     $start_time = $rows["begTime"]; 

     $end_time = $rows["endTime"]; 

     $price = $rows["price"]; 

     $places = $rows["placesAvailable"]; 



     echo ' 

      <div class="card"> 
       <div id = "section" class="card-header" role="tab" id="headingOne"> 
        <h5 class="mb-0"> 
         <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> 
          '.$name.' 
         </a> 
        </h5> 
       </div> 

       <div id="collapse" class="collapse in" role="tabpanel" aria-labelledby="headingOne"> 
        <div class="card-block"> 
        '.$name.' 
         <p> <strong> Time: </strong>'.$start_time.' - '.$end_time.' </p> 
         <p> <strong> Price: </strong>'.$price.' </p> 
         <p> <strong> Places available: </strong>'.$places.' </p> 
         <form action="" method = "post"> 
          <input type="hidden" name="ID" value="'.$row["ID"].'" /> 
          <input class="btn btn-success" type="submit" name = "enroll" value = "Enroll"> 
         </form> 
        </div> 
       </div> 
      </div> 

     '; 
    } 

    echo '</div>'; 

} 

UPDATE は、ユーザーがチェックボックスアレイにのみ1フォームを必要とする複数のコースを選択させます。 $_POST["ID"]はクラスIDの配列になります。下のサンプルでは、​​sectionIDが文字列であると仮定して、データベースにシリアライズされて格納されています。アレイにjson_encodeアレイを保存してからデータベースに保存することもできます。 sectionIDを数値にするには、各ユーザーのすべてのクラスを格納するために新しいテーブルを作成する必要があります。

if(array_key_exists("id", $_SESSION)) { 

include("connection.php"); 

     if (array_key_exists("enroll", $_POST)) { 
      $query = "UPDATE `users` SET sectionID = ".mysqli_real_escape_string($link, serialize($_POST["ID"]))." WHERE id = ".mysqli_real_escape_string($link, $_SESSION['id'])." LIMIT 1"; 

      mysqli_query($link, $query); 
     } 


    $query = "SELECT * from `classes`"; 


    echo ' <form action="" method = "post"> 
      <div id="accordion" role="tablist" aria-multiselectable="true"> '; 

    $result = mysqli_query($link, $query); 

    while($row = mysqli_fetch_array($result)) { 

     $name = $row["name"]; 

     $start_time = $rows["begTime"]; 

     $end_time = $rows["endTime"]; 

     $price = $rows["price"]; 

     $places = $rows["placesAvailable"]; 



     echo ' 

      <div class="card"> 
       <div id = "section" class="card-header" role="tab" id="headingOne"> 
        <h5 class="mb-0"> 
         <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> 
          '.$name.' 
         </a> 
        </h5> 
       </div> 

       <div id="collapse" class="collapse in" role="tabpanel" aria-labelledby="headingOne"> 
        <div class="card-block"> 
        '.$name.' 
         <p> <strong> Time: </strong>'.$start_time.' - '.$end_time.' </p> 
         <p> <strong> Price: </strong>'.$price.' </p> 
         <p> <strong> Places available: </strong>'.$places.' </p> 

          <input type="checkbox" name="ID[]" value="'.$row["ID"].'" />Enroll 
        </div> 
       </div> 
      </div> 

     '; 
    } 

    echo '</div> 
    <input class="btn btn-success" type="submit" name = "enroll" value = "Submit"> 
    </form>'; 

} 
+0

ありがとうございます!ユーザーはいくつかのコースに登録する? –

関連する問題