1

データベースのテーブルの1つから情報を取得し、それをテキストボックスに貼り付ける簡単なhtmlページを作成しました。これは、リクエストを処理するAJAX関数を介してPHPに接続することで行われます。

私が疑問に思っているのは、このデータを1つだけではなく2つのテキストボックスに配置できるかどうかです。コードで単一のテキストボックスを指定する必要があるため、これを実行する方法がわかりません。テキストボックスを機能させるには、テキストボックスごとに個別の関数を作成する必要がありますか、それとももっと簡単な解決策がありますか?

HTMLページ:

<html>
<head>
<script type="text/javascript">
function getDetails(str)
{
if (str=="")
  {
  document.getElementById("Text1").value=""; 
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("Text1").value=xmlhttp.responseText; // here is why it only      goes into "Text1"
    }
  }
xmlhttp.open("GET","getDetails.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<form>
<!--here a user enters an "RFID" and the details are returned into "Text1"-->
<input type="text" name="RFID1" value="" onKeyup="getDetails(this.value)" /> 
<input type="text" id="Text1" name="Text1" />
<input type="text" id="TextScore1" name="TextScore1"/>
</form>

<br/>

<form>
<!--here a user enters another "RFID" and the details are also returned into "Text1"
(though I would like it to go to Text2 and TextScore2)-->
<input type="text" name="RFID2" value="" onKeyup="getDetails(this.value)" />
<input type="text" id="Text2" name="Text2"/>
<input type="text" id="TextScore2" name="TextScore2"/>
</form>


</body>
</html>

PHPページ:

<?php
$q=$_GET["q"];

$con = mssql_connect("SQL", "0001", "Password");
if (!$con)
  {
  die('Could not connect: ' . mssql_get_last_message());
  }

mssql_select_db("database1", $con);



$sql="SELECT * FROM Scrabble WHERE RFID = '".$q."'";

$result = mssql_query($sql);


while($row = mssql_fetch_array($result))
  {

  echo $row['Tile'];

  echo $row['TileScore'];
  }


mssql_close($con);
?>

*注-私のサーバーはMsSQLを使用しています

もう1つの質問は、HTMLファイルでわかるように、2つのフォームがあり、両方のフォームで同じ関数を実行する必要があります。ここでは、フォームごとに接続する別のPHPファイルを作成する必要があると思います。しかし、念のために言っておきますが、それを1つのファイルに保存することは可能ですか?もしそうなら、どのように対処しますか?

編集一部の人を混乱させたようです。テキストを両方のテキストボックスに入れたくないのですが、実際には結果を2つのテキストボックスに分割します。「Text」がテキストボックスText1になり、TextScoreがテキストボックスTextScore1になります。

4

4 に答える 4

1

なぜこれではないのですか?

if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
  var response=xmlhttp.responseText;
  document.getElementById("Text1").value=response;
  document.getElementById("Text2").value=response;
}

2 番目の関数については、同じ PHP ファイルを使用できます。「この呼び出しがどこから来たのか」を判断するために ajax 呼び出しを行うときに、クエリ文字列値を PHP ページに渡す必要がある場合があります。

何かのようなもの

getDetails.php?from="userinfo"

getDetails.php?from="checkprice"

また、PHP ファイルで、クエリ文字列変数の値を確認し、適切なコード セットを実行できます。if /switch などを使用できます...

しかし、私は機能を論理的に分離し、別のファイルに保管したいと考えています。

: すべてのユーザー関連の機能を auserajaxhelper.phpに保持し、注文関連の機能を o という別のファイルに保持しますrderajaxhelper.php。これにより、コードが整理され、きれいになります。

編集: 重要な点にあるので、Andy Hume のコメントを私の回答に含めたいだけです。SQL インジェクションの被害者にならないように十分に注意する必要があります。

于 2012-05-13T12:55:16.930 に答える
0

PHP からの結果を JSON として返すことができます。json_encodeを参照し、正しいヘッダー (コンテンツ タイプ application/json) も送信します。

次に、 json2を使用して JavaScript で JSON を解析すると、1 つのキー/パラメーターを最初のフィールドに割り当て、別のキー/パラメーターを他のフィールドに割り当てることができます。

...
$result = array();
while($row = mssql_fetch_array($result))
{
    $result[] = $row;
}
mssql_close($con);

header('Content-type: application/json');
echo json_encode($result);

およびJS(注:JSコードをテストしていませんが、例を提供する必要があります):

...
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
    var jsonObj = JSON.parse(xmlhttp.responseText);

    document.getElementById("Text1").value = jsonObj.Title;
    document.getElementById("TextScore1").value = jsonObj.TileScore;
}
...
于 2012-05-13T13:08:24.937 に答える
0

あなたはコードラインを持っています

document.getElementById("Text1").value=xmlhttp.responseText;

ボックス2に同じテキストを追加したい場合

document.getElementById("yourSecondText").value=xmlhttp.responseText;

同じでない場合、php は JSON 形式で回答を提供する必要があります。

ajax への応答として、テキスト ボックスに適切なパーツを割り当てる必要があります。

質問がわかりにくかったらすみません。

于 2012-05-13T13:00:33.583 に答える
0

簡単な答え: はい。

より長い答え: 応答が返されたら、「やりたいことは何でも」できます。自分が何をしたいのか、それをどのように達成するのかを正確に把握する必要があります。以前の回答はすでに良い指針を与えています。ただし、一般的な考え方として、問題の必要最低限​​の部分まで「縮小」することをお勧めします。必要な処理を実行できるように、可能な限り一般的なページを取得します。

あなたがやりたいことの例(テストされていません。何かをすばやくセットアップするだけですが、ポイントを実行する必要があると思います)...

<html>
    <head>
        <script type="text/javascript"><!--
            function doAjaxRequest() {
                // Set up Ajax-request, that will execute the
                // response it gets from the server "as is"...
                // Just what you were doing, but instead of
                // putting the response into textarea, execute it...
                eval(xmlhttp.responseText);
            }
        // --></script>
    </head>
    <body>
        <form>
            <textarea id="txt1"></textarea>
            <textarea id="txt2"></textarea>
            <input type="button" onclick="doAjaxRequest();return false">
        </form>
    </body>
</html>

そしてサーバーサイド...

<?php
    // It doesn't matter which way you get the data, just... use it :-p
    echo('document.getElementById("txt1").value="Response 1";');
    echo('document.getElementById("txt2").value="Response 2";');
?>
于 2012-05-13T13:49:20.513 に答える