2013-02-18 108 views
0
echo json_encode(array(utf8_encode("success"))); 

该代码返回null,我试图调试项目,并希望它返回一个变量后,但它甚至不会用绳子json_encode返回null

继承人的完整代码工作:http://www.bludevelopment.com/php/getdata.txt

问题出在uploadinstalldata函数中。 该应用程序为每个功能单独调用它。

任何帮助都很赞赏!

function uploadInstallData(){ 

if (isset($_POST["Timestamp"]) && isset($_POST["PMINo"]) && isset($_POST["GPS"])){ 
//$result = array(utf8_encode('value', 'success')); 


if ($_POST['cmd'] == "uploaddata"){ 

$con = mysql_connect("localhost","bludevel_PMI","password1"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("bludevel_PMIForm", $con); 

$sql="INSERT INTO JobData (startTime, PMINo, Address, BeforePhoto, ExtraPhoto1,     ExtraPhoto2, ExtraPhoto3, AbletoInstall, InstallProblem, BBoxStatus, 
NewLocation, BBoxPhoto, Occupied, BasementFinished, BuildingType, ServiceSize,  ServiceType, HousepipeSize, HousepipeType, SSControlValve, NewMeter, 
NewMeterSize, NewTransmitter, MIULocation, MeterInstallType, MtrLocated, MtrDirection1, MtrSideof1, MtrDistance, MtrDirection2, MtrSideof2, AccessNotes, 
BldgWidth, BldgDepth, Review, StreetValve, HouseValve, AuthorizedWork, InspectorsName, NewStreetValve, AddPiping, Installedby, AfterPhoto, AfterPhoto2, 
CustomerIncentive, ConfirmSignal, InstallNotes, EndTime, GPS) 
    VALUES 
      ('".$_POST[Timestamp]."', 
      '".$_POST[PMINo]."', 
     '".$_POST[Address]."', 
      '".$_POST[BeforePhoto]."', 
      '".$_POST[ExtraPhoto1]."', 
      '".$_POST[ExtraPhoto2]."', 
     '".$_POST[ExtraPhoto3]."', 
     '".$_POST[AbletoInstall]."', 
     '".$_POST[InstallProblem]."', 
     '".$_POST[BBoxStatus]."', 
     '".$_POST[NewLocation]."', 
     '".$_POST[BBoxPhoto]."', 
     '".$_POST[Occupied]."', 
     '".$_POST[BasementFinished]."', 
     '".$_POST[BuildingType]."', 
     '".$_POST[ServiceSize]."', 
     '".$_POST[ServiceType]."', 
     '".$_POST[HousepipeSize]."', 
     '".$_POST[HousepipeType]."', 
     '".$_POST[SSControlValve]."', 
     '".$_POST[NewMeter]."', 
     '".$_POST[NewMeterSize]."', 
     '".$_POST[NewTransmitter]."', 
     '".$_POST[MIULocation]."', 
     '".$_POST[MeterInstallType]."', 
     '".$_POST[MtrLocated]."', 
     '".$_POST[MtrDirection1]."', 
     '".$_POST[MtrSideof1]."', 
     '".$_POST[MtrDistance]."', 
     '".$_POST[MtrDirection2]."', 
     '".$_POST[MtrSideof2]."', 
     '".$_POST[AccessNotes]."', 
     '".$_POST[BldgWidth]."', 
     '".$_POST[BldgDepth]."', 
     '".$_POST[Review]."', 
     '".$_POST[StreetValve]."', 
     '".$_POST[HouseValve]."', 
     '".$_POST[AuthorizedWork]."', 
     '".$_POST[InspectorsName]."', 
     '".$_POST[NewStreetValve]."', 
     '".$_POST[AddPiping]."', 
     '".$_POST[Installedby]."', 
     '".$_POST[AfterPhoto]."', 
     '".$_POST[AfterPhoto2]."', 
     '".$_POST[CustomerIncentive]."', 
     '".$_POST[ConfirmSignal]."', 
     '".$_POST[InstallNotes]."', 
     '".$_POST[EndTime]."', 
     '".$_POST[GPS]."')"; 


echo json_encode(array(utf8_encode("success"))); 
return true; 
$res = mysql_query($sql); 
if (!res) 
    { 
    die('Error: ' . mysql_error()); 
    } 

if (!$mysql->error) { 
} 

mysql_close($con); 
} 
}} 
+1

其实,这代码返回'[ “成功”]' – jeroen 2013-02-18 20:20:23

+0

'回声json_encode(阵列(函数utf8_encode( “成功”) ));'完美地工作 – vikingmaster 2013-02-18 20:20:26

+0

难道是因为我有另一个类json_encode的实例,即使它在一个单独的函数中,并且从来没有调用过? – user1899201 2013-02-18 20:22:02

回答

3

正如我所提到的,你不应该使用ext/mysql扩展名为新的代码。直到它从互联网上所有那些古老的PHP教程中清除出来,我们都不会看到人们走到“为什么我的代码不再工作”的末尾,因为使用它会在PHP 5.5中抛出E_DEPRECATED,并且它将被彻底删除更高版本。

这使用mysqli扩展名和prepared queries(您也可以使用PDO)。

$db = new mysqli($dbip, $dbuser, $dbpass, $dbname); 

if ($query = $db->prepare("INSERT INTO table_name (x, y) values (?, ?)")) { 
    $query->bind_param("ss", $_POST["x"], $_POST["y"]); // s = string, i = int 
    $query->execute(); 
} else { 
    echo json_encode(array("error" => "malformed query")); 
    return false; 
    // in PHP, false or null both signify an error in a non-boolean context 
} 
echo json_encode(array("success" => "query attempted")); 
return true; 

当然,你不想盲目地认为查询是成功的,就像我在这里(因此“尝试”)。

您的JSON实际上似乎并没有失败,但最好是将数组中的值赋予一个关联键。另外,utf8_encode数组给出null。看到这个:

json_encode(array("query attempted")); // ["success"] 
json_encode(array("success" => "more info")); // {"success":"more info"} 
json_encode(utf8_encode(array("success" => "more info"))); // null 

这样做是更好的做法,可以帮助调试复杂的json,当它可以返回许多不同的东西。回答你的问题的“零”部分就是这个。

此外,ISO-8859-1(又名latin1)是Unicode的一个子集(as as ASCII)。它会干净地编码为JSON。尽管(例如,用户输入),您应该明确地使用JSON粘贴任何东西utf8_encode


我错过了当我第一次回答另一个重要的事情(我不能相信我错过了这一点):

. $_POST[NewLocation] . 

这是不妥当的PHP。它可能工作取决于如何严格配置PHP,但数组中的键被引用为字符串,而不是作为常量引用。这可以并将在错误日志(Undefined T_CONSTANT NewLocation; 'NewLocation' assumed)中引发错误。

使用$_POST["NewLocation"](单或双引号的工作,但要记住,他们在PHP中有着不同的含义)