2

私はあなたがここで見ることができるアプリケーションを持っています。アプリを開くと、送信ボタンが表示されます。ボタンをクリックするだけで、その下に文字列が生成されることがわかります。ボタンをクリックし続けると、文字「A」と「B」の間に 2 つの文字列が生成され続けます。

「SessionId」列の下のデータベースにある場合、行文字列「AB」にあります。次に、送信ボタンをクリックし続けると、文字列「AB」が生成されません。私はこれをテストしましたが、これはうまくいきます。したがって、文字列の末尾に数字が含まれていない場合、これは問題になりません。

私が抱えている問題はこれです。複数の試験を作成したい場合。文字列が「AA」で、3 つの試験があるとします。複数の「AA」があるため、データベースに文字列「AA」を挿入しません。代わりに、データベース内の各「AA」の後に数字を連結して、 「AA1」「AA2」「AA3」と表示されます。

しかし、問題は、これを行うと、アプリを再度使用して「送信」ボタンをクリックし続けると、文字列「AA」が使用されていたため、実行すべきではない文字列「AA」が生成されることがわかります。データベースを「AA1」、「AA2」、「AA3」とします。現時点では、データベースにこれら 3 つの値がありますが、アプリケーションで文字列が生成されます。

私の質問は、文字列がデータベースにあり、最後に数字が連結されている場合、アプリケーションで文字列を生成しないようにするにはどうすればよいですか?

以下は、アプリケーションのコードです。

<?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }


function id_generator(){ 

          $id = ""; 
          $a = array( "A" , "B", "C" ); 

      for( $i = 0 ; $i < 2 ; $i++ ){ $r = rand( 0 , 1 );
       $id .= $a[ $r ]; 

   }

   return $id;

   };

   $is_there = true;

      while( $is_there ){
    $id = id_generator(); // your function to generate id;
    $result = "SELECT SessionId FROM Session WHERE SessionId LIKE CONCAT(?, '%')";

    $stmt=$mysqli->prepare($result);
    // You only need to call bind_param once
    $stmt->bind_param("1",$id);
    // execute query
    $stmt->execute(); 
    // get result and assign variables (prefix with db)
    $stmt->bind_result($dbSessionId);

    $stmt->store_result();

    $stmtnum = $stmt->num_rows();

    if($stmtnum == 0) {
    $is_there = false;
}
}

 ?>

    <h1>CREATING A NEW ASSESSMENT</h1>

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
        <p>
        <input id="courseSubmit" type="submit" value="Submit" name="submit" />
        </p>
        </form>

        <?php
if (isset($_POST['submit'])) {

        ?>




        <br/>

         <form action="QandATable.php" method="post" id="sessionForm">
         <p><strong>1: Your Assessment ID: </strong><span id="idFont"><?php echo $id; ?></span></p>
         <input type='hidden' name='id' value='<?php echo $id; ?>' />


        </form>



        <?php

        }
        ?>

    </body>
</html>
4

1 に答える 1

1
// You only need to call bind_param once
$stmt->bind_param("1",$id);

これを次のように変更します。

// You only need to call bind_param once
$stmt->bind_param("s",$id);

bind_param関数の最初の引数は、それがどのタイプのパラメーター(つまり、string、intなど)であるかをパーサーに通知します。http://php.net/manual/en/mysqli-stmt.bind-param.php

于 2012-11-05T01:38:45.797 に答える