2017-06-02 43 views
0

我一直在搜索和研究兩週,現在有點困惑,所以我向社區伸出援手。
我目前正在爲一項服務付款。我有一個客戶端將數據發佈到該服務,並將其存儲在數據庫中,然後發送到另一個數據庫。
不幸的是,我不知道郵寄服務是如何工作的,但是當我需要公民時,我正在爲法拉利付錢。
我去年12月再次開始編程,但還有很多東西需要學習。 我有我的內部網站現在建立和它的時間來擺脫法拉利。 如果我建立一個將數據發佈到我的數據庫的頁面(並跳過中間人),客戶端發送的自動發佈會一次處理一個並返回一個成功代碼,還是必須爲此創建一個特殊的api?
示例
頁面接收數據,然後插入數據並返回成功代碼。
那麼接下來,下等
從客戶端收到數據

//Page receives the data and checks for token and sets variables for the 
//data fields that corresponds to the columns in the DB. 

$token = htmlspecialchars($_GET["token"]); 
$data = htmlspecialchars($_GET["data"]); 
$data2 = htmlspecialchars($_GET["data2"]); 
//if token matches 
if ($token = 'xyz'){ 
    $insert = "INSERT INTO table (datacol,data2col) 
       VALUES (?,?) ON DUPLICATE KEY UPDATE data2col=?"; 
    $stmnt = mysqli->prepare($insert); 
    $stmnt->bind_param('s,s', $data, $data2); 
    $rslt = $stmnt->execute; 
} 

if ($rslt){ 
    print 'success'; 
} else { 
    print 'fail'; 
) 
$stmnt->close(); 

我提前道歉,因爲我不知道客戶端如何發送,除了其與令牌的PHP頁面,並有一個例子字符串的數據。

+1

然後向我們展示示例字符串! – RiggsFolly

+2

我認爲'$ stmnt-> bind_param('s,s',$ data,$ data2);'應該是'$ stmnt-> bind_param('sss',$ data,$ data2,$ data2);'? –

+0

'htmlspecialchars()'不應該用在進入數據庫的內容上,而是從它出來(打印時)。數據庫可能是一個噩夢來規範化和搜索,如果你有這樣做。 – Qirel

回答

0

據我所知,創建一個API比僅僅允許你的客戶端插入數據到你的數據庫的簡單的PHP代碼更好。因爲其他人可以使用相同的PHP頁面來插入數據,並且您將有垃圾記錄。

如果您遵循API的想法,並且可以爲傳入請求添加基本安全性,並且只有您的客戶端可以將數據插入到數據庫中。藉助API,您也可以創建多個端點。因此,一個端點只允許一個記錄和其他允許的批記錄,這樣您將增加功能併爲您的客戶構建更好的服務。

還有構建API的許多其他優點。

+0

Hi Parth;我同意,我將致力於安全。我正在查看PHP CRUD,但我需要的只是插入,現在我只需要從一頁開始,這樣我就可以停止爲一個法拉利支付費用,同時我可以找出如何構建工作API或付費人員來完成此任務。我的事情是,我不知道我的示例是否可以在客戶端發送它時處理多個數據行,或者是否需要其他東西。從我的答覆中得到的是它不會。感謝 – Semon

+0

如果您認爲我的回答有幫助並有資格獲得+票,請投票表示感謝@Semon –

0

如果您擔心安全問題,可以嘗試使用像Laravel這樣的框架。它具有很多安全功能來防止SQL注入,輸入驗證和會話劫持。

它有一點點的學習曲線,但一旦你經歷了一些驚人的機會。從Scratch開始的一個好方法是:Laravel:https://laracasts.com/series/laravel-from-scratch-2017

+0

ty。幾個月前,我確實下載了Laravel,但不習慣學習它。我會仔細看看的。 – Semon

+0

是的,最初的學習曲線可能有點陡峭,但從長遠來看這絕對是值得的。祝你好運! –

+0

通過「如何安裝」教程,我可能不得不等待,直到我有時間來學習,大聲笑。現在我使用NetBeans,然後在90年代,我用記事本學習了HTML – Semon

相關問題