Frage

Ich habe den folgenden Teil einer AJAX-Anwendung, die keine Fehler gibt, aber auch nichts auf den Bildschirm angezeigt, so dass ich bin nicht sicher, wo das Problem liegt. Beim Aufruf dieser Seite direkt von einem Browser mit? Cmd & id = 1 zurückzukehren, oder rufen sie sogar ohne? Cmd sollte die cmd Fehlermeldung zurück.

edit: hinzugefügt Testfälle: Ich mache die cmd Fehlermeldung bekommen, aber wenn ich pass & id = 1 (1 ist eine gültige ID), wird kein HTML zurück auch immer, Ansicht Quelle ist völlig leer. Habe ich verwenden Echo falsch oder etwas ähnliches?

edit2: hinzugefügt Echo als erste Zeile: das erste Echo ist nicht überhaupt gesehen

EDIT3: Nach dem auf eine ältere Version zurück und macht alle Änderungen wieder, ich jetzt Test charset Ausgabe erhalten, wenn sie mit gültigen cmd und id paramters aufrufen. Der Code, den ich verwende, ist identisch zu dem, was unten eingefügt wird.

Sie den Code ein:

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

}

Ich entschuldige mich für den Abstand, aber es geschieht automatisch, wenn ich die Code-Taste drücken.

War es hilfreich?

Lösung

Sie haben eine zusätzliche Klammer auf der Leitung 22

Das

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

Anforderungen, dies sein

$con->set_charset("utf8");

Zwei-Debugging-Tipps für die Zukunft. Zum ersten werden Sie Shell-Zugriff auf Ihren Web-Host benötigen, oder Sie PHP lokal auf dem Entwicklungsrechner zu installieren. Wenn Sie Unix laufen lassen, können Sie bereits haben. Öffnen Sie ein Terminal und geben Sie

php -v

Wenn Sie es haben, können Sie die Syntax einer PHP-Datei überprüfen, indem Sie

//on *nix
php yourfile.php

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

Dies wird auf die Bruttosyntaxfehler bürgen. Auch google / search diese Seite für die „setup PHP lokal Tutorial“ oder etwas ähnliches zu lernen, wie eine vollständige Kopie von einem Webserver zu erhalten, MySQL-Datenbank und PHP auf Ihrem eigenen Rechner läuft.

Der zweite Vorschlag, die einfacher sein, wenn Sie eine lokale Kopie installieren, ist Ihre Fehlerprotokolle zu überprüfen. Selbst wenn PHP keine Fehlermeldungen angezeigt wird, werden Fehler immer noch irgendwo in einer Datei protokolliert werden. In Ihrem Fall würde Sie so etwas wie dies in der Protokolldatei zu sehen

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

Andere Tipps

Dies wird helfen, sehen Sie Ihre Fehler:

ini_set('display_errors', '1');

Sie haben eine zusätzliche schließende Klammer hier:

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

Haben Sie einen grundlegenden Test versuchen, einen Druck oder ein echo-Anweisung sofort am Anfang des Skripts des Vergebens Ausgabe zu testen?

<?php

  print "Test";

?>

Ich würde auch vorschlagen, einen or die($msg) Fang nach dem Verbindungsversuch verwendet wird.

Wäre für Ihren Fall in Ordnung sein. Gerade als Ausgangspunkt. Ich tue dies von Zeit zu Zeit, wenn nötig. Anstatt das Problem unter der Annahme, einige massiv komplexe Problem ist, es oft stellt sich heraus, unerwartete Bedingung in Anfragevariablen zu sein, falsche Seite Zugriff auf der rechten Seite zur falschen Zeit zugreifen, etc.

Kann helfen:

  1. , um den Web-Server Log (wie tail -f /var/log/apache2/error.log) Monitor

  2. Verwenden Sie Firebug und von Ihrem Skript kommt in der Konsole die AJAX Antwort sehen. Der Fehler kann es erscheinen

Falls keine der Debug-Echos erreicht wird, dann würde der Fehlerpunkt scheint um die Datenbankverbindung zu sein, es sei denn ich etwas fehlte.

die Verbindungsdetails prüfen, und überprüfen Sie die mysqli-Erweiterung aktiviert ist.

Ich habe ein ähnliches Problem aufgetreten, wo ich aus unerklärlichen Gründen eine leere Seite bekommen würde, in der Regel in IE6 aber manchmal auch in anderen Browsern. Es stellte sich heraus, ein Zeichencodierung Problem. Ich war einige seltsamen Zeichen ausgegeben wird, und der Browser wurde erraten, was die Codierung auf dem Inhalt basiert. Ich reparierte es explizit diesen Header Einstellung:

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

Ich weiß nicht, ob dies den Fehler verursachen würde, sollte aber nicht so und die getRecords bind_param haben „i“ als ersten Parameter?

  

Beim Aufruf dieser Seite direkt von einem   Browser mit ?cmd&id=1 sollte zurückkehren

Was meinst du mit „return“? Von dem, was ich von Ihrem Code sehen kann, müssen Sie ?cmd= GetSALEData oder aber eine leere Seite zurückgegeben werden, weil alles in der if($cmd=="GetSALEData") Aussage gewickelt wird.

Korrektur : Sie sollten "test contest charset" sehen, wenn Sie Ihre Abfrage-String auf etwas anderes als "GetSALEData" cmd gesetzt hat. (Diese beiden Tests wurden später zum Code hinzugefügt.)

Es gibt mehrere gute Vorschläge hier zu versuchen. Die eine, die ich noch nicht gesehen hat, ist sicherzustellen, dass genügend Speicher PHP zugeordnet ist. Die Leute sind über drupal.org eine gute Pause nach unten von der Wegen der PHP-Speicherzuweisung .

erhöhen

Setzen Sie Klammern um Ihre if-else    Aussagen. Ich habe das Gefühl, die Person, die    bearbeitet Code haben „fixed“ a kann    potenzielles Problem gibt.

Der Grund, warum dies geschieht, ist, weil Sie Ihre Serverkonfiguration eingestellt ist keine Fehler angezeigt werden, so dass Ihr Skript setzt auf diese error_reporting(E_ALL); Ausführung - diese funktionieren sollte, solange die error_reporting() Funktion ausgeführt wird. Allerdings , wenn es einen Parse-Fehler ist, wird die error_reporting(E_ALL) nicht ausgeführt werden soll , und es foreyou keinen Fehler wie die php.ini Fehlerberichterstattung Einstellungen nie erhalten überschrieben sehen.

Die einzige Lösung für Sie ist in einer höheren Orten wie .htaccess oder php.ini einstellen error_reporting. Aber jetzt zumindest wissen Sie, dass ein BLANKPAGE einen Parse-Fehler =!

Wenn Sie sicher sind, haben Sie keine Fehler haben und halten eine leere Seite bekommen, würde ich Sie php-Prozess vorschlagen installieren.

yum -y install php-process

In anderen Fällen erhalten Sie einen solchen Fehler, wenn Sie nicht über Birne installiert.

yum -y install php-pear php-pear-DB oder einfach nur die db pear install DB installieren

Hoffe, das jemand mit der leeren Seite Problem hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top