题
我有 AJAX 应用程序的以下部分,它没有给出任何错误,但屏幕上也没有显示任何内容,所以我不确定问题出在哪里。使用 ?cmd&id=1 直接从浏览器调用此页面应该返回,或者甚至不使用 ?cmd 调用它应该返回 cmd 错误消息。
编辑:添加测试用例:我确实收到了 cmd 错误消息,但是当我传递 &id=1 (1 是有效的 id)时,没有返回任何 html,查看源代码完全是空白的。我是否错误地使用了 echo 或类似的东西?
编辑2:添加 echo 作为第一行:无论如何都看不到第一个回声
编辑3:返回旧版本并再次进行所有更改后,我现在在使用有效的 cmd 和 id 参数调用时获得测试字符集输出。我使用的代码与下面粘贴的代码相同。
代码:
<?php
echo "hello world";
error_reporting(E_ALL);
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"];
else
die("You should have a 'cmd' parameter in your URL");
$id = $_GET["id"];
$con = mysqli_connect("localhost", "user", "password", "db");
echo "test con";
if(!$con)
{
die('Connection failed because of' .mysqli_connect_error());
echo "test error";
}
//$con->query("SET NAMES 'utf8'");
$con->set_charset("utf8"));
echo "test charset";
if($cmd=="GetSALEData")
{
echo "test cmdifloop";
if ($getRecords = $con->prepare("SELECT * FROM SALES WHERE PRODUCT_NO = ?"))
{
echo "test recordifloop";
$getHtml = $con->prepare("SELECT PRODUCT_DESC FROM SALES WHERE PRODUCT_NO = ?");
$getHtml->bind_param("s", $id);
$getHtml->execute();
$getHtml->bind_result($PRODUCT_DESC);
$getRecords->bind_param("s", $id);
$getRecords->execute();
$getRecords->bind_result($PRODUCT_NO, $PRODUCT_NAME, $SUBTITLE, $CURRENT_PRICE, $START_PRICE,
$PRICE_COUNT, $QUANT_TOTAL, $QUANT_SOLD, $ACCESSSTARTS, $ACCESSENDS,
$ACCESSORIGIN_END, $USERNAME, $BEST_PRICEDER_ID, $FINISHED, $WATCH,
$BUYITNOW_PRICE, $PIC_URL, $PRIVATE_SALE, $SALE_TYPE, $ACCESSINSERT_DATE,
$ACCESSUPDATE_DATE, $CAT_DESC, $CAT_PATH, $COUNTRYCODE, $LOCATION,
$CONDITIONS, $REVISED, $PAYPAL_ACCEPT, $PRE_TERMINATED, $SHIPPING_TO,
$FEE_INSERTION, $FEE_FINAL, $FEE_LISTING, $PIC_XXL, $PIC_DIASHOW,
$PIC_COUNT, $ITEM_SITE_ID
);
while ($getRecords->fetch())
{
$ccodes = array( "1" => "USA",
"77" => "Germany",
"16" => "Austria",
"122" => "Luxemburg",
"193" => "Switzerland",
);
$conditions = array( "0" => "USA",
"77" => "Germany",
"16" => "Austria",
);
$country = $ccodes[$COUNTRYCODE];
if ( $country == "" ) $country = "Not applicable";
$columns = array('FINISHED', 'WATCH', 'PRIVATE_SALE', 'REVISED', 'PAYPAL_ACCEPT', 'PRE_TERMINATED', 'PIC_XXL', 'PIC_DIASHOW');
foreach($columns as $column) {
$$column = $row[$column] ? 'YES' : 'NO';
}
imageResize($PIC_URL, 250, 300);
file_put_contents($id, file_get_contents($PIC_URL));
$html = htmlentities(json_encode($PRODUCT_DESC));
$shortDate = strftime("%d %m %Y", strtotime($ACCESSSTARTS));
echo "<h1>".$PRODUCT_NAME."</h1>
<div id='leftlayer' class='leftlayer'>
<p><strong>Username: </strong>".$USERNAME."
<p><strong>PRODUCT Number: </strong>".$PRODUCT_NO."
<p><strong>Subtitle: </strong>".$SUBTITLE."
<p><strong>SALE Start: </strong>".$ACCESSSTARTS."
<p><strong>SALE End: </strong>".$ACCESSENDS."
<p><strong>SALE Type: </strong>".$SALE_TYPE."
<p><strong>Category: </strong>".$CAT_DESC."
</div>
<div class='leftlayer2'>
<p><strong>Condition: </strong> ".$CURRENT_PRICE."
<p><strong>Total Items: </strong> ".$QUANT_TOTAL."
<p><strong>Total Sales: </strong> ".$QUANT_SOLD."
<p><strong>Start Price: €</strong> ".$START_PRICE."
<p><strong>Buyitnow Price: €</strong> ".$BUYITNOW_PRICE."
<p><strong>PRICEs: </strong> ".$PRICE_COUNT."
<p><strong>Revised: </strong> ".$REVISED."
</div>
<div class='leftlayer2'>
<p><strong>Private: </strong> ".$PRIVATE_SALE."
<p><strong>Finished: </strong> ".$FINISHED."
<p><strong>Cancelled: </strong> ".$PRE_TERMINATED."
<p><strong>Paypal: </strong> ".$PAYPAL_ACCEPT."
<p><strong>Country: </strong> ". $country ."
<p><strong>Location: </strong> ".$LOCATION."
<p><strong>Shipping to: </strong> ". $country ."
</div>
<div id='rightlayer'>
<img src='".$PIC_URL."' width='".$imageSize["width"]."' height='".$imageSize["height"]."'>
<p><a href='#' onclick=\"makewindows(" . $html . "); return false;\">Click for full description </a></p>
</div>
</div>
</div>";
}
}
function imageResize($imageURL, $maxWidth, $maxHeight)
{
$imageSize["width"] = 0;
$imageSize["height"] = 0;
$size = getimagesize($imageURL);
if ($size) {
$imageWidth = $size[0];
$imageHeight = $size[1];
$wRatio = $imageWidth / $maxWidth;
$hRatio = $imageHeight / $maxHeight;
$maxRatio = max($wRatio, $hRatio);
if ($maxRatio > 1) {
$imageSize["width"] = $imageWidth / $maxRatio;
$imageSize["height"] = $imageHeight / $maxRatio;
return $imageSize;
} else {
$imageSize["width"] = $imageWidth;
$imageSize["height"] = $imageHeight;
return $imageSize;
}
} else {
die(print_r(error_get_last()));
}
}
}
我对间距表示歉意,但当我按下代码按钮时,它会自动发生。
解决方案
您对线22的额外括号
此
$con->set_charset("utf8"));
需要为这
$con->set_charset("utf8");
对于未来两个调试技巧。对于第一个,你需要将自己的虚拟主机shell访问,或者您需要将您的开发机器上本地安装PHP。如果你正在运行Unix,你可能已经拥有了它。打开一个终端并输入
php -v
如果你拥有它,你可以通过做检查PHP文件的语法
//on *nix
php yourfile.php
//or on windows
c:\path\to\php.exe yourfile.php
此将保释毛语法错误。此外,谷歌/搜索这个网站的“设置PHP本地教程”或类似的东西,以了解如何获得一个Web服务器,MySQL数据库和PHP你自己的机器上运行的完整副本。
第二个建议,如果你安装一个本地副本,这将是更容易,是检查你的错误日志。即使PHP没有显示错误信息,错误仍然会记录到文件中的某个地方。在你的情况,你会看到这样的事情在日志文件
PHP Parse error: syntax error, unexpected ')' in foo.php on line 22
其他提示
这将帮助你看到你的错误:
ini_set('display_errors', '1');
您在这里有一个额外的右括号:
$con->set_charset("utf8"));
您是否尝试过在脚本的顶部放置一个打印或回声声明立即测试输出的基本测试?
<?php
print "Test";
?>
我也建议使用您的连接尝试后or die($msg)
渔获物。
就可以了你的情况。正如一个出发点。在需要的时候我这样做不时。而不是假设的问题是一些大型复杂的问题,它时常被证明是在请求变量意外的情况,访问错误的页面,在错误的时间访问右页,等等。
可能会有所帮助:
监视网服务器登录(喜欢
tail -f /var/log/apache2/error.log
)使用萤火虫并看到在控制台的AJAX响应来自你的脚本。错误可能出现在那里
如果没有调试回声的都达到了,那么故障点似乎是围绕着数据库连接,除非我失去了一些东西。
检查连接的详细信息,并检查您是否启用了mysqli扩展。
我也遇到过类似的问题,我会莫名其妙地得到一个空白页,通常是在IE6,但有时在其他浏览器。它原来是一个字符编码的问题。我是输出一些奇怪的字符,浏览器被猜测是什么编码的基础上的内容。我通过显式设置该头固定它:
header('Content-type: text/html; charset=utf-8');
$getHtml->bind_param("s", $id);
我不知道这是否会导致错误,但不应该是和getRecords bind_param有“我”作为第一个参数?
直接从调用此页面 浏览器与
?cmd&id=1
应返回
你所说的“回报”呢?从我可以看到你的代码,你需要?cmd=
GetSALEData
或其他空白页将被退回,因为一切都包裹if($cmd=="GetSALEData")
语句里面。
校正:你应该看到 “test contest charset
” 如果你的查询字符串有cmd
设置为 “GetSALEData” 以外的东西。 (这两个试验是加入到该代码后。)
这里有几个很好的建议可供尝试。我还没有看到的是确保有足够的内存分配给 PHP。那边的人是 drupal.org 有一个很好的分解 增加 PHP 内存分配的方法.
把括号围绕你的if-else 声明。我有一种感觉的人谁 编辑您的代码可能已经“固定”一个 潜在的问题存在。
这是发生的原因是因为你的服务器配置设置为不显示错误,使你的脚本是依靠执行该error_reporting(E_ALL);
- 这应该只要error_reporting()
功能得到执行做工精细。然而,如果有一个解析错误,error_reporting(E_ALL)
不再执行,然后有foreyou不会看到一个错误在php.ini错误报告设置永远不会被覆盖。
你唯一的解决办法是设置在一个较高的地方,如htaccess的或php.ini中使用error_reporting。但现在至少你知道,一个blankpage =解析错误!
如果你确信你有没有错误,并不断得到一个空白页,我建议你安装PHP-过程。
yum -y install php-process
在其他情况下,你,如果你没有安装梨就得到了这样的错误。
yum -y install php-pear php-pear-DB
或只是安装分贝pear install DB
希望这可以帮助别人与空白页的问题。