2016-09-18 36 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 

我给读取和写入权限到我的图片文件夹在我的网页文件夹之外(由于良好的安全习惯)。