0
echo json_encode(array(utf8_encode("success")));

该代码返回null,我正在尝试调试一个项目并希望它返回一个post变量,但它甚至不适用于字符串

继承人完整代码: 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);
}
}}
4

1 回答 1

3

正如我所提到的,您不应该将ext/mysql扩展用于新代码。直到从互联网上所有那些古老的 PHP 教程中清除它之前,我们不会看到人们结束“为什么我的代码不再工作”,因为使用它会E_DEPRECATED在 PHP 5.5 中抛出,并且它将在以后完全删除版本。

这使用mysqli扩展,带有准备好的查询(您也可以使用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_encodeing 数组给出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(aka latin1) 是 Unicode 的子集(与 ASCII 一样);它将干净地编码为 JSON。但是,您应该utf8_encode明确地保留在 JSON 中的任何内容(例如用户输入)。


我第一次回答时错过了另一件重要的事情(我不敢相信我错过了这个):

. $_POST[NewLocation] .

这不是正确的 PHP。它可能会根据 PHP 配置的严格程度而起作用,但数组中的键被引用为字符串,而不是不被引用为常量。Undefined T_CONSTANT NewLocation; 'NewLocation' assumed这可以并且将在错误日志 ( )中引发错误。

使用$_POST["NewLocation"](单引号或双引号都可以,但请记住它们在 PHP 中的含义不同)

于 2013-02-18T21:14:49.053 回答