0

MySQL テーブルの一意の値から生成された多数のチェックボックスを含むフォームがあります。

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
    $query5="SELECT distinct from_user from tracks WHERE uploaded_page='$this_path_short' ORDER BY from_user";
    $result5=mysql_query($query5) or die(mysql_error());
    while ($row = mysql_fetch_array($result5)) {
        $from_user = $row['from_user'];
        echo "<input type=\"checkbox\" name=\"from_user[]\" value=\"AND ".$from_user."\" checked=\"checked\">".$from_user."<br>";
    }
?>
<input type="submit" name="submit" value="filter"><br>

次に、「from_user」値の配列をページ上の別の MySQL クエリに渡したいと思います。次のような値を取得できます。

$names=implode(" ", $_POST['from_user']);

しかし、次の MySQL クエリにこの配列を含める方法がわかりません。

$query1="SELECT * FROM tracks WHERE from_user IN **array goes here**)";
4

2 に答える 2

0
$query1='SELECT * FROM tracks WHERE from_user IN ('.implode(',',$_POST['from_user']).')';
于 2012-08-11T11:29:41.607 に答える
0

を削除しANDて、チェックボックスの値が次のようになるようにします。

echo "<input type=\"checkbox\" name=\"from_user[]\" value=\"".$from_user."\" checked=\"checked\">".$from_user."<br>";
    }

INコンマ区切りの値が必要です:

$names=implode(",", $_POST['from_user']);    
$query1="SELECT * FROM tracks WHERE from_user IN (".$names."))";

!!!! しかし、あなたのコードはSQLインジェクションに対して広く開かれているので、準備されたステートメントを使用してください: http://php.net/manual/de/mysqli.prepare.php

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

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

$result = null;
$names = implode(",", $_POST['from_user']);  

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT * FROM tracks WHERE from_user IN (?)")) {

  /* bind parameters for markers */
  $stmt->bind_param("s", $names);

  /* execute query */
  $stmt->execute();

  /* bind result variables */
  $stmt->bind_result($result);

  /* fetch value */
  $stmt->fetch();

  print_r($result);

  /* close statement */
  $stmt->close();
}

/* close connection */
$mysqli->close();
于 2012-08-11T11:35:14.017 に答える