【问题标题】:Variable not working in PHP [closed]变量在 PHP 中不起作用 [关闭]
【发布时间】:2012-05-05 19:44:24
【问题描述】:

我正在使用 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> 

【问题讨论】:

  • jQuery 会简化你的生活,我敢打赌。
  • @Blake 在这个时候,如果我能得到一个 JQuery 的熟代码,我将非常感激.. :)
  • 你在哪里定义$folder?您应该使用$sql="SELECT * FROM image WHERE id = '".mysql_real_escape_string($q)."'"; 而不是您当前的代码,否则攻击者可以轻松修改您的整个数据库。
  • @Tyilo 目前,我在 getuser.php 中定义 $folder,我希望它在 one.php 中的值。并感谢您的询问,先生。
  • jquery!我敢打赌,这只是你的生活。

标签: php ajax database image include


【解决方案1】:

嘿,您正在 AJAX 调用的 PHP 文件 (getuser.php) 中创建变量名称 $folder。但它在文件名 one.php 中不可用。

只有您从 getuser.php 回显的内容才会在 JS 变量 xmlhttp.responseText 中可用

因此,您将在 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');
        }
    }

【讨论】:

  • 好的,我将如何从 AJAX 中的 xmlhttp.responseText 获取结果。代码将不胜感激。
  • 已编辑解决方案,请查看其他解决方案。
  • 谢谢先生!是否有可能通过 AJAX 从我的页面上的表格中打印值。 (假设只有一行)。我只对获取 $folder 值并将其放在 IMG 标记中感兴趣,例如 /pic1.jpg" /> 其余值可以忽略。跨度>
  • @Namelus 您已经使用 AJAX 在页面上打印表格的值。所以没有可能性的问题。我很抱歉,但可能我没有得到你的要求。要求 1:您想使用 AJAX 要求 2:AJAX 用于打印 DB 表中的信息或 AJAX 以获取文件夹的值或两者。请确认。
  • 我想要 one.php 中的 $folder 值。我想显示图像而不是 $folder 的值。
【解决方案2】:

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

1/ $folder 将无法从 one.php 访问

2/ 要从$folder 中获取信息,最好在Ajax Query 中获取,然后可以使用Javascript 函数更改属性

3/ 另一种解决方案是,由于您正在为 getuser.php 中的表格生成 html 代码,您还可以生成更多包含图像标签的行

我解释清楚了吗?请如果没有,我准备再试一次:)

祝你好运

【讨论】:

  • 你能指导我使用 AJAX 和 JavaScript 代码吗?此外,我不能在 getuser.php 中包含标签,因为我使用 one.php 进行接口。所以我一定要把变量结果带入one.php。谢谢
  • 是的,Ajax 也是 JavaScript 好吧,下面我会尝试给你写一个可能的解决方案
【解决方案3】:

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

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

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

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

3/ 之后,您可以使用“json_encode”函数将数组编码为 json 格式(自 PHP5 起可用)

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

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

【讨论】:

  • 我很欣赏你的努力,但不建议使用 eval 并且被认为是邪恶的。我会更好地建议添加带有一些分隔符的文件夹名称以及回显的 HTML。然后在 javascript 中将 HTML 和 folderName 分开。例如:
  • var arrResponse = (xmlhttp.responseText).split("####"); document.getElementById("txtHint").innerHTML=arrResponse[0]; var folderName = arrResponse[1]; // we will fetch all the image tags from your html page var arrImgs = document.getElementsByTagName('img'); var imgCount = arrImgs.length; for(i = 0; i &lt; imgCount; i++) { arrImgs[i].setAttribute('src', folderName+'/pic'+(i+1)+'.jpg'); }
  • 是的,这是一种绝对的做事方式,但我不明白为什么不建议使用 eval 或将其视为邪恶,因为我正在使用它3年多了,从来没有让我失望过!!!
  • 请谷歌 eval 的优点和缺点以了解更多信息,除非你爱上它,否则它不是邪恶的。预防总是胜于治疗。通过此链接:why-is-using-the-javascript-eval-function-a-bad-idea
  • 好的,感谢您提供的信息:)您知道是否有替代品吗?无论如何我都会搜索:)
猜你喜欢
  • 2015-02-16
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2017-06-16
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多