2016-02-25 2 views
1

Я не могу решить, почему то, что работает локально, не удается на главном сервере. Он подключается к базе данных, извлекает и отображает данные, но не получает данные и включает форму. Надеюсь, я включил достаточно кода.php include не работает на хост-сервере, но работает на локальном сервере (xampp)

Сначала данные извлекаются и отображаются:

/*------------------- DISPLAY ACCESSORIES ------------------*/ 
if(isset($_GET['table']) && $_GET['table'] === "accessories") 
{ 
    $table = 'accessories';  

    include '../includes/dbconnect.php';  

    try { 
     $result = $db->query("SELECT * FROM $table"); 

     while($row = $result->fetch(PDO::FETCH_ASSOC)){ 

      $accessories[] = array(
       'id' => $row['id'], 
       'buy_link' => $row['buy_link'], 
       'img' => $row['img'], 
       'item_number' => $row['item_number'], 
       'name' => $row['name'], 
       'description' => $row['description'], 
       'laser_series' => $row['laser_series'], 
       'laser_model' => $row['laser_model'], 
       'quantity' => $row['quantity'], 
       'price' => $row['price'], 
      ); 
     } 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error fetching data.' . $e->getMessage(); 
     include 'error.html.php'; 
     exit(); 
    } 

    try { 
     $sql2 = 'DESCRIBE accessories'; 
     $s2= $db->prepare($sql2); 
     $s2->execute(); 
     $table_fields = $s2->fetchAll(PDO::FETCH_COLUMN); 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error fetching data from database.'; 
     include 'error.html.php'; 
     exit(); 
    } 

    // Close database connection 
    $db = null; 

    // Display data on included page 
    include 'display-accessories.html.php'; 
    exit(); 
} 

Затем в строке пользователь хочет изменить, он нажимает на кнопку редактирования. Вот что html:

<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> 
    <input type="hidden" name="id" value="<?php htmlout($accessory['id']); ?>"> 
    <button class="btn btn-default btn-sm" type="submit" name="action" value="edit_accessories">Edit</button> 
</form> 

Нажатие кнопки редактирования вызывает этот php, который не выполняется (не локально). Он не включает файл (путь правильный, в той же папке).

/*------------------- EDIT ACCESSORIES ------------------*/ 
if(isset($_POST['action']) && $_POST['action'] === "edit_accessories") 
{ 
    // Assign name of table being queried to variable 
    $table = 'accessories'; 

    // Sanitize posted data 
    $id = sanitize($_POST['id']); 

    // Connect to database 
    include '../includes/dbconnect.php'; 

    try { 
     $sql = "SELECT * FROM $table WHERE id = :id"; 
     $s = $db->prepare($sql); 
     $s->bindValue(':id', $id); 
     $s->execute(); 
    } 
    catch (PDOException $e) 
    { 
     $error = 'Error fetching data.' . $e->getMessage(); 
     include 'error.html.php'; 
     exit(); 
    } 

    // Store single row result in $item associative array 
    $item = $s->fetch(PDO::FETCH_ASSOC); 

    // Close database connection 
    $db = null; 

    // Display row content in form 
    include 'edit-accessories-form.html.php'; 
    exit(); 
} 

Если у кого есть идеи, почему это не работает, я приветствую ваше понимание!

+0

Сделайте себе одолжение, просто разместите 'print_r ($ _ POST)' или 'var_dump ($ _ POST)' на странице PHP, которая получает форму отправки. Заполните форму, отправьте и внимательно посмотрите на данные, напечатанные на экране. Ознакомьтесь с тем, как данные формы отправляются в сценарии, в том числе, что передается, а что нет. У меня есть подозрение, что вы не входите в оператор 'if'. –

+0

измените на 'require' вместо' include' и посмотрите, не прекращается ли сценарий в этот момент. вы просто предполагаете, что он загружен должным образом. –

+0

@JayBlanchard Спасибо за ваш ответ. Я боюсь, что мое описание моей проблемы может быть неоднозначным. Единственными данными являются сообщения формы - это идентификатор элемента и значение действия («edit_accessories»). Для сценария php требуется только идентификатор элемента, чтобы извлекать другие поля и отображать их в включенной форме (которая не будет отображаться на главном сервере, но работает нормально локально). – JimB814

ответ

1

Просто измените фразу:

FROM: '../includes/dbconnect.php';

TO: $ _SERVER ['DOCUMENT_ROOT']. '/ Includes/dbconnect.php';

На сервере путь не может быть записан как «../», потому что существует совершенно другая конфигурация пути сервера.

+0

Я рад, что вы нашли время, чтобы ответить на этот «старый» пост. Ваш ответ разрешил проблему! Большое спасибо! – JimB814

+0

Добро пожаловать! На самом деле я случайно попал в эту дискуссию ... Я не работаю программистом PHP ... Не знаю, как люди сразу не ответили на такой простой вопрос :) – Guido

Смежные вопросы