这是我的网站的自定义函数,我需要在iframe中显示不同的URL。我只想向用户显示每个网址一次,因此我首先创建一个可用的URL的数组,然后是一个已经看到的URL的数组,然后最后比较这两个URL以创建一个用于显示URL的新数组。然后我需要将该数组的第一个元素回显到iframe中。php mysqli_query函数似乎运行两次
的问题似乎在于在foreach函数中,我执行了进入数据库$entry = "INSERT INTO views VALUES ('', '$currentUsername', '$urlToShow')";
我有许多不同的方法试过了,但是不管我做什么,我得到两个URL从$urlsToShow
阵列加入到数据库,并且只有其中一个会在我的iframe中回显。结果是每个其他站点完全跳过,用户从不会看到它们。
我有print_r'd $urlsToShow
,以确保它是一个数组,我也这样做,以确保$urlToShow
不是一个数组。
我甚至不知道这是一个PHP的问题更多...
下面是代码:
function get_urls() {
require 'config.php';
global $con;
global $currentUsername;
$con = mysqli_connect($hostname, $dbusername, $dbpassword, $dbname);
$query = "SELECT site_url FROM sites WHERE site_url IS NOT NULL";
$result = mysqli_query($con, $query);
// Get all the site urls into one array
$siteUrls = array();
$index = 0;
while($row = mysqli_fetch_assoc($result)) {
$siteUrls[$index] = $row['site_url'];
$index++;
}
$query2 = "SELECT site_url FROM views WHERE user = '$currentUsername' AND site_url IS NOT NULL";
$result2 = mysqli_query($con, $query2);
// Get urls the user has already seen into another array
$seenUrls = array();
$index = 0;
while($row2 = mysqli_fetch_assoc($result2)) {
$seenUrls[$index] = $row2['site_url'];
$index++;
}
// Compare the two arrays and create yet another array of urls to actually show
$urlsToShow = array_diff($siteUrls, $seenUrls);
if (!empty($urlsToShow)) {
// Echo the url to show for the iframe within browse.php and add an entry to the database that the user has seen this site
foreach ($urlsToShow as $urlToShow) {
$entry = "INSERT INTO views VALUES ('', '$currentUsername', '$urlToShow')";
mysqli_query($con,$entry);
echo $urlToShow;
break;
}
}
// Show the allSeen file when all the ads are seen
else {echo 'includes/allSeen.php';}
mysqli_free_result($result);
mysqli_close($con);
}
编辑
我把意见from here和使功能更小,但同样的结果仍在发生。两个网址会被添加到视图表中,但只有两个网址中的第一个会被回传到iframe中。
function get_urls() {
require 'config.php';
global $con;
global $currentUsername;
$con = mysqli_connect($hostname, $dbusername, $dbpassword, $dbname);
$query = "SELECT sites.site_url FROM sites LEFT JOIN views ON views.site_url=sites.site_url AND views.user='$currentUsername' WHERE sites.site_url IS NOT NULL AND views.site_url IS NULL";
$result = mysqli_query($con,$query);
$urlsToShow = mysqli_fetch_assoc($result);
if (!empty($urlsToShow)) {
$urlToShow = $urlsToShow['site_url'];
echo $urlToShow;
$entry = "INSERT INTO views VALUES ('', '$currentUsername', '$urlToShow')";
mysqli_query($con,$entry);
}
else {echo 'includes/allSeen.php';}
mysqli_free_result($result);
mysqli_close($con);
}
编辑2
我也曾尝试用PHP的ReadFile();函数,因为我认为这可能是导致这种情况的iframe。但不,结果相同。也许我打电话功能错了?
<iframe src="<?php get_urls();?>"/>
编辑3
我也曾尝试echo'ing与urlToShow沿着函数中的iframe的html标签,看看是否有差别。不,它没有。
有人吗?
所以我们遇到了一个问题,我不知道如何解决(MODS,请参考)。我们针对实际遇到的问题提供了一种成功且可重复的解决方案,但最初的问题不包括实际的违规代码。仅仅将违规代码添加到OP中就足够了(可能使先前的评论/答案无效)?是否应该重新修改OP?应该删除主题答案(一旦添加了违规代码)?这应如何处理? (@ynef,不要做我说的任何话,先来看看反馈吧)。 – Mike 2015-04-13 18:02:11