0

嗨,我正在使用 ajax 使用 html 下拉列表的 onchange 事件

在我使用的代码中,当我更改下拉列表时应该获取地址列值。

但它不工作。可能出了什么问题?

这是代码

<html>
<head>
  <script>
     function showUser( str ) {
        if ( str == "" ) {
           document.getElementById("txtHint").innerHTML="";
           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("txtHint").innerHTML=xmlhttp.responseText;
           }
        }
        xmlhttp.open("GET", "getuser.php?q=" + str, true);
        xmlhttp.send();
     }
   </script>
</head>
<body>

<form>    
  <?php
     mysql_connect('localhost', 'tiger', 'tiger');
     mysql_select_db('theaterdb');
     $sql = "select theater_name from theater;";
     $result = mysql_query($sql);
     echo "<select name='theater_name' id='course' onchange='showUser(this.value);'>";
     while ( $row = mysql_fetch_array( $result ) ) {
        echo "<option value='" . $row['theater_name'] ."'>" . $row['theater_name']. "</option>";
     }
     echo "</select>";
?>

</form>

<br>
<div id="txtHint"><b>Info</b></div>
</body>
</html> 

getuser.php 的代码

<?php
   $q = $_GET["q"];
   $con = mysqli_connect("localhost", "tiger", "tiger", "theaterdb");
   if ( !$con ) {
      die('Could not connect: ' . mysqli_error( $con ) );
   }

   mysqli_select_db( $con );
   $sql = "SELECT address FROM theater WHERE theater_name = '".$q."'";

   $result = mysqli_query( $con, $sql );

   echo "<table border='1'>
     <tr>
        <th>Firstname</th>
     </tr>";

     while( $row = mysqli_fetch_array( $result ) ) {
       echo "<tr>";
          echo "<td>" . $row['address'] . "</td>";
       echo "</tr>";
    }
  echo "</table>";
  mysqli_close($con);
?> 
4

2 回答 2

2

好的,我稍微调整了你的文件,你不应该再使用 mysql_ 或 mysqli_ 函数,只是不要......而且你当然不应该在一个文件中使用 mysql 函数而在另一个文件中使用 mysqli 函数...我已将它们切换为使用 PDO,您的脚本现在不易受到 SQL 注入的影响,据我所知,它工作得很好。

索引.html

<html>
    <head>
        <script>
            function showUser(str) {
                if(str=="") {
                    document.getElementById("txtHint").innerHTML="";
                    return;
                }

                if(window.XMLHttpRequest) {
                    xmlhttp=new XMLHttpRequest();
                } else {
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }

                xmlhttp.onreadystatechange = function() {
                    if(xmlhttp.readyState==4 && xmlhttp.status==200) {
                        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
                    }
                }
                xmlhttp.open("GET","getuser.php?q="+str,true);
                xmlhttp.send();
            }
        </script>
    </head>

    <body>
        <form>
        <?php
        try {
            $dbh = new PDO('mysql:dbname=theaterdb;host=localhost','tiger','tiger');
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
        }

        $sql = "SELECT theater_name FROM theater;";

        $sth = $dbh->prepare($sql);
        $sth->execute();

        echo "<select name='theater_name' id='course' onchange='showUser(this.value);'>";

        while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
            echo "<option value='" . $row['theater_name'] ."'>" . $row['theater_name']. "</option>";
        }
        echo "</select>";
        ?>
        </form>
        <br>
        <div id="txtHint"><b>Info</b></div>
    </body>
</html> 

获取用户.php

<?php
$q = strtolower(trim($_GET["q"]));

try {
    $dbh = new PDO('mysql:dbname=theaterdb;host=localhost','tiger','tiger');
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$sql = 'SELECT address FROM theater WHERE LOWER(theater_name) = :q';

$sth = $dbh->prepare($sql);
$sth->bindValue(':q', $q);
$sth->execute();

echo "<table border='1'><tr><th>Firstname</th></tr>";

while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
  echo "<tr>";
  echo "<td>" . $row['address'] . "</td>";
  echo "</tr>";
}

echo "</table>";

$dbh = null;
于 2013-08-16T08:56:23.963 回答
-1

我无法理解你为什么在两个 php 文件中都连接了数据库?我建议您访问以下链接。

http://www.w3schools.com/php/php_ajax_database.asp

于 2013-08-16T08:47:49.483 回答