首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角桩到MySQL误差

角桩到MySQL误差
EN

Stack Overflow用户
提问于 2015-08-19 08:18:24
回答 1查看 235关注 0票数 1

我正在开发一个离子型应用程序,用户需要将数据发布到MySQL数据库。由于一些非常有用的答案,所以我已经绕过了CORS的问题,然而,我现在遇到了另一个问题。submit.php文件如下所示:

代码语言:javascript
复制
<?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);
    }
?>

我的控制器:

代码语言:javascript
复制
.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文件看起来像一个例子:

代码语言:javascript
复制
<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>

我不知道我哪里出了问题..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 08:35:50

不要给自己发送一条毫无意义的错误消息,而是始终这样做。

代码语言:javascript
复制
} else {
    $arr = array('msg' => "", 'error' => mysql_error());
    $jsn = json_encode($arr);
    //print_r($jsn);
    echo $jsn;
}

这个错误实际上会告诉你出了什么问题。

当然,在一个活动的系统中,您不会想这样做,因为用户会看到很可能帮助黑客的错误消息。所以你会做这样的事

代码语言:javascript
复制
} 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_函数调用执行错误检查,可能错误在连接过程中,所以请添加

代码语言:javascript
复制
$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,因此它可能解决了底层问题,只需使查询的编码更加直接。

代码语言:javascript
复制
$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.

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32090085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档