schwer zu sagen - hast Du mal versucht mit einem absoluten Pfad zu arbeiten ? Da würde ich ansetzen.
allo zusammen,
ich habe ein Script welches ist auf dem neusten XAMPP-Server geschrieben habe und jetzt auf einen Server bei D)F laden wollte. Aber es kommt immer ein Fehler 500. Der CGI-Debugger meldet folgendes:
[Fri May 12 16:09:41 2006] [error] [client 80.136.245.108] malformed header from script. Bad header=Content-Type: /www/114720_53757/webseiten/xxx/xxx/server_address.php
Jetzt aber von vorne: Es handelt sich um ein Ajax-Script, welches mit PHP auf eine Datenbank zugreift.
Die Datei Index.php ist hier wohl uninteressant, weil Sie nur den fraglichen Teil included. Bis auf vielleicht diesen Teil:
Included wird dann plusminus.php:Code:<script language="javascript" type="text/javascript" src="libs/ajason/javascript/json.js"></script> <script language="javascript" type="text/javascript" src="libs/ajason/javascript/ajax.js"></script> <script language="javascript" type="text/javascript" src="libs/template.js"></script> <script language="javascript" type="text/javascript" src="libs/domex.js"></script>
n server_adresses.php steht das hier:PHP-Code:<script language="JavaScript">
<!--
<?php
if ($_POST[name]=="S") { include ("common_addressspl.php"); }
elseif ($_POST[name]=="A") { include ("common_addressal.php"); }
else { die("kein User"); }
$objAjax = createAjaxObject();
// erstellen von Client-Informationen
$objAjaxClient = $objAjax->getClient();
echo $objAjaxClient->getJavaScript();
?>
//-->
function doLiveSearch()
{
ajax_searchAddress(document.getElementById("query").value, cb_liveSearch);
}
function cb_liveSearch(result)
{
var output = TrimPath.processDOMTemplate("result_jst", result);
showResult(output);
}
var objTimer = null;
function liveSearchStart()
{
//--- show progress message
showResult ('<tr><td align="center" colspan="7"><img src="ico_searching.gif" alt="Daten werden geladen ...">Daten werden geladen...</td></tr>')
if (objTimer) {
window.clearTimeout(objTimer);
}
objTimer = window.setTimeout("doLiveSearch()", 500);
}
function showResult(htmlcode)
{
objDestinationTable = document.getElementById("search_result");
replaceTableContent(objDestinationTable, htmlcode);
}
/**
* Hilfsfunktion, um einen Tabellenbody mit anderen Werten zu versehen. Diese
* Funktion ist notwendig, da innerHTML für TBODY Elemente für Internet Explorer
* nicht funktioniert
*/
function replaceTableContent(objDestinationTable, htmlcode)
{
//--- find the table body!
objDestinationBody = DOMEX_getElementByTagName(objDestinationTable, "TBODY");
//--- ablöschen der Zieltabelle
DOMEX_removeChildNodes(objDestinationBody);
//--- Erzeugen einer temporären Tabelle
var tempDiv = document.createElement("div");
document.body.appendChild(tempDiv);
tempDiv.innerHTML = '<table id="temp_table" style="display: none;">'+htmlcode+'</table>';
var tt = document.getElementById("temp_table");
objTTBody = DOMEX_getElementByTagName(tt, "TBODY");
for (nIndex = 0; nIndex < objTTBody.childNodes.length; nIndex++)
{
objDestinationBody.appendChild(objTTBody.childNode s[nIndex].cloneNode(true));
}
//--- temporäre Tabelle wieder löschen
document.body.removeChild(tempDiv);
}
/**
* Hilfsfunktion, um eine Tabellenzeile mit anderen Werten zu versehen. Diese
* Funktion ist notwendig, da innerHTML für TR Elemente für Internet Explorer
* nicht funktioniert
*/
function replaceRowContent(objDestinationRow, htmlcode)
{
//--- ablöschen der Zielzeile
DOMEX_removeChildNodes(objDestinationRow);
//--- Erzeugen einer temporären Tabelle
var tempDiv = document.createElement("div");
document.body.appendChild(tempDiv);
tempDiv.innerHTML = '<table style="display: none;"><tr id="temp_tr">'+htmlcode+'</tr></table>';
var ttr = document.getElementById("temp_tr");
for (nIndex = 0; nIndex < ttr.childNodes.length; nIndex++)
{
objDestinationRow.appendChild(ttr.childNodes[nIndex].cloneNode(true));
}
//--- temporäre Tabelle wieder löschen
document.body.removeChild(tempDiv);
}
var arrPreviousValues = new Array();
/////////////////////////////
// FUNKTION eines Addieren //
/////////////////////////////
function editplus(nId)
{
objRow = document.getElementById("tr_"+nId);
arrPreviousValues[nId] = objRow.innerHTML;
var data = {
values : { mkmenge: getValueByPosition(objRow, "TD", 3), // postalcode
id: nId }
};
ajax_writeAddress(data);
setTimeout("doLiveSearch()",50);
}
/////////////////////////////////
// FUNKTION eines Subtrahieren //
/////////////////////////////////
function editminus(nId)
{
objRow = document.getElementById("tr_"+nId);
arrPreviousValues[nId] = objRow.innerHTML;
var data = {
values : { mkmenge: getValueByPosition(objRow, "TD", 3), // postalcode
id: nId }
};
ajax_writeMinus(data);
setTimeout("doLiveSearch()",50);
}
function getValueByPosition(objElement, strTagName, nPosition)
{
nCurPosition = 0;
for (nIndex = 0; nIndex < objElement.childNodes.length; nIndex++)
{
if (objElement.childNodes[nIndex].nodeName == strTagName)
{
if (nCurPosition == nPosition)
{
strValue = objElement.childNodes[nIndex].innerHTML;
strValue = strValue.replace(/<em style="color: red">|<\/em>/gi, "");
strValue = strValue.replace(/<em style="color: red;">|<\/em>/gi, "");
return strValue;
}
nCurPosition++;
}
}
}
function editCancel(nId)
{
objRow = document.getElementById("tr_"+nId);
replaceRowContent(objRow, arrPreviousValues[nId]);
}
</script>
<div style="margin-left: 10px; margin-top: 10px;">
Suche nach: <input type="text" style="width: 400px;" onKeyUp="liveSearchStart()" id="query"><br /><br />
<table id="search_result" border="0" cellpadding="3px" cellspacing="0px">
<thead>
<td align="right">#</td>
<td>Name</td>
<td align="right">Preis</td>
<td align="center">Anzahl</td>
<td align="center"> </td>
<td align="center"> </td>
</thead>
<tbody >
</tbody>
</table>
</div>
<textarea id="result_jst" style="display:none;">
{var nCount = 0}
{for addr in addresses}
{if addr.mkpreis}
<tr id="tr_${addr.id}" class="{if nCount%2 == 0}even{else}uneven{/if}">
<td align="right">{var mkn = addr.mknummer.replace(new RegExp("("+query+")", "i"), "<em style=\"color: red;\">$1</em>")}${mkn}</td>
<td>{var mkna = addr.mkname.replace(new RegExp("("+query+")", "i"), "<em style=\"color: red;\">$1</em>")}${mkna}</td>
<td align="right">${addr.mkpreis}</td>
<td align="center">${addr.mkmenge}</td>
<td align="center">[ <a href="javascript: editplus(${addr.id})">+</a> ]</td>
<td align="center">[ <a href="javascript: editminus(${addr.id})">-</a> ]</td>
</tr>
{eval}
nCount++;
{/eval} {/if}
{forelse}
<tr><td colspan="7">Keine passende Adresse</td></tr>
{/for}
<tr><td colspan="7" align="center">--- Ende der Liste ---</td></tr>
</textarea>
<div style="margin-left: 10px; margin-top: 10px;">
<br /><br />
<form action="index.php" method="post">
<input name="auswahl" type="hidden" value="" />
<input name="name" type="hidden" value="<? echo $_POST[name]; ?>" />
<input name="Zurück" type="submit" value="Zurück" /></form>
</div>
Da soll der Fehler sein? Wenn ich ein Freizeichen vor <?php setze, dann bekomme ich einen Fehler Header allready send. Cant modify!PHP-Code:<?php
$pathToRoot = "../../../../";
include ("common_addressspl.php");
$objAjax = createAjaxObject();
$objAjaxServer = $objAjax->getServer();
if ( $objAjaxServer->isRequest() )
{
echo $objAjaxServer->handleRequest();
}
?>
Damit es vollständig ist noch die letzte Datei des Scripts (common_adressesspl.php)
ch weiß echt nicht woran das liegen sollte, vorallem weil es bei mir auf dem Testserver geht. Ach und der Liveserver ist bei Domain)Factory.PHP-Code:<?php
require_once("libs/ajason/php/Ajax.php");
class Addresses
{
public $addresses = array();
public $query;
}
class Address
{
public $id;
public $mkmenge;
public $mknummer;
public $mkpreis;
public $mkname;
public $mkstatus;
}
function searchAddress($strSearchKey)
{
$arrExplodedSearchKeys = explode(" ", $strSearchKey);
$arrSearchKeys = array();
foreach ($arrExplodedSearchKeys as $strCurSearchKey)
{
if ($strCurSearchKey != "")
{
$arrSearchKeys[] = strtolower($strCurSearchKey);
}
}
$objAddressBook = new Addresses();
$objAddressBook->query = implode("|", $arrSearchKeys);
//
// Öffnen der DB von SPL
$server = "mysql4.xxx.de"; // Servername
$user = "dbxxx"; // DB-User
$pass = "xxx"; // Passwort
$datenbank = "dbxxx"; // Name der DB
$conn = mysql_connect($server, $user, $pass);
mysql_select_db($datenbank, $conn);
//
$query = "SELECT * FROM products";
$result=mysql_query($query);
while ($daten=mysql_fetch_array($result, MYSQL_ASSOC)) {
$query2 = "SELECT * FROM stock_spl WHERE id_products = $daten[products_id]";
$result2=mysql_query($query2);
while ($daten2=mysql_fetch_array($result2, MYSQL_ASSOC)) {
$anz=$daten2[quantity];
$idstock=$daten2[id_products];
}
$nMatches = 0;
$objAddress = new Address();
$objAddress->id = $daten["products_id"];
$objAddress->mkmenge = $anz;
$objAddress->mknummer = $daten["products_model"];
$objAddress->mkpreis = number_format($daten[products_price]*1.16, 2);
$objAddress->mkname = $daten["products_description"];
$objAddress->mkstatus = $bcstatus;
foreach ($arrSearchKeys as $strSearchRegEx)
{
if (preg_match("/".$strSearchRegEx."/i", $daten["products_model"]) ) {
$nMatches++;
continue;
}
if (preg_match("/".$strSearchRegEx."/i", $daten["products_description"]) ) {
$nMatches++;
continue;
}
}
if ($nMatches >= sizeof($arrSearchKeys))
{
$objAddressBook->addresses[] = $objAddress;
}
}
return $objAddressBook;
}
function writeAddress($objValues)
{
//
// Öffnen der DB von SPL
$server = "mysql4.xxx.de"; // Servername
$user = "dbxxx"; // DB-User
$pass = "xxx"; // Passwort
$datenbank = "dbxxx"; // Name der DB
$conn = @mysql_connect($server, $user, $pass);
@mysql_select_db($datenbank, $conn);
//
$objAddress = $objValues->values;
$objekt1=$objAddress->mkmenge;
$objekt1++;
$query = "UPDATE stock_spl SET quantity='".$objekt1."' WHERE id_products=".$objAddress->id;
$result=mysql_query($query);
}
function writeMinus($objValues)
{
//
// Öffnen der DB von SPL
$server = "mysql4.xxx.de"; // Servername
$user = "dbxxx"; // DB-User
$pass = "xxx"; // Passwort
$datenbank = "dbxxx"; // Name der DB
$conn = @mysql_connect($server, $user, $pass);
@mysql_select_db($datenbank, $conn);
//
$objAddress = $objValues->values;
$objekt1=$objAddress->mkmenge;
$objekt1--;
$query = "UPDATE stock_spl SET quantity='".$objekt1."' WHERE id_products=".$objAddress->id;
$result=mysql_query($query);
}
function createAjaxObject()
{
$objAjax = new Ajax();
$objAjax->setOption( Ajax::PrependOption, "ajax_" );
//$objAjax->setOption( Ajax::DebugOption, true );
$objAjax->setOption( Ajax::HandlerOption, "server_address.php");
$objAjax->setOption( Ajax::EncodeOption, true);
$objAjax->registerFunction ("searchAddress");
$objAjax->registerFunction ("writeAddress");
$objAjax->registerFunction ("writeMinus");
return $objAjax;
}
?>
Hat jemand einen Tipp?
PS: der großteil des Scriptes ist von einen aus der Zeitschrift internet-pro übernommen. Livesuche mit Änderungen.
Geändert von spl (12.05.2006 um 18:40 Uhr)
Gruß Sebastian
Webdesign und viel mehr http://lauff.info
yingiz, deine Wirtschaftsgemeinschaft im Netz - gemeinsam bis zu 60% vom Verkaufspreis oder bis zu 300 € Provisionen verdienen. Jeder profitiert von Jedem! Gemeinsam stark! Jetzt anmelden
schwer zu sagen - hast Du mal versucht mit einem absoluten Pfad zu arbeiten ? Da würde ich ansetzen.
TYPO3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
an dem Pfad liegt es nicht aber ich habe jetzt noch viel experimentiert und versucht im Internet zu lesen. Da gibt es verdammt wenige. Aber ich habe gefunden, das AJASON als antwort den Content-Type: text/json zurückliefert und man das auch auf text/xml ändern kann. Das habe ich getan und gehofft, das jetzt alles läuft - wie bei einem Beitrag im Netz. Aber leider nicht.
Noch weitere Ideen?
Gruß Sebastian
Webdesign und viel mehr http://lauff.info
yingiz, deine Wirtschaftsgemeinschaft im Netz - gemeinsam bis zu 60% vom Verkaufspreis oder bis zu 300 € Provisionen verdienen. Jeder profitiert von Jedem! Gemeinsam stark! Jetzt anmelden
Ja. Ich habe es!
Datei: AjaxServer.php
Jetzt wo ich den header umgeschrieben habe, geht es. Ich hoffe das hier hilft dann später anderen.PHP-Code:$response->setServerVersion( AjaxServer::version );
//header( 'Content-Type', 'text/xml' );
header( 'Content-Type: text/xml' );
return $json->encode( $response );
}
Gruß Sebastian
Webdesign und viel mehr http://lauff.info
yingiz, deine Wirtschaftsgemeinschaft im Netz - gemeinsam bis zu 60% vom Verkaufspreis oder bis zu 300 € Provisionen verdienen. Jeder profitiert von Jedem! Gemeinsam stark! Jetzt anmelden
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)