简体   繁体   中英

json_encode returning null

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

that code is returning null, I am trying to debug a project and would like it to return a post variable, but it won't even work with a string

heres the full code: http://www.bludevelopment.com/php/getdata.txt

The problem is in the uploadinstalldata function. The app calls it separately for each function.

Any help is much Appreciated!

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

As I mentioned, you should not be using the ext/mysql extension for new code. Until it is purged from all those ancient PHP tutorials on the internet, we wont see the end of people going "Why doesn't my code work any more", because using it throws E_DEPRECATED in PHP 5.5, and it will be removed completely in later versions.

This uses the mysqli extension, with prepared queries (you can also use 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;

Of course, you don't want to blindly assume that a query was successful like I do here (hence "attempted").

Your JSON doesn't actually seem to be failing, but it is probably best to give the values in the array an associative key. Also, utf8_encode ing an array gives null . See this:

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

Doing this is better practice and can help debug complex json when it can return many different things. The "null" part that answers your question was pretty much this.

Also, ISO-8859-1 (aka latin1 ) is a subset of Unicode (as is ASCII); it will encode cleanly to JSON. You should utf8_encode anything that you stick in JSON explicitly, though (such as user input).


Another vital thing I missed when I first answered (I can't believe I missed this):

. $_POST[NewLocation] .

This isn't proper PHP. It might work depending on how strictly PHP is configured, but keys in arrays are quoted as strings, not unquoted as constants. This can and will throw an error in the error log ( Undefined T_CONSTANT NewLocation; 'NewLocation' assumed ).

Use $_POST["NewLocation"] (single or double quotes work, but remember they have different meanings in PHP)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM