Reputation: 123
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);
}
}}
Upvotes: 0
Views: 2263
Reputation: 2970
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)
Upvotes: 3