首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Post请求时收到来自PHP文件的ionic App中的错误消息

在Post请求时收到来自PHP文件的ionic App中的错误消息
EN

Stack Overflow用户
提问于 2017-09-27 12:57:49
回答 1查看 268关注 0票数 0

ionicApp需要将产品添加到MySql数据库(远程)。有一个产品页面。当按下submit时,函数createEntry()将从ionicApp "Product.ts“页面调用post方法。如果在名为manage_products.php的PHP文件的帮助下没有约束错误,则该记录已成功创建。在离子应用程序中,if(data.status === 200)true,然后主体被执行。但是没有办法确定记录是否已经创建。如果有一些问题,例如,一些null约束(Db侧),那么我只有通过Chrome网络选项卡才能了解到一些约束错误。有没有办法在ionic App中接收PHP文件中的错误文本。

下面是从ionicApp "Product.ts“调用的createEntry函数

代码语言:javascript
复制
createEntry()
 {
     let id = "0000";
     let name = "Some Product";
     let description = "Some Product description";
     let manufacturer_name = "manufacturer_name";
     let weight = "some weight is here";
     let weight_unit = "kg";
     let halal_status = "HALAL";
      let body     : string   = "key=create&id=" + id + "&name=" + name + "&description=" + description + "&manufacturer_name=" + manufacturer_name + "&weight=" + weight + "&weight_unit=" + weight_unit +  "&halal_status=" + halal_status ,
          type     : string   = "application/x-www-form-urlencoded; charset=UTF-8",
          headers  : any      = new Headers({ 'Content-Type': type}),
          options  : any      = new RequestOptions({ headers: headers }),
          url      : any      = this.baseURI + "manage_products.php";

      this.http.post(url, body, options)
      .subscribe((data) =>
      {
         // If the request was successful notify the user
         if(data.status === 200)
         {
         //   this.hideForm   = true;

      console.log(`Congratulations the technology: ${name} was successfully added`);
      console.log('successfully added the record. .......');  
       }
         // Otherwise let 'em know anyway
         else
         {
           // this.sendNotification('Something went wrong!');
            console.log('Couldnt add the record.....xxx');  

        }


      });
   }

上面的代码调用PHP文件。以下是PHP文件的代码。

代码语言:javascript
复制
<?php
   header('Access-Control-Allow-Origin: *');

   // Define database connection parameters

   $hn      = 'localhost';
   $un      = 'username';
   $pwd     = 'password';
   $db      = 'name-of-database';
   $cs      = 'utf8';

   // Set up the PDO parameters
   $dsn  = "mysql:host=" . $hn . ";port=3306;dbname=" . $db . ";charset=" . $cs;
   $opt  = array(
                        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
                        PDO::ATTR_EMULATE_PREPARES   => false,
                       );
   // Create a PDO instance (connect to the database)
   $pdo  = new PDO($dsn, $un, $pwd, $opt);

   // Retrieve specific parameter from supplied URL
   $key  = strip_tags($_REQUEST['key']);
   $data    = array();


   // Determine which mode is being requested
   switch($key)
   {

      // Add a new record to the technologies table
      case "create":

         // Sanitise URL supplied values

         $id       = filter_var($_REQUEST['id'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $name       = filter_var($_REQUEST['name'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $manufacturer_name   = filter_var($_REQUEST['manufacturer_name'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $weight   = filter_var($_REQUEST['weight'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $weight_unit       = filter_var($_REQUEST['weight_unit'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $halal_status   = filter_var($_REQUEST['halal_status'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
   $description   = filter_var($_REQUEST['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);


         // Attempt to run PDO prepared statement
         try {
            $sql  = "INSERT INTO Products(id,name,manufacturer_name,weight,weight_unit,halal_status,description) VALUES(:id, :name, :manufacturer_name, :weight, :weight_unit, :halal_status, :description)";
            $stmt    = $pdo->prepare($sql);
            $stmt->bindParam(':id', $id, PDO::PARAM_STR);
            $stmt->bindParam(':name', $name, PDO::PARAM_STR);
            $stmt->bindParam(':manufacturer_name', $manufacturer_name, PDO::PARAM_STR); 
            $stmt->bindParam(':weight', $weight, PDO::PARAM_STR);
            $stmt->bindParam(':weight_unit', $weight_unit, PDO::PARAM_STR);
            $stmt->bindParam(':halal_status', $halal_status, PDO::PARAM_STR); 
            $stmt->bindParam(':description', $description, PDO::PARAM_STR);
            $stmt->execute();
            echo json_encode(array('message' => 'Congratulations the record ' . $name . ' was added to the database'));
         }
         // Catch any errors in running the prepared statement
         catch(PDOException $e)
         {
            echo $e->getMessage();
         }

      break;


      // Update an existing record in the technologies table
      case "update":

         // Sanitise URL supplied values
  /*
         $name          = filter_var($_REQUEST['name'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $description   = filter_var($_REQUEST['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $recordID      = filter_var($_REQUEST['recordID'], FILTER_SANITIZE_NUMBER_INT);

*/   
         $id       = filter_var($_REQUEST['id'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $name       = filter_var($_REQUEST['name'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $manufacturer_name   = filter_var($_REQUEST['manufacturer_name'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $weight   = filter_var($_REQUEST['weight'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $weight_unit       = filter_var($_REQUEST['weight_unit'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);
         $halal_status   = filter_var($_REQUEST['halal_status'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW);

         // Attempt to run PDO prepared statement
         try {
            $sql  = "UPDATE Products SET id = :id, name = :name,manufacturer_name = :manufacturer_name,weight = :weight,weight_unit = :weight_unit,halal_status = : halal_status, description = :description WHERE id = :id";
            $stmt =  $pdo->prepare($sql);

           /*
            $stmt->bindParam(':name', $name, PDO::PARAM_STR);
            $stmt->bindParam(':description', $description, PDO::PARAM_STR);
            $stmt->bindParam(':id', $recordID, PDO::PARAM_INT);
           */
            $stmt->bindParam(':id', $name, PDO::PARAM_STR);
            $stmt->bindParam(':name', $name, PDO::PARAM_STR);
            $stmt->bindParam(':manufacturer_name', $description, PDO::PARAM_STR); 
            $stmt->bindParam(':weight', $name, PDO::PARAM_STR);
            $stmt->bindParam(':weight_unit', $name, PDO::PARAM_STR);
            $stmt->bindParam(':halal_status', $description, PDO::PARAM_STR); 
            $stmt->bindParam(':description', $name, PDO::PARAM_STR);

            $stmt->execute();

            echo json_encode('Congratulations the record ' . $name . ' was updated');
         }
         // Catch any errors in running the prepared statement
         catch(PDOException $e)
         {
            echo $e->getMessage();
         }

      break;



      // Remove an existing record in the technologies table
      case "delete":

         // Sanitise supplied record ID for matching to table record
         $recordID   =  filter_var($_REQUEST['id'], FILTER_SANITIZE_NUMBER_INT);

         // Attempt to run PDO prepared statement
         try {
            $pdo  = new PDO($dsn, $un, $pwd);
            $sql  = "DELETE FROM Products WHERE id = :id";
            $stmt = $pdo->prepare($sql);
            $stmt->bindParam(':id', $recordID, PDO::PARAM_INT);
            $stmt->execute();

            echo json_encode('Congratulations the record ' . $name . ' was removed');
         }
         // Catch any errors in running the prepared statement
         catch(PDOException $e)
         {
            echo $e->getMessage();
         }

      break;
   }

?>
EN

回答 1

Stack Overflow用户

发布于 2018-07-07 04:58:20

您可以使用警报控制器或toastcontroller,并在订阅data...like后通过添加捕获来显示错误消息。

代码语言:javascript
复制
catch((err)=>{
          this.AlertMessage("error", err);
         });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46439785

复制
相关文章

相似问题

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