Я не могу решить, почему то, что работает локально, не удается на главном сервере. Он подключается к базе данных, извлекает и отображает данные, но не получает данные и включает форму. Надеюсь, я включил достаточно кода.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();
}
Если у кого есть идеи, почему это не работает, я приветствую ваше понимание!
Сделайте себе одолжение, просто разместите 'print_r ($ _ POST)' или 'var_dump ($ _ POST)' на странице PHP, которая получает форму отправки. Заполните форму, отправьте и внимательно посмотрите на данные, напечатанные на экране. Ознакомьтесь с тем, как данные формы отправляются в сценарии, в том числе, что передается, а что нет. У меня есть подозрение, что вы не входите в оператор 'if'. –
измените на 'require' вместо' include' и посмотрите, не прекращается ли сценарий в этот момент. вы просто предполагаете, что он загружен должным образом. –
@JayBlanchard Спасибо за ваш ответ. Я боюсь, что мое описание моей проблемы может быть неоднозначным. Единственными данными являются сообщения формы - это идентификатор элемента и значение действия («edit_accessories»). Для сценария php требуется только идентификатор элемента, чтобы извлекать другие поля и отображать их в включенной форме (которая не будет отображаться на главном сервере, но работает нормально локально). – JimB814