-1

mySQL テーブルの値を更新できません。以下の私のコードでoptionは、の形式です[["test",0],["opt",0]]。に更新したい[["test",1],["opt",0]]

<?php
if (isset($_POST['submit']))
{ 
$opt=$_POST['xyz'];
mysql_connect("localhost","root","");
 mysql_select_db("test"); 
 $sqlstmt="select * from polls where question='".$_POST['name']."' ";
$abc = mysql_query($sqlstmt); 
$rw=mysql_fetch_array($abc);
$opts = json_decode($rw['option']);


 for($i=0;$i<sizeof($opts);$i++)
 {
//$sqlstmt="select * from polls where question='".$_POST['name']."' and opton=$opt";

   if($opt==$opts[$i][0])
   {
  $opts[$i][1]+=1;
  echo $opts[$i][1];

    }

}
var_dump($opts);

$a=json_encode($opts);
  $b="UPDATE  polls
  SET option="$a", 
  WHERE question='".$_POST['name']."'";
  var_dump($_POST['name']);
  $c=mysql_query($b);
 var_dump($c);
} 

どこが間違っているのかわかりませんがvar_dump($c)、ブール値を返していますfalse

4

3 に答える 3

3

まず..非推奨の mysql_* 関数の代わりに PDO を使用する必要があります.コードには重大なセキュリティ ホールがあります!!!

http://php.net/manual/en/book.pdo.php

しかし、あなたの質問に答えるために...あなたの問題は $a の連結なので、これに変更してください...

$a=json_encode($opts);
$b="UPDATE  polls SET option='".$a."' 
WHERE question='".$_POST['name']."'";
$c=mysql_query($b);
var_dump($c);
} 

更新/編集 安全のために、PDOを使用した完全なコードを次に示します

明らかに接続情報を編集する必要があり、私はこれをテストしていませんが、PDO は非推奨の mysql_* 関数よりも優れているので、ここで...

$dbname = "test";
$hostname = "localhost";
$pw = "root";
$username = "";

if (isset($_POST['submit']))
  { 
   $opt=$_POST['xyz'];

  $pdo = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");
  try{
  $query = $pdo->prepare("select * from polls where question=:question");
  $query->execute(array(':question' => $_POST['name']));
  $rw = $query->fetchAll(PDO::FETCH_ASSOC);
  } catch(PDOException $ex) {
  //whatever error handling you want
  echo "An Error occured!"; 
  some_logging_function($ex->getMessage());
  }

  $opts = json_decode($rw['option']);

  for($i=0;$i<sizeof($opts);$i++)
  {
   if($opt==$opts[$i][0])
  {
  $opts[$i][1]+=1;

}

$a=json_encode($opts);
try { 
$query = $pdo->prepare("UPDATE  polls
SET option=? WHERE question=?");
$query->execute(array($a, $_POST['name']));
} catch(PDOException $ex) {
  //whatever error handling you want
  echo "An Error occured!"; 
  some_logging_function($ex->getMessage());
}
于 2013-06-10T06:02:18.113 に答える
-1

変化 -

  $b="UPDATE  polls
  SET option="$a", 
  WHERE question='".$_POST['name']."'";

$b="UPDATE  polls SET option='".$a."' WHERE question='".$_POST['name']."'";

JACKの提案によると..上記のコードはSQLインジェクションに対してオープンです..実際に実装する前にそれを取ってください.

SQLインジェクションに対処するために、ここで人気のある投稿を読んでください

于 2013-06-10T06:02:28.333 に答える