从数据库mysql中检索数据不起作用

时间:2013-08-16 08:21:20

标签: php javascript html ajax

您好我正在使用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);
?> 

2 个答案:

答案 0 :(得分:2)

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

的index.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> 

getuser.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;

答案 1 :(得分:-1)

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

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