2016-09-18 52 views
-1

我已經僱傭了Cloudatcost,並且我已經配置了Ubuntu服務器,安裝了LAMP並上傳了我的網頁。 我有一個部分,我上傳一些文本字段和圖像,問題是圖像沒有上傳,但是當我在本地運行我的頁面時,它的工作原理。Insert_id不能在網上上傳到服務器上

我插入的代碼是這樣的:

function insert($title, $intro, $body, $data ,$date, $someid, $Myimage, $somesection){ 

    $ID = null; 
    $mysqli = openConnection(); <- starts connection 
    $query = "INSERT INTO columnsa (title, intro, body, data, date, someid) VALUES (?, ?, ?, ?, ?, ?)"; 
    if ($stmt = $mysqli->prepare($query)) 
    { 
     $stmt->bind_param(

'sssssi', $title, $intro, $body, $data, $date, $someid);   
     /* Execution*/ 
     $stmt->execute(); 

     $ID = $mysqli->insert_id; 
     /* Close query */ 
     $stmt->close(); 
    } 
    if($ID) 
    { 
     if ($image != null) { 
      insertImg($image, $ID, $section); 
      closeConnection($mysqli); 
      return true; 
     } 
    } 
    else 
    { 
     closeConnection($mysqli); 
     return false; 
    } 
} 

我的插入圖像是:

function insertImg($image, $ID, $section) 
    { 
     switch ($seccion) { 
      case "journey": 
       move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg"); 
       break; 
      case "column": 
       move_uploaded_file($imagen['tmp_name'], "../../img/bolumns/".$ID.".jpg"); 
       break; 
     case "blog": 
      move_uploaded_file($imagen['tmp_name'], "../../img/blogs/".$ID.".jpg"); 
      break; 
    } 
} 

我猜,也許我忘了安裝PHP5的模塊,因爲線

$ID = $mysqli->insert_id; 
     /* Close query */ 
     $stmt->close(); 
    } 
    if($ID) 
    { 
     if ($image != null) { 
      insertImg($image, $ID, $section); 
      closeConnection($mysqli); 
      return true; 
     } 
    } 
    else 
    { 
     closeConnection($mysqli); 
     return false; 
    } 

似乎沒有工作。任何想法哪個php5模塊包含insert_id? 謝謝!

+0

似乎更有可能是關於在服務器的文件系統中創建文件的權限問題 – Hiren

+0

有沒有辦法在Ubuntu服務器授予權限? –

+0

取決於您使用主機託管的類型(Cloudatcost)。一些主機提供了一個文件管理器來允許你設置權限,一些允許你有限制的shell訪問等等。 – Hiren

回答

0

1.檢查插入到數據庫的行。如果沒有插入,你做錯了什麼。像錯誤的查詢(例如字段名稱或...)或連接問題。如果你沒有數據庫問題,請轉到#2。

2.檢查,如果您嘗試上傳文件夾中有適當的權限:

ls -l 

若沒有適當的權限。閱讀此: https://help.ubuntu.com/community/FilePermissions

3.如果它沒有問題的數據庫和權限,這意味着你正試圖插入到錯誤的文件夾。試用dirname(__FILE__)。它會得到你當前的文件目錄。例如,改變這一行:

move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg"); 

move_uploaded_file($imagen['tmp_name'], dirname(__FILE__)."/../../img/journeys/".$ID.".jpg"); 

檢查日誌

去這個文件

sudo nano /var/log/apache2/error.log 

如果你找不到日誌文件在那裏,去這個文件找到你的日誌文件在哪裏:

sudo nano /etc/php_version/apache2/php.ini 

*用正確的文件夾

+0

該行正確插入,唯一的問題是圖像未被上傳。 由ls -1你的意思是在服務器控制檯中執行該命令? –

+0

我檢查了使用ls -l ../path/myproyect和我的圖像文件夾返回的權限drwxr-xr-x 7 root root 4096和某個日期。 –

+1

解決了!謝謝@james使用error.log文件幫助了很多! –

0

更換php_version爲了獲取Last inserted ID按照您所做所做的問題是,是強制性的,你已經運行

  1. 執行的語句
  2. 查詢語句

after Inse rtion以便獲得最後插入的ID在mysqli.*PDO頂部。

在您的代碼中,您必須更改如何獲取最後插入的ID,因爲您尚未在執行後運行查詢。

替換:

$ID = $mysqli->insert_id; 

有了:

$ID = $stmt->insert_id; 

注:既然你已經執行使用$stmt單獨而不是與$mysqli您查詢需要改變它,因爲我已經提到。

下面是

方案1中如何獲得基於MysqliPDO最後插入的ID的例子:(mysqli的)

$sql = "INSERT INTO MyGuests (firstname, lastname, email) 
VALUES ('John', 'Doe', '[email protected]')"; 
if (mysqli_query($conn, $sql)) { 
    $last_id = mysqli_insert_id($conn); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
mysqli_close($conn); 

這裏你以後運行查詢正在執行查詢。

方案2:(PDO)

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDBPDO"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO MyGuests (firstname, lastname, email) 
    VALUES ('John', 'Doe', '[email protected]')"; 
    // use exec() because no results are returned 
    $conn->exec($sql); 
    $last_id = $conn->lastInsertId(); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 
$conn = null; 
?> 
0

我已經通過分配適當的權限,解決它。 由於this questions表示

確保所有文件都歸Apache組和用戶所有。在Ubuntu中,它是www數據組和用戶

chown -R www-data:www-data /path/to/webserver/www 

下使WWW的數據組的所有成員來讀取和寫入文件

chmod -R g+rw /path/to/webserver/www 

我給讀取和寫入權限到我的圖片文件夾在我的網頁文件夾之外(由於良好的安全習慣)。