我正在开发一个离子型应用程序,用户需要将数据发布到MySQL数据库。由于一些非常有用的答案,所以我已经绕过了CORS的问题,然而,我现在遇到了另一个问题。submit.php文件如下所示:
<?php
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
$data = json_decode(file_get_contents("php://input"));
$celeb = $data->celeb;
$camp = $data->camp;
$spirit = $data->spirit;
$sport = $data->sport;
$bizs = $data->bizs;
$entrep = $data->entrep;
$young = $data->young;
$conser = $data->conser;
$saty = $data->saty;
$name = $data->name;
$surname = $data->surname;
$email = $data->email;
$contacts = $data->contacts;
$con = mysql_connect('localhost', 'root', 'thePssWrd');
mysql_select_db('theDB', $con);
$qry = 'INSERT INTO test
(celeb,camp,spirit,sport,bizs,
entrep,young,conser,saty,name,
surname,email,contacts)
values ("' . $celeb . '","' . $camp . '",' .$spirit .
','.$sport. ','.$bizs. ','.$entrep. ','.$young.
','.$conser. ','.$saty. ','.$name. ','.$surname.
','.$email. ','.$contacts. ')';
$qry_res = mysql_query($qry);
if ($qry_res) {
if ($qry_res) {
$arr = array('msg' => "Submitted Successfully!!!", 'error' => '');
$jsn = json_encode($arr);
print_r($jsn);
} else {
$arr = array('msg' => "", 'error' => 'Error In Submit');
$jsn = json_encode($arr);
print_r($jsn);
}
} else {
$arr = array('msg' => "", 'error' => 'This is the big error thing...');
$jsn = json_encode($arr);
print_r($jsn);
}
?>我的控制器:
.controller('FrmController', function ($scope , $http) {
$scope.errors = [];
$scope.msgs = [];
$scope.vote = function() {
$scope.errors.splice(0, $scope.errors.length);
$scope.msgs.splice(0, $scope.msgs.length);
$http.post('http://www.ann7.com/saty/submit.php', {
'celeb' : $scope.celeb,
'camp' : $scope.camp,
'spirit' : $scope.spirit,
'sport' : $scope.sport,
'bizs' : $scope.bizs,
'entrep' : $scope.entrep,
'young' : $scope.young,
'conser' : $scope.conser,
'saty' : $scope.saty,
'name' : $scope.name,
'surname' : $scope.surname,
'email' : $scope.email,
'contacts' : $scope.contacts
}
).success(function(data, status, headers, config) {
if (data.msg != '')
{
console.log(data.msg);
$scope.msgs.push(data.msg);
}
else
{
console.log(data.error);
$scope.errors.push(data.error);
}
}).error(function(data, status) {
$scope.errors.push(status);
});
}
});如果您看一下PHP,它会输出错误消息,而我收到的是“这是一个大错误.”在我的控制台中的错误消息,我认为它是一个成功的连接到DB,但是在插入值时出错.我的html文件看起来像一个例子:
<form name="nominationForm" ng-controller="FrmController" class="falecomigo novalidate form-manager" >
<div ng-controller="VoteCtrl" class="list list-inset" >
<div class="styled-select">
<select ng-model="bizs">
<option value="e">option1</option>
<option value="1">option1</option>
<option value="2">option1</option>
<option value="3">option1</option>
<option value="4">option1</option>
<option value="5">option1</option>
</select>
</div>
<label class="item item-input">
<input ng-model="name" name="fieldName" type="text" placeholder="Name" required ng-minlength="2" ng-maxlength="70">
</label>
<label class="item item-input">
<input ng-model="surname" name="fieldSurname" type="text" placeholder="Surname" required ng-minlength="2" ng-maxlength="70">
</label>
<label class="item item-input">
<input ng-model="email" name="fieldEmail" type="email" placeholder="E-mail" required ng-maxlength="50">
</label>
<label class="item item-input">
<input ng-model="contacts" name="fieldNumber" type="text" placeholder="Contact No." required ng-minlength="2" ng-maxlength="70">
</label>
</div>
<div class="padding container">
<div class="row">
<button ng-click="vote()" class="button button-balanced button-small col col-100"> Vote </button>
</div>
</div>
</form>我不知道我哪里出了问题..。
发布于 2015-08-19 08:35:50
不要给自己发送一条毫无意义的错误消息,而是始终这样做。
} else {
$arr = array('msg' => "", 'error' => mysql_error());
$jsn = json_encode($arr);
//print_r($jsn);
echo $jsn;
}这个错误实际上会告诉你出了什么问题。
当然,在一个活动的系统中,您不会想这样做,因为用户会看到很可能帮助黑客的错误消息。所以你会做这样的事
} else {
// log error for admins to check
error_log( mysql_error(),3, '/some/path/to/error.log');
$arr = array('msg' => "", 'error' => 'An error occured, see the log');
$jsn = json_encode($arr);
//print_r($jsn);
echo $jsn;
}额外检查:
我现在看到您没有对任何mysql_函数调用执行错误检查,可能错误在连接过程中,所以请添加
$con = mysql_connect('localhost', 'root', 'thePssWrd');
if (!$con) {
// log error for admins to check
//error_log( mysql_error(),3, '/some/path/to/error.log');
die('Could not connect: ' . mysql_error());
}
if (! mysql_select_db('theDB', $con) ) {
die ('Can\'t select the database: ' . mysql_error());
}Ahhhh
看起来,您实际上并没有将json编码的数据作为一个简单的字符串发送回浏览器。与print_r($jsn)不同,做一个简单的echo $jsn;,它适用于json数据字符串的所有重调。此时,$json实际上不是一个数组,它是一个简单的字符串变量。
还可以简化查询的编码。
请记住,双引号允许您展开$variables,因此它可能解决了底层问题,只需使查询的编码更加直接。
$qry = "INSERT INTO test
(celeb,camp,spirit,sport,bizs,
entrep,young,conser,saty,name,
surname,email,contacts)
values ('$celeb','$camp','$spirit','$sport','$bizs',
'$entrep','$young','$conser','$saty','$name',
'$surname','$email','$contacts')";$surname失踪了
我觉得我应该加上这个,好像我没有别人会那样。如果您只是学习PHP及其数据库访问机制,请不要浪费时间学习
mysql_扩展。它被废弃了,在即将发布的新PHP7中不再可用。看看这个,学习mysqli_扩展或PDO。Have a read on this to help you pick one.
https://stackoverflow.com/questions/32090085
复制相似问题