Php 插入两条数据库记录,包括空行
我正在从事一个项目,该项目是使用Angular和PHPAPI以及MySQL数据库开发的Ionic应用程序 我的项目有两个问题Php 插入两条数据库记录,包括空行,php,mysql,angular,ionic-framework,Php,Mysql,Angular,Ionic Framework,我正在从事一个项目,该项目是使用Angular和PHPAPI以及MySQL数据库开发的Ionic应用程序 我的项目有两个问题 此应用程序在数据库中插入两行,一行为完全空,另一行为实际值 此应用程序数据库响应返回observable始终返回到错误,不是为了成功 我尝试了很多方法来解决这个问题,但是我找不到错误点 这是我的html视图代码: <ion-content padding> <!--class="items-middle" text-center--> <io
<ion-content padding>
<!--class="items-middle" text-center-->
<ion-list>
{{ responseTxt | json }}
{{ errorTxt | json }}
<!-- use the [formGroup] directive to tell Angular that we want to use the registrationForm as the "FormGroup" for this form: -->
<form [formGroup]="registrationForm" (ngSubmit)="addMember()">
<ion-item>
<ion-label floating>Full Name</ion-label>
<ion-input type="text" [(ngModel)]="reg.userName" formControlName="userName"></ion-input>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.userName.touched && (registrationForm.controls.userName.invalid ||
registrationForm.controls.userName.hasError('pattern'))">Enter valid username.</p>
<ion-item>
<ion-label color="ligh-grey" floating>Email</ion-label>
<ion-input type="email" [(ngModel)]="reg.email" formControlName="email"></ion-input>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.email.touched && (registrationForm.controls.email.invalid ||
registrationForm.controls.email.hasError('pattern'))">Enter valid email.</p>
<ion-item>
<ion-label color="ligh-grey" floating>Birth of Date</ion-label>
<ion-datetime displayFormat="DD/MM/YYYY" formControlName="dob" [(ngModel)]="reg.dob" pickerFormat="MMMM DD YYYY" min="1940" max="{{year}}">
</ion-datetime>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.dob.touched && (registrationForm.controls.dob.invalid)">Enter your Date of Birth</p>
<ion-item>
<ion-label color="ligh-grey" floating>Phone Number</ion-label>
<ion-input type="number" formControlName="phone" [(ngModel)]="reg.phone" pattern="[0-9]*"></ion-input>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.phone.touched && (registrationForm.controls.phone.invalid ||
registrationForm.controls.phone.hasError('pattern'))">Enter valid phone number.</p>
<ion-item>
<ion-label color="ligh-grey" floating>Address</ion-label>
<ion-input type="text" formControlName="address" [(ngModel)]="reg.address"></ion-input>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.address.touched && (registrationForm.controls.address.invalid)">Enter valid address.</p>
<ion-item class="job_status">
<ion-label color="ligh-grey" floating>Job Status (Position)</ion-label>
<ion-input type="text" formControlName="jobStatus" [(ngModel)]="reg.jobStatus"></ion-input>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.jobStatus.touched && (registrationForm.controls.jobStatus.invalid)">Enter valid job status.</p>
<ion-item>
<ion-label>Job Sector</ion-label>
<ion-select formControlName="jobSector" [(ngModel)]="reg.jobSector">
<ion-option value="Government">Government</ion-option>
<ion-option value="Private">Private</ion-option>
</ion-select>
</ion-item>
<p class="text-danger" *ngIf="registrationForm.controls.jobSector.touched && (registrationForm.controls.jobSector.invalid)">Choose a job sector.</p>
<!--<input type="checkbox" formControlName="isTosRead">-->
<!-- We can check if our form is valid: -->
<ion-buttons padding-top>
<button ion-button full round type="submit" [disabled]="!registrationForm.valid">SIGNUP</button>
</ion-buttons>
</form>
</ion-list>
这是提供程序(服务)ts文件
从'@angular/common/http'导入{HttpClient,HttpErrorResponse};
从“@angular/core”导入{Injectable};
从“../../pages/registration/Reg”导入{Reg}”;
从“rxjs”导入{observeable};
从“rxjs/operators”导入{catchError,map};
从“rxjs/observable/throw”导入{u throw};
从“../../pages/registration/registration”导入{RegistrationPage}”;
@可注射()
导出类NetworkingInProvider{
baseUrl=http://localhost/api';
注册:注册号[];
obj:注册页面;
构造函数(公共http:HttpClient){
}
//实际处理远程服务器php文件并返回承诺的方法
readTableData():承诺
我粘贴了所有代码,因为我无法预测错误在哪里。我在这里找到了错误
如果我在time$\u POST给出null的标题下使用$\u POST[]方法
为了避免这个问题,我们可以在像这样的标题之前使用$\u POST
<?php
$postdata = file_get_contents("php://input",true);
$request = json_decode($postdata);
// Sanitize.s
$userName = $request->data->userName;
$email = $request->data->email;
$dob = $request->data->dob;
$phone = $request->data->phone;
$address = $request->data->address;
$jobStatus = $request->data->jobStatus;
$jobSector = $request->data->jobSector;
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type,x-prototype-version,x-requested-with');
在设置标题之前使用_POST方法。
否则它将无法获得您传递的值。您只需在将变量传递到bind_param方法之前测试变量:if(isset($request->data->email)){//do mysql insert}
谢谢您的建议,先生,这只是为了安全和确认,对吗?但这就是问题的原因?使用前测试变量这是提高代码质量的一个良好做法
import {HttpClient, HttpErrorResponse} from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Reg } from "../../pages/registration/Reg";
import {Observable} from "rxjs";
import {catchError, map} from "rxjs/operators";
import {_throw} from 'rxjs/observable/throw';
import { RegistrationPage } from "../../pages/registration/registration";
@Injectable()
export class NetworkEngineProvider {
baseUrl = 'http://localhost/api';
registrations: Reg[];
obj : RegistrationPage;
constructor(public http: HttpClient) {
}
// The method which actually dealing with remote server php file and that return promise
readTableData() : Promise<any>{
let url = "http://localhost/ctest/ionic/read.php";
let request = this.http.get(url);
return request.toPromise();
}
//regUser(reg : Reg): Promise<any>{
// return this.http.post(`${this.baseUrl}/registration`, { data: reg })
// .pipe(map((res) => {
// this.registrations.push(res['data']);
// return this.registrations;
// }),
// catchError(this.handleError(HttpErrorResponse));
//catchError(this.handleError));
//let request = this.http.post(`${this.baseUrl}/registration`,{ data: reg });
//return request.toPromise();
//}
regUser(reg : Reg): Observable<any> {
return this.http.post(`${this.baseUrl}/registration.php`, { data: reg })
.pipe(map((res) => {
return res;
}))
}
}
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type,x-prototype-version,x-requested-with');
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "hoba";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
mysqli_set_charset($conn, "utf8");
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
// Sanitize.
$userName = $request->data->userName;
$email = $request->data->email;
$dob = $request->data->dob;
$phone = $request->data->phone;
$address = $request->data->address;
$jobStatus = $request->data->jobStatus;
$jobSector = $request->data->jobSector;
// Store.
$stmt = $conn->prepare("INSERT INTO user_profile (user_name,email,dob,address,phone_number,job_status,gov_or_pvt)
VALUES (?,?,?,?,?,?,?)");
$stmt->bind_param("sssssss", $userName, $email,$dob,$phone,$address,$jobStatus,$jobSector);
if ($stmt->execute())
{
//echo http_response_code(201);
echo "New record created successfully";
} else {
//echo http_response_code(422);
echo "Some error";
// echo "Error: " . $sql . "<br>" . $conn->error;
}
<?php
$postdata = file_get_contents("php://input",true);
$request = json_decode($postdata);
// Sanitize.s
$userName = $request->data->userName;
$email = $request->data->email;
$dob = $request->data->dob;
$phone = $request->data->phone;
$address = $request->data->address;
$jobStatus = $request->data->jobStatus;
$jobSector = $request->data->jobSector;
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type,x-prototype-version,x-requested-with');