我在使用网络应用程序时学习PHP / MySQL。此应用程序的一部分要求从标题为“htdocs / full”的图像目录中回显一个随机图像。除了'first_name''last_name'的列之外,数据库还在标题为'image_path'的列中保存每个图像的路径。
我能够从数据库调用一个随机行,我可以让它显示来自'first_name'和'last_name'列的文字数据。但是我很难让它从'image_path'列中获取路径并将其转换为图像而不是文字。
我在过去24小时内一直在尝试多种方法,但我在Stack和Google上看到的大部分内容都是直接从目录中提取图像而不使用数据库行(这是由于相应的'first_name'和'last_name'而需要。)
这是我到目前为止所做的事情(尽管我也有很多不同的变化,我认为这是我最接近的变化):
<?php
$username="root";$password="*********";$database="offenders";
mysql_connect('localhost',$username,$password);
mysql_select_db($database) or die( "Unable to select database");
$sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
$aResult = mysql_query($sSQLQuery);
WHILE($aRow = mysql_fetch_array($aResult)):
{
header("Content-Type:image/jpeg");
echo "<img src='php/imgView.php?imgId=".$aRow['image_path']."' />";
}
ENDWHILE;
?>
它生成一个页面,左上角有一个微小的破碎图像。我已经尝试过回显$ aRow以及$ aRow ['image_path'],如上所示,以及其他一些似乎会导致错误的调整。我有什么想法吗?
非常感谢!
更新的代码:
<?php
$username="root";$password="*******";$database="offenders";
mysql_connect('localhost',$username,$password);
mysql_select_db($database) or die( "Unable to select database");
$src="full/";
//if you have any problem in the solution check this line,
//means weather you are providing right path for your files or not.
$sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
$aResult = mysql_query($sSQLQuery);
$aRow = mysql_fetch_array($aResult);
$file_path=$src.$aRow["image_path"];
//echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';
echo "<img src=".$file_path." />".'<br/>';
//echo "<img src=full/1b2ba2f9a8b8ee9c062b09767535d69bd954e125.jpg>";
/* if(isset($_GET['imgId']))
{
//i am query only first_name but you can add for field as you want
//and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure.
$sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'";
$aResult = mysql_query($sSQLQuery);
WHILE($aRow = mysql_fetch_array($aResult)):
{
echo $aRow['first_name'];
}
ENDWHILE;
}
*/
?>
答案 0 :(得分:0)
这里有几个问题。
循环中有数据库输出。而不是
WHILE($ aRow = mysql_fetch_array($ aResult)): { ... }
ENDWHILE;
使用:
$aRow = mysql_fetch_array($aResult);
...
答案 1 :(得分:0)
在我看来,我不知道你为什么要运行while循环,因为在你的查询中你有一个限制,所以你不必运行while循环。
假设您的图像文件夹名称为php / image /,而不是图像
我正在编写我的解决方案,假设您的图像位于图像文件夹中,如果不是,您只需更改解决方案中的$ src值即可。
我也在想你想把这些图像用作链接,所以你可以在图像上点击一下时获取first_name和last_name,我之所以这么想,你试图在img src =&#34;&#34;,
我写两个解决方案的任何方式看哪一个适合你。第一个将使它们链接,第二个只从数据库中提取图像。
第一个假设您想从数据库中提取first_name和last_name,只需点击一下图像。
<?php
$username="root";$password="";$database="offenders";
mysql_connect('localhost',$username,$password);
mysql_se
lect_db($database) or die( "Unable to select database");
$src="php/image/";//if you have any problem in the solution check this line,
//means weather you are providing right path for your files or not.
$sSQLQuery = "SELECT image_path FROM offenders ORDER BY RAND() LIMIT 1";
$aResult = mysql_query($sSQLQuery);
$aRow = mysql_fetch_array($aResult);
$file_path=$src.$aRow["image_path"];
echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';
if(isset($_GET['imgId']))
{
//i am query only first_name but you can add for field as you want
//and i also used $_get['imgId']; in the query which is not safe but you can make it for //secure.
$sSQLQuery = "SELECT first_name FROM offenders where image_path='".$_GET['imgId']."'";
$aResult = mysql_query($sSQLQuery);
WHILE($aRow = mysql_fetch_array($aResult)):
{
echo $aRow['first_name'];
}
ENDWHILE;
}
?>
第二种解决方案只从数据库中提取图像
在isset条件下删除isset条件和while循环。
并更改此行
echo "<a href='php/imgView.php?imgId=".$aRow['image_path']."'>"."<img src=".$file_path." />"."</a>".'<br/>';
到
echo "<img src=".$file_path." />".'<br/>';
//if you notice the only different is this that i
//remove the <a> tag in its path, so not it gonna pull images
// from the database but you cant use them as link.
由于
这个解决方案工作正常,如果它不发布你的文件夹结构,意味着你有图像和这个文件imgView。我从解决方案中删除了你的while循环,
//