0

誰かがこれを手伝ってくれることを願っています。

現在、サイトの個々の製品ページから「カートに追加」オプションがあり、「pid」を変数としてカート ページに送信し、完全に機能します。pid を取得するカート ページのコードは次のとおりです。

if (isset($_POST['pid'])) {
$pid = $_POST['pid'];

ただし、新しいコードを書き直したくないので、残りのコード全体で機能することがわかっているので、 $pid の取得方法を変更したいと思います。これが答えになると思いました。

if (isset($_POST['product_code'])) {
$prodAdd = $_POST['product_code'];
$pid = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");

明らかに明白な何かを見ることができる人はいますか? 製品名として $pid を強制的に割り当てると、問題なく動作し、$prodAdd をエコーアウトできるので、クエリの問題であるとしか思えません。私が考えることができるほぼすべて!

ああ、誰かが助けてくれるなら、私は実際に用語を = ではなく LIKE にしたいと思いますが、動作するコードで十分です。

どうもありがとう、ジョー

4

3 に答える 3

0

SQLインジェクションの問題とは別に、問題は、クエリがIDを返さず、成功時にリソースを返すことです。

あなたはおそらくそれを次のように変更したいと思うでしょう(そしてエラー処理を追加します...):

$result = mysql_query("SELECT id FROM products WHERE product_name='$prodAdd' LIMIT 1'");
if ($row = mysql_fetch_assoc($result)) {
    $pid =  $row['id'];
}
于 2012-04-17T14:27:28.283 に答える
0

product_codeまあ、私はあなたが列に格納されていないと仮定しますproduct_name:

$pid = mysql_query("SELECT id FROM products WHERE product_code='$prodAdd' LIMIT 1'");

行を正しくフェッチしていると仮定します。($pid単なる結果リソースです...)

SQL インジェクションからデータベースを保護してください! あなたのコードは、現在の形式では非常に脆弱です:

if (isset($_POST['product_code'])) {
  // At a minimum, escape $prodAdd with mysql_real_escape_string()
  // This is NOT OPTIONAL! YOU MUST DO THIS!
  $prodAdd = mysql_real_escape_string($_POST['product_code']);
  $pid = mysql_query("SELECT id FROM products WHERE product_code='$prodAdd' LIMIT 1'");

  if (!$pid) {
    // query error
    echo mysql_error();
  }
  else {
    // All results into $products (though you limited it to 1)
    $products = array();
    while ($row = mysql_fetch_assoc($pid)) {
      $products[] = $row;
    }

    // If you expect exactly one result, no need for a loop
    // $product = mysql_fetch_assoc($pid);

    // Get the value you need:
    var_dump($products);
  }
}

これを にしたい場合は、次のLIKEように連結して%ください:

$pid = mysql_query("SELECT id FROM products WHERE product_name LIKE '%$prodAdd%' LIMIT 1'");
于 2012-04-17T14:21:14.700 に答える
0

mysql_query は、後で処理される結果リソースを返しますmysql_num_rows, mysql_fetch_array。 などの他の mysql 関数を購入します。次の行をコードに追加してみてください。

$pid = mysql_fetch_assoc($pid);
$pid = $pid[0]['id'];

mysql_query が構文的に正しい場合は、pid を取得する必要があります。それでもうまくいかない場合echo mysql_error();は、正確に何が問題なのかを確認してください。

于 2012-04-17T14:25:57.747 に答える