6

我有一个 AJAX 应用程序的以下部分,它没有给出任何错误,但屏幕上也没有显示任何内容,所以我不确定问题出在哪里。使用 ?cmd&id=1 直接从浏览器调用此页面应该返回,或者甚至在没有 ?cmd 的情况下调用它应该返回 cmd 错误消息。

编辑:添加了测试用例:我确实收到了 cmd 错误消息,但是当我通过 &id=1(1 是一个有效的 id)时,没有任何 html 被返回,查看源代码是完全空白的。我是否错误地使用了回声或类似的东西?

编辑2:添加回声作为第一行:第一个回声无论如何都看不到

编辑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: &#8364</strong> ".$START_PRICE."
  <p><strong>Buyitnow Price: &#8364</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()));
    }
  }

}

我为间距道歉,但是当我按下代码按钮时它会自动发生。

4

13 回答 13

14

这将帮助您查看错误:

ini_set('display_errors', '1');
于 2009-01-28T11:32:08.147 回答
10

第 22 行有一个额外的括号

$con->set_charset("utf8"));

需要是这个

$con->set_charset("utf8");

未来的两个调试技巧。首先,您需要访问您的 Web 主机的 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
于 2009-01-28T16:23:36.047 回答
4

你在这里有一个额外的右括号:

$con->set_charset("utf8"));
于 2009-01-28T11:58:35.800 回答
3

您是否尝试过在脚本顶部立即放置 print 或 echo 语句来测试输出的基本测试?

<?php

  print "Test";

?>

我还建议or die($msg)在您尝试连接后使用 catch 。

对你的情况很好。只是作为一个起点。我会在需要时不时这样做。与其假设问题是一些非常复杂的问题,不如说是请求变量中的意外情况、访问错误的页面、在错误的时间访问正确的页面等。

于 2009-01-28T15:09:12.670 回答
2

可能会有所帮助:

  1. 监控 Web 服务器日志(如tail -f /var/log/apache2/error.log

  2. 使用 Firebug 并在控制台中查看来自您的脚本的 AJAX 响应。错误可能出现在那里

于 2009-01-28T11:43:34.910 回答
1

如果没有达到任何调试回显,那么故障点似乎在数据库连接周围,除非我遗漏了一些东西。

检查连接详细信息,并检查您是否启用了 mysqli 扩展。

于 2009-01-28T12:43:14.743 回答
0

我遇到过类似的问题,我会莫名其妙地得到一个空白页面,通常在 IE6 中,但有时在其他浏览器中。原来是字符编码问题。我输出了一些奇怪的字符,浏览器根据内容猜测编码是什么。我通过显式设置此标头来修复它:

header('Content-type: text/html; charset=utf-8');
于 2009-01-28T12:52:23.540 回答
0

直接从浏览器调用这个页面?cmd&id=1应该返回

“回归”是什么意思?根据我对您的代码的了解,您需要?cmd=GetSALEData,否则将返回一个空白页,因为所有内容都包含在if($cmd=="GetSALEData")语句中。

更正test contest charset:如果您的查询字符串cmd设置为“GetSALEData”以外的内容,您应该看到“ ”。(这两个测试后来被添加到代码中。)

于 2009-01-28T15:10:07.490 回答
0
$getHtml->bind_param("s", $id);

我不知道这是否会导致错误,但这不应该和 getRecords bind_param 有“i”作为第一个参数吗?

于 2009-01-28T15:11:27.177 回答
0

在 if-else 语句周围加上括号。我有一种感觉,编辑您的代码的人可能已经“修复”了那里的潜在问题。

于 2009-01-28T15:48:26.163 回答
0

这里有几个很好的尝试建议。我还没有看到的是确保有足够的内存分配给 PHP。drupal.org上的人很好地分解了增加 PHP 内存分配的方法

于 2009-01-28T15:57:28.643 回答
0

发生这种情况的原因是因为您的服务器配置设置为不显示错误,因此您的脚本依赖于执行它error_reporting(E_ALL);- 只要error_reporting()函数被执行,这应该可以正常工作。但是,如果出现解析错误,error_reporting(E_ALL)则不会执行,因此您不会看到错误,因为 php.ini 错误报告设置永远不会被覆盖。

您唯一的解决方案是在更高的位置设置 error_reporting,例如 htaccess 或 php.ini。但是现在至少您知道空白页 = 解析错误!

于 2011-06-22T14:20:33.117 回答
0

如果您确定没有错误并且一直出现空白页,我建议您安装 php-process。

yum -y install php-process

在其他情况下,如果您没有安装 pear,则会收到此类错误。

yum -y install php-pear php-pear-DB或者只是安装数据库pear install DB

希望这可以帮助解决空白页问题的人。

于 2014-05-20T20:28:57.143 回答