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_DEPRECATEDPHP 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_encode配列を ing すると が得られ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 に含めるものはすべて (ユーザー入力など) 必要があります。


私が最初に答えたときに見逃したもう1つの重要なこと(これを見逃したとは信じられません):

. $_POST[NewLocation] .

これは適切な PHP ではありません。PHP がどの程度厳密に構成されているかによっては機能する可能性がありますが、配列内のキーは定数として引用符で囲まれていないのではなく、文字列として引用符で囲まれています。これにより、エラー ログにエラーがスローされる可能性があります ( Undefined T_CONSTANT NewLocation; 'NewLocation' assumed)。

使用$_POST["NewLocation"](一重引用符または二重引用符は機能しますが、PHP では意味が異なることに注意してください)

于 2013-02-18T21:14:49.053 に答える