Pregunta

Tengo la siguiente parte de una aplicación AJAX, que no da errores, pero tampoco se muestra nada en la pantalla, por lo que no estoy seguro de dónde radica el problema. Llamar a esta página directamente desde un navegador con? Cmd & Amp; id = 1 debería volver, o incluso llamarla sin? Cmd debería devolver el mensaje de error cmd.

editar: casos de prueba agregados: recibo el mensaje de error cmd, pero cuando paso & amp; id = 1 (1 es una identificación válida), no se devuelve ningún html, la fuente de visualización está completamente en blanco. ¿He usado echo incorrectamente o algo similar?

edit2: eco agregado como primera línea: el primer eco no se ve en absoluto

edit3: Después de volver a una versión anterior y hacer todos los cambios nuevamente, ahora obtengo una salida de prueba de juego de caracteres al llamar con cmd y parámetros de identificación válidos. El código que estoy usando es idéntico al que se pega a continuación.

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

}

Pido disculpas por el espacio, pero sucede automáticamente cuando presiono el botón de código.

¿Fue útil?

Solución

Tiene un paréntesis adicional en la línea 22

Esto

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

Necesita ser esto

$con->set_charset("utf8");

Dos consejos de depuración para el futuro. Para el primero, necesitará acceso de shell a su servidor web, o deberá instalar PHP localmente en su máquina de desarrollo. Si está ejecutando Unix, es posible que ya lo tenga. Abra una terminal y escriba

php -v

Si lo tiene, puede verificar la sintaxis de un archivo PHP haciendo

//on *nix
php yourfile.php

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

Esto rescatará los errores de sintaxis general. Además, busque / busque en este sitio & Quot; configure php localmente tutorial & Quot; o algo similar para aprender cómo obtener una copia completa del servidor web A, la base de datos mysql y php ejecutándose en su propia máquina.

La segunda sugerencia, que será más fácil si instala una copia local, es verificar los registros de errores. Incluso cuando PHP no muestra mensajes de error, los errores se registrarán en un archivo en algún lugar. En su caso, habría visto algo así en el archivo de registro

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

Otros consejos

Esto lo ayudará a ver sus errores:

ini_set('display_errors', '1');

Tiene un paréntesis de cierre adicional aquí:

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

¿Has probado una prueba básica de colocar una declaración print o echo inmediatamente en la parte superior del script para probar la salida?

<?php

  print "Test";

?>

También sugeriría usar un or die($msg) captura después de su intento de conexión.

Estaría bien para su caso. Solo como un punto de partida. Hago esto de vez en cuando cuando es necesario. En lugar de suponer que el problema es un problema enormemente complejo, a menudo resulta ser una condición inesperada en las variables de solicitud, acceder a la página incorrecta, acceder a la página correcta en el momento incorrecto, etc.

Puede ayudar:

  1. Monitoree el registro del servidor web (como tail -f /var/log/apache2/error.log)

  2. Use Firebug y vea en la consola la respuesta AJAX que proviene de su script. El error puede aparecer allí

Si no se alcanza ninguno de los ecos de depuración, el punto de falla parecería estar alrededor de la conexión de la base de datos, a menos que me falte algo.

Verifique los detalles de la conexión y verifique que tenga habilitada la extensión mysqli.

He encontrado un problema similar en el que inexplicablemente obtendría una página en blanco, generalmente en IE6 pero a veces en otros navegadores. Resultó ser un problema de codificación de caracteres. Estaba generando algunos caracteres extraños, y los navegadores adivinaban en qué se basaba la codificación en el contenido. Lo arreglé estableciendo explícitamente este encabezado:

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

No sé si esto causaría el error, pero no debería eso y getRecords bind_param tiene " i " como primer parámetro?

  

Llamar a esta página directamente desde un   navegador con ?cmd&id=1 debería volver

¿Qué quieres decir con " return " ;? Por lo que puedo ver de su código, necesita ?cmd=GetSALEData o de lo contrario se devolverá una página en blanco, porque todo está envuelto dentro de la declaración if($cmd=="GetSALEData").

Corrección : Debería ver " test contest charset " si su cadena de consulta tiene cmd establecido en algo diferente a " GetSALEData " ;. (Esas dos pruebas se agregaron al código más adelante).

Hay varias buenas sugerencias aquí para intentarlo. Lo que aún no vi es asegurarme de que haya suficiente memoria asignada a PHP. Las personas de más de drupal.org tienen un buen desglose de formas de aumentar la asignación de memoria de PHP .

Ponga paréntesis alrededor de su if-else    declaraciones. Tengo la sensación de la persona que    editado su código puede tener " fijo " una    problema potencial allí.

La razón por la que esto sucede es porque la configuración de su servidor está configurada para no mostrar errores, por lo que su secuencia de comandos depende de ejecutar esa error_reporting(E_ALL);, esto debería funcionar bien siempre que se ejecute la función error_reporting(). Sin embargo, si hay un error de análisis, el error_reporting(E_ALL) no se ejecutará y, por lo tanto, no verá un error, ya que la configuración de informes de errores php.ini nunca se sobrescribe.

La única solución para usted es configurar error_reporting en lugares más altos, como htaccess o php.ini. ¡Pero ahora al menos sabes que una página en blanco = un error de análisis!

Si está seguro de que no tiene ningún error y sigue obteniendo una página en blanco, le sugiero que instale php-process.

yum -y install php-process

En otros casos, recibirá un error de este tipo si no tiene instalado pear.

yum -y install php-pear php-pear-DB o simplemente para instalar el db pear install DB

Espero que esto ayude a alguien con el problema de la página en blanco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top