2017-08-06 100 views
0

我對此很陌生,我知道我可能以錯誤的方式來做這件事,但我一整天都在試圖弄清楚它。我意識到編寫我自己的一個真正的項目有很大的區別,而不僅僅是在線練習小的語法代碼。所以,我缺乏如何合併/傳遞不同變量/範圍在一起的經驗。瞭解如何在大圖中融入一切,對我來說是完全不同的故事。提前致謝。將函數結果傳遞到sqli中

我想要做的是讓功能「selectyacht」輸出數據在與被調用位置不同的位置(在viewship.php中)。輸出數據(在viewship.php中)只需要返回某些字段(不是所有內容),這些結果將分散在整個html頁面(而不是表格)。除此之外,我有這個變量:「$ sqlstatement」(在sqlconn.php中),我試圖帶外函數,因爲我不想每次重複連接函數。我嘗試了一個全局變量,就像我不應該這樣做,並且幸好它給了我一個錯誤,這意味着我必須找到一個更好的方法。

基本上我的鬥爭,是在理解,我應該如何基於兩個因素構建這整個事情:

  • 要允許sqlconn.php第二條件語句中鍵入 爲最經常地爲不同的「 selectyacht「功能 將在未來。
  • 允許sqlconn.php中的連接實例駐留在該函數之外,因爲它將被多次用於不同的功能。
  • 將數據返回到與viewship.php中被調用位置不同的地方,因爲該調用將是按鈕按下,而不是要顯示的結果。

這可能很簡單,但它卻沒有我。 P.S.其中一些代碼是來自互聯網上其他資源的複製/粘貼,我試圖將其與我自己的需求合併。


sqlconn.php

<?php 
    $servername = "XXXXXXXX"; 
    $username = "XXXXXXXX"; 
    $password = "XXXXXXXX"; 
    $dbname = "XXXXXXXX"; 

    // Instantiate the connection object 
    $dbconn = new mysqli($servername, $username, $password, $dbname); 

    // Check if the connection works or show an error 
    if ($dbconn->connect_error) { 
     die("Connection failed: " . $dbconn->connect_error); 
    } 

    // Create a query based on the ship's name 
    function selectyacht($shipname) { 
    global $sqlstatement; 
    $sqlstatement = "SELECT * FROM ships WHERE Name=" . "'" . $shipname . "'"; 
    } 
    // Put the sql statement inside the connection. 
    // Additional sql statements will be added in the future somehow from other functions 
    $query = $dbconn->query($sqlstatement); 

    // Return the data from the ship to be repeated as less as possible for each future function 
    if ($query->field_count > 0) { 
    while($data = $query->fetch_assoc()) { 
      return $data; 
     } 
    } 
    else { 
     echo "No data found"; 
    } 

    // Close the connection 
    $dbconn->close(); 
?> 

viewship.php

<html> 
<body> 
    <?php include 'sqlconn.php';?> 
    <!-- ship being selected from different buttons --> 
    <?php selectyacht("Pelorus");?> 
    <br> 
    <!-- This is the output result --> 
    <?php echo $data["Designer"];?> 
    <?php echo $data["Length"];?> 
    <?php echo $data["Beam"];?> 
    <?php echo $data["Height"];?> 
</body> 
</html> 

回答

0

伴侶,我不知道我是否能覆蓋整個PHP編碼在一個標準的答案,但我會盡量至少指導你。

首先您需要了解類和麪向對象編程。這個主題本身可能是一本書,但你應該研究的是自動加載它基本上允許你把你的函數代碼放在不同的文件中,讓服務器在你調用其中一個文件中使用的函數時包含這些文件。這樣你就可以分解負責數據庫連接和執行數據操作(讀取/更新/刪除)的代碼。

其次,下降mysqli並轉移到PDO(或者當您發現Composer是DBAL時更好)。我知道互聯網上充斥着基於mysqli的例子,但這種方法只是在出路,它不會回來。

接下來,使用預準備語句 - 這是一個安全事物(瞭解SQL注入)。永遠不要把外部變量到這樣的查詢:

"SELECT * FROM ships WHERE Name=" . "'" . $shipname . "'"; 

任何有意向平均能放在那裏的字符串,修改您的查詢做任何他想做的如。徹底清除數據庫。在PDO使用預處理語句查詢應該是這樣的:

$stmt = $this->pdo->prepare("SELECT * FROM ships WHERE Name = :ship_name"); 
$stmt->bindValue(':ship_name', $shipname); 

我們的結構 - 你應該有DB class只負責數據庫連接和Ships class,你將有你的職責負責例如。用於獲取數據。比你可以通過(注入)數據庫連接作爲參數來包含你的類selectYacht函數。

看看這裏詳細介紹瞭如何實現的樣子:Singleton alternative for PHP PDO

對於

「從那裏它被稱爲在不同的地方返回的數據」如果我沒有你瞭解你想要有一些字段輸入船名和按鈕來顯示其點擊後的細節。你有2個選擇這裏:

  • 標準形式 - 你只需要創建標準的HTML表單,並單擊按鈕提交其重定向到自身(或其他頁面)。在文件中,你想展現的結果,你只需要使用功能selectYacht從POST越來越船名,並把它傳遞給函數selectYacht,然後就打印出來的結果(逐個字段的地方,你需要他們)

  • AJAX形式 - 如果你喜歡做它無需重新加載原始頁面 - 發送字段值通過AJAX代表船名到您使用selectYacht功能和更新頁面的Java腳本

+0

謝謝你把我在正確的方向上的其它頁面! – Alex

相關問題