2012-05-05 45 views
-1

我正在使用AJAX和PHP从数据库中检索数据。在数据库中,其中一列包含图像文件夹的路径。我将路径的值保存在名为$ folder的PHP变量中。这可以在getuser.php代码中看到。
我想要这个变量在one.php中可见/可用,以便使用此变量的图像可以被填充。我将如何做到这一点。我曾尝试包括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

jQuery将简化你的生活,我敢打赌。 – Blake

+0

@Blake在这个时刻,我真的很感激,如果我能得到一个煮熟的JQuery代码.. :) –

+3

你在哪里定义'$文件夹'?你应该使用'$ sql =“SELECT * FROM image WHERE id ='”.mysql_real_escape_string($ q)。“'”;'而不是你当前的代码,否则攻击者可以轻松修改你的整个数据库。 – Tyilo

回答

2

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

只有你从getuser.php重复一下将可在JS变量xmlhttp.responseText

所以,你会得到所有的人物信息中getuser.php回荡,但不会获得$文件夹变量。

由于您已经专门硬编码了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页面

其他解决方案中删除这些图片标签: 建议我可以给是添加一些分离的两件事情之间进行区分。一个是要打印的表格和$文件夹变量值。 对于例如:考虑分离器####

第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步: 的变化之一。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'); 
     } 
    } 
+0

好的,我将如何从AJAX中的xmlhttp.responseText获得结果。代码将不胜感激。 –

+0

编辑了解决方案,请检查其他解决方案。 – swapnilsarwe

+0

谢谢先生!是否有可能通过AJAX打印我的页面上的表格值。 (假设只有一行)。我只是想获取$文件夹的值,并将其放在IMG标签中,像这样

0

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

1 /的$文件夹将是不可到达从one.php

2 /获得从$文件夹中的信息,你会更好的Ajax查询中得到它,然后你可以使用JavaScript函数更改属性

3 /另一种解决方案是,因为你在getuser.php产生用于所述表中的HTML代码,还可以生成一些更多的线与所述图像中包括每日新闻

我是否解释以及?请如果没有,我已经准备好再次尝试:)

祝您好运

+0

你能用AJAX和JavaScript代码指导我吗?此外,我不能在getuser.php中包含标签,因为我正在使用one.php进行接口连接。所以我必然会将变量结果带入one.php。谢谢 –

+0

是的,**阿贾克斯**也是** JavaScript **好吧,我会尽力写一个可能的解决方案波纹管 –

0

根据您的要求,我会用你做到了以同样的方式告诉你一个可能的解决方案之前

首先,你需要改变你的这两个文件

1 /去getuser.php并删除所有的回声,存储在一个变量的字符串,而不是

2 /比,在循环之后创建的两个变量,一个索引数组($文件夹和新的变量,它包含了html字符串)

3 /之后,你可以JSON格式的阵列,编码具有“json_encode”功能(因为PHP5提供)

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

是否足够清晰可以遵循? (对不起,我的英语不是很好:()

+0

我很欣赏这种努力,但是不建议使用eval,并且认为它是邪恶的。我会更好地建议使用一些分隔符和HTML回显来添加文件夹名称。然后在javascript中分隔HTML和folderName。 例如: – swapnilsarwe

+1

var arrResponse =(xmlhttp.responseText).split(“####”); document.getElementById(“txtHint”)。innerHTML = arrResponse [0]; var folderName = arrResponse [1]; //我们将从您的html页面中提取所有图片标签 var arrImgs = document.getElementsByTagName('img'); var imgCount = arrImgs.length; (i = 0; i swapnilsarwe

+0

是的,这是赦免的一种做事方式,但我不明白为什么** eval **没有被暗示或被认为是邪恶的,因为我现在使用它已超过3年了,它永远不会让我失望! –