0

PHPのヒアドキュメント内にループを作成しようとしています。私はそうすることが不可能であることを知っていますが、それは私が助けを必要としていることを伝えるための最良の方法でした。これは私のコードです:

<?
$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = '".$_GET['id']."'");
$sth->execute();
echo <<<HERE_DOC
    [
    while($row = $sth->fetch()){ 
        echo '{"optionValue":"'.$row['field1'].'", "optionDisplay": "'.$row['field2'].'"},'; 
    }
    ]
HERE_DOC;
?>

そしてそれは私にこれを教えてくれます

 Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /public_html/test.php on line 7

ヒアドキュメント内にループを作成することはできないため、これが返されると思いますが、それ以外の場合はどうすればよいですか。

スクリプトは、次のスクリプトを使用してAJAXによって駆動されます。

<script type="text/javascript">
$(function(){
  $("select#state").change(function(){
    $.getJSON("test.php",{id: $(this).val(), ajax: 'true'}, function(j){
      var options = '';
      for (var i = 0; i < j.length; i++) {
        options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
      }
      $("select#city").html(options);
    })
  })
})
</script>

元のtest.phpは次のようになります。

if ($_GET['id'] == "1234") {
  echo <<<HERE_DOC
    [
    {"optionValue":"000", "optionDisplay": "a"},
    {"optionValue":"300", "optionDisplay": "s"},
    {"optionValue":"600", "optionDisplay": "d"},
    {"optionValue":"700", "optionDisplay": "cr"},
    {"optionValue":"500", "optionDisplay": "Gı"},
    {"optionValue":"400", "optionDisplay": "K"},
    {"optionValue":"800", "optionDisplay": "S"},
    {"optionValue":"900", "optionDisplay": "ik"},
    {"optionValue":"350", "optionDisplay": "Tu"}
    ]
HERE_DOC;
else if ($_GET['id'] == "2345") { etc......

SQLデータベースにはすでにすべてのデータがあり、オプションがたくさんあるので、前の選択リストのIDに基づいてデータを返したいだけです。

4

1 に答える 1

3

自分でJSONを作成するのではなく、を使用してくださいjson_encode

<?
$json = array();
$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = '".$_GET['id']."'");
$sth->execute();
while($row = $sth->fetch(PDO::FETCH_ASSOC)){ // added PDO::FETCH_ASSOC
    $json[] = array(
        'optionValue' => $row['field1'],
        'optionDisplay' => $row['field2']
    );
}
echo json_encode($json);
?>

$_GETPSそのように直接使用しないでください。SQLインジェクションに対して脆弱です。すでにPDOを使用しています。正しく使用してください。あなたはこのようにそれをするべきです:

$sth = $dbh->prepare("SELECT field1, field2 FROM table WHERE id = ?");
$sth->execute(array($_GET['id']));
于 2012-06-08T16:25:19.553 に答える