Pergunta

Eu tenho o seguinte parte de um aplicativo AJAX, o que dá nenhum erro, mas também nada é exibido na tela, por isso estou certeza de onde as mentiras de problema. Chamar essa página diretamente de um navegador com? Cmd & id = 1 deve retornar, ou até mesmo chamando-o sem? Cmd deve retornar a mensagem de erro cmd.

EDIT: adicionado casos de teste: eu recebo a mensagem de erro cmd, mas quando eu passar & id = 1 (1 é um ID válido), não html é retornado seja, fonte de vista é completamente em branco. Tenho usado echo incorretamente ou algo semelhante?

edit2: echo adicionado como primeira linha: o primeiro eco não é visto qualquer

edit3: Depois de voltar para uma versão anterior e fazendo todas as alterações novamente, eu agora obter uma saída charset teste ao chamar com cmd e id paramters válidos. O código que estou usando é idêntico ao que é colado abaixo.

o código:

<?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()));
    }
  }

}

Peço desculpas para o espaçamento, mas isso acontece automaticamente quando pressiono o botão de código.

Foi útil?

Solução

Você tem um parêntese extra na linha 22

Este

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

Precisa ser este

$con->set_charset("utf8");

Dois depuração dicas para o futuro. Para o primeiro, você vai precisar de acesso shell para o seu host, ou você vai precisar instalar PHP localmente em sua máquina de desenvolvimento. Se você estiver executando Unix, você já pode tê-lo. Abra um terminal e digite

php -v

Se você tem isso, você pode verificar a sintaxe de um arquivo PHP, fazendo

//on *nix
php yourfile.php

//or on windows
c:\path\to\php.exe yourfile.php

Isto irá socorrer em erros de sintaxe brutas. Além disso, google / search este site para "php configuração localmente tutorial" ou algo semelhante para aprender como obter uma cópia completa de um servidor web, banco de dados mysql e php executado em sua própria máquina.

A segunda sugestão, que será mais fácil se você instalar uma cópia local, é verificar seus logs de erro. Mesmo quando o PHP não está exibindo mensagens de erro, os erros ainda serão registrados em um algum lugar do arquivo. No seu caso, você teria visto algo parecido com isso no arquivo de log

PHP Parse error:  syntax error, unexpected ')' in foo.php on line 22

Outras dicas

Isso irá ajudá-lo a ver os seus erros:

ini_set('display_errors', '1');

Você tem um parêntese de fechamento extra aqui:

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

Você já tentou um teste básico de colocar uma cópia ou eco instrução imediatamente no topo do script para saída de teste?

<?php

  print "Test";

?>

Também gostaria de sugerir o uso de uma captura or die($msg) após sua tentativa de conexão.

seria bom para o seu caso. Assim como um ponto de partida. Eu faço isso de vez em quando, quando necessário. Ao invés de assumir a questão é algum problema massivamente complexo, muitas vezes acaba por ser condição inesperada em variáveis ??de solicitação, o acesso a página errada, o acesso a página certa no momento errado, etc.

pode ajudar:

  1. Monitorar o log do servidor Web (como tail -f /var/log/apache2/error.log)

  2. Use o Firebug e veja no Console a resposta AJAX vindo do seu script. O erro pode aparecer lá

Se nenhum dos debug echo de são alcançados, então o ponto de falha parece ser em torno da conexão com o banco, a menos que eu estou faltando alguma coisa.

Verifique os detalhes de conexão e verificar se você tem a extensão mysqli habilitado.

Eu encontrei um problema semelhante onde eu inexplicavelmente ter uma página em branco, normalmente no IE6, mas às vezes em outros navegadores. Ele acabou por ser um problema de codificação de caracteres. I foi a saída de alguns personagens estranhos, e os navegadores foram adivinhar o que a codificação foi baseada no conteúdo. Eu fixo-lo, definindo explicitamente este cabeçalho:

header('Content-type: text/html; charset=utf-8');
$getHtml->bind_param("s", $id);

Eu não sei se isso iria provocar o erro, mas não deve isso e os getRecords bind_param tem "i" como o primeiro parâmetro?

Chamar essa página diretamente de um navegador com ?cmd&id=1 deve retornar

O que você quer dizer com "retorno"? Pelo que posso ver do seu código, você precisa ?cmd= GetSALEData ou então uma página em branco será devolvido, porque tudo é embrulhado dentro da declaração if($cmd=="GetSALEData").

Correção : Você deverá ver "test contest charset" se a cadeia de consulta tem um conjunto cmd para algo diferente de "GetSALEData". (Estes dois ensaios foram adicionados ao código mais tarde.)

Existem várias sugestões boas aqui para tentar. A única que eu não vi ainda está para se certificar que não há memória suficiente alocada para PHP. A gente lá estão drupal.org ter um bom quebra do noreferrer maneiras de aumentar de PHP alocação de memória .

parênteses Coloque em torno de seu if-else afirmações. Tenho a sensação de que a pessoa que editado o seu código pode ter "corrigido" um potencial problema lá.

A razão isso está acontecendo é porque sua configuração do servidor está configurado para não exibir erros, então seu script está confiando em execução que error_reporting(E_ALL); - isso deve funcionar bem, desde que a função error_reporting() é executado. No entanto, se houver um erro de análise, o error_reporting(E_ALL) não serão executados , e há foreyou não verá um erro como as configurações de relatório de erros do php.ini nunca se substituído.

A única solução para você é para definir error_reporting em um lugares mais altos, como htaccess ou php.ini. Mas agora, pelo menos você sabe que um BlankPage = um erro de análise!

Se você tem certeza que você não tem erro e continuo recebendo uma página em branco, eu sugiro que você instalar o php-processo.

yum -y install php-process

Em outros casos, você começa como um erro se você não tiver pêra instalado.

yum -y install php-pear php-pear-DB ou apenas para instalar o db pear install DB

Espero que isso ajude alguém com a questão página em branco.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top