变量不适用于PHP

时间:2012-05-05 19:44:24

标签: php ajax database image include

我正在使用AJAX和PHP从数据库中检索数据。在数据库中,其中一列包含图像文件夹的路径。我在名为$ folder的PHP变量中保存路径的值。这可以在getuser.php代码中看到。
我希望这个变量在one.php中可见/可用,以便可以填充使用此变量的图像。我该怎么做我也尝试过包含php但没有用。



getuser.php

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

$con = mysql_connect('localhost', 'san', '123');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("holidayNet", $con);

$sql="SELECT * FROM image WHERE id = '".$q."'";

$result = mysql_query($sql);

echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
<th>Hometown</th>
<th>Picture</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
    $folder = $row['FirstName'];
  echo "<tr>";
 echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "<td>" . $row['Age'] . "</td>";
  echo "<td>" . $row['Hometown'] . "</td>";


  /*echo "<td>" . $row['Job'] . "</td>";*/
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);


?> 



one.php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">
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>
<select name="users" onchange="showUser(this.value)">
<option value="">Select a person:</option>
<option value="1">Sn Qb</option>
<option value="2">Lois Griffin</option>
<option value="3">Glenn Quagmire</option>
<option value="4">Joseph Swanson</option>
</select>
</form>
<br />
<div id="txtHint"><b>Person info will be listed here.</b></div><br />

<img src="<?php echo $folder;?>/pic1.jpg" />
<img src="<?php echo $folder;?>/pic2.jpg" />
<img src="<?php echo $folder;?>/pic3.jpg" />
<img src="<?php echo $folder;?>/pic4.jpg" />


</body>
</html> 

3 个答案:

答案 0 :(得分:2)

嘿,你正在PHP文件中创建一个变量名$文件夹(getuser.php),这是由AJAX调用的。但它在文件名one.php中不可用。

JS变量xmlhttp.responseText

中只有getuser.php回显的内容

因此,您将获得在getuser.php中回显的所有人员信息,但不会获得$ folder变量。

因为您已经专门硬编码了4张图像。我建议你在getuser.php中回显img标签以及所选人员数据库中的其他信息。

while($row = mysql_fetch_array($result))
{
    $folder = $row['FirstName'];
    echo "<tr>";
    echo "<td>" . $row['FirstName'] . "</td>";
    echo "<td>" . $row['LastName'] . "</td>";
    echo "<td>" . $row['Age'] . "</td>";
    echo "<td>" . $row['Hometown'] . "</td>";


    /*echo "<td>" . $row['Job'] . "</td>";*/
    echo "</tr>";
}
echo "</table>";

for($i = 0; $i < 4; $i++)
{
    echo '<img src="'.$folder.'/pic'.($i+1).'.jpg" />';
}

并从one.php页面中删除这些图片标记

另一种解决方案: 我可以给出的建议是添加一些分隔符来区分这两件事。一个是您要打印的表和$ folder变量值。 例如:考虑分隔符####

第1步: 所以现在你的getuser.php代码将是

while($row = mysql_fetch_array($result))
{
    $folder = $row['FirstName'];
    echo "<tr>";
    echo "<td>" . $row['FirstName'] . "</td>";
    echo "<td>" . $row['LastName'] . "</td>";
    echo "<td>" . $row['Age'] . "</td>";
    echo "<td>" . $row['Hometown'] . "</td>";


    /*echo "<td>" . $row['Job'] . "</td>";*/
    echo "</tr>";
}
echo "</table>####".$folder;

第2步: one.php中的更改以分隔2个值

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
// split is the function which breaks the string with the value provided and then creates an array of the parts.
        var arrResponse = (xmlhttp.responseText).split("####");
        // added || below to validate the index 1 of arrResponse. if xmlhttp.responseText does not have #### it wont break the string and hence wont have the folderName part, in such cases javascript will give undefined value, by adding || we tell if value is present take the present value otherwise take it as an empty string ''
    var folderName = arrResponse[1] || ''
        document.getElementById("txtHint").innerHTML=arrResponse[0];

        // we will fetch all the image tags from your html page
        var arrImgs = document.getElementsByTagName('img');
        var imgCount = arrImgs.length;
        for(i = 0; i < imgCount; i++)
        {
            arrImgs[i].setAttribute('src', folderName+'/pic'+(i+1)+'.jpg');
        }
    }

答案 1 :(得分:0)

你做错了是你把东西混在一起,特别是PHP和HTML,如果你愿意,我可以更好地解释,但目前我只会尝试解释你的问题的解决方案,我希望这会对你好。

1 / one文件无法访问$ .php

2 /从$文件夹中获取信息,你最好在Ajax查询中获取它,然后你可以使用Javascript函数来改变属性

3 /另一个解决方案是,因为你在getuser.php中生成表的html代码,你还可以生成更多包含图像包的行

我解释得好吗?如果没有,我准备再试一次:)

祝你好运

答案 2 :(得分:0)

根据您的要求,我会以与您之前相同的方式告诉您一个可能的解决方案

首先,您需要更改两个文件

1 /转到getuser.php并删除所有echo,将字符串存储在变量中

2 /比循环之后用你的两个变量创建一个索引数组($ folder和包含html字符串的新变量)

3 /之后您可以使用“json_encode”函数(从PHP5开始提供)以json格式对数组进行编码

4 /所有你还需要做的,是在one.php页面中,当你得到结果你需要解码你用“eval”函数(一个原生的Javascript函数)获得的字符串时,这个函数将返回索引数组(具有相同的索引)并将html字符串放在“txtHint”div中,使用图像标记中其他变量的内容(使用javascript函数)

是否足够清楚了? (对不起,我的英语不太好:()