0

Ajax を使用した 2 つのカスケード Select を持つページがあります。Ajax は 2 番目の Select を正しく設定しますが、PHP を使用してデータを MySQL に送信しようとすると、AJAX によって設定されたフィールドが「不明」であるというエラーが表示されます。正確なエラーは

Notice: 未定義のインデックス: 21 行目の ..\input.php の probcode

Ajax呼び出しが行われず、デフォルトの選択がまだそこにある場合は投稿します。AJAXがDIVを置き換えた後にのみエラーになります。

AJAXがフォームに追加しても、from要素がPHPから消えるようなものだと付け加えたいと思います。AJAX データを MySQL に投稿するために使用する必要がある別の PHP 関数はありますか?

私はJqueryを知らず、現時点ではJavaScriptだけでこれを機能させる方法を探しています(時間とJqueryの知識がないため)。ただし、Jqueryを既存のコードに簡単に追加する方法があれば、絶対に興味を持ってください。また、現時点ではデータが安全に MySQL に送信されないこともわかっています。これについては、この後すぐに対処されます。現在、特定の機能のワイヤーフレームに取り組んでいます。

最初に2つ選択します。

            <tr>
                <td>Problem Type</td>
                <td><?php
                    mysql_connect("localhost", "root", "") or die("Connection Failed");
                    mysql_select_db("test")or die("Connection Failed");
                    $query = "SELECT * FROM wfprobtype ORDER BY probtype ASC";
                    $result = mysql_query($query);
                    ?>
                    <select name="probtype" id="probtype" onchange="changeContent(this.value)">
                    <?php
                    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
                    ?>
                    <option value="<?php echo $line['ID'];?>" > <?php echo $line['probtype'];?> </option>
                    <?php
                    } 
                    mysql_close()
                    ?>
                    </select>
                </td>
                <td>Problem: </td>
                <td>
                    <div id="val2div">
                        <select name="probcode" id="probcode">
                            <option value="default"></option>
                        </select>
                    </div>
                </td>
            </tr>

これは、"val2div" val2.php を置き換えるために Ajax が呼び出すものです。

<?php
$val2=intval($_GET['val2']);
mysql_connect("localhost", "root", "") or die("Connection Failed");
mysql_select_db("test")or die("Connection Failed");
$query = "SELECT * FROM wfprobcode WHERE typeID='$val2' ORDER BY Probcode ASC";
$result = mysql_query($query);
?>
<select name="probcode" id="probcode"  onchange="">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<option value="<?php echo $line['Probcode'];?>"> <?php echo $line['Probcode'];?> </option>
<?php
}
mysql_close()
?>

Ajax スクリプト Dny.js

function changeContent(val)
{
if (val=="")
  // if blank, we'll set our innerHTML to be blank.
  {
  document.getElementById("val2div").innerHTML="";
  return;
  }
if (window.XMLHttpRequest) // new browser
  {  
      xmlhttp=new XMLHttpRequest(); // new browser
      alert("newb");
  }
else // Old Browser
  {  
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 

  }
  // on state change
  xmlhttp.onreadystatechange=function()
  {
  // if we get a good response from the webpage, display the output
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
      document.getElementById("val2div").innerHTML=xmlhttp.responseText;
  }
  }
 // GET file. 
xmlhttp.open("GET","val2.php?val2="+val, true);
xmlhttp.send();
 alert(val)
}

MySQL input.PHP に投稿する

    <?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }

    mysql_select_db("test", $con);

    $sql="INSERT INTO `test`.`test` (
    `ID`,
    `Dattime`, 
    `probtype`,
    `probcode`
    )
    VALUES(
    NULL,NOW(),'$_POST[probtype]','$_POST[probcode]')";

    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }

mysql_close($con); ?> 

現時点では単純なものが欠けていることを願っています。Ajax を使用するのはこれが初めてです。現時点では、すべての助けに本当に感謝しています。

編集: - 全体を書き直す前に、最後の編集を行います。Jquery を使用してこれを修正する方法はありますか? そうでない場合、AJAXなしで完全なポストバックにするためのダウンした汚い方法を誰かが持っていますか?

これまでに貢献してくれた人、アイデアを持っている人には本当に感謝しています。

前もって感謝します!

-D

4

2 に答える 2

1

コードを際限なく見直した結果、上記のコードで IE を使用すると、すべてが正常に機能することがわかりました。問題は、Firefox が AJAX リターンを解釈することに直接関係しています。

于 2013-01-23T03:58:59.513 に答える
0

val2.php では、select の要素を閉じていません

 </select>

そして私はinput.PHPで推測します、それはより良いはず'{$_POST['probtype']}'です'$_POST[probtype]'

$sql="INSERT INTO `test`.`test` (
`ID`,
`Dattime`, 
`probtype`,
`probcode`
)
VALUES(
NULL,NOW(),'{$_POST['probtype']}','{$_POST['probcode']}')";
于 2013-01-06T19:46:59.263 に答える