Простая PHP-задача обновления базы данных с помощью переключателей

#php #mysql #html-table #radio-button

#php #mysql #html-таблица #переключатель

Вопрос:

Я дизайнер внешнего интерфейса, а не разработчик PHP, и мне действительно нужна помощь. Необходимо создать систему, которая позволит клиенту входить в свою собственную область для обновления таблицы. В таблице будет около 20 записей, и каждая строка будет редактироваться с помощью переключателей (4 варианта). Всего 2 столбца, один для идентификатора и один под названием status (редактируемые данные).

Просмотрщик увидит только изменения, внесенные клиентом, и изменение цвета фона в этой строке в зависимости от статуса, что означает, что редактируемая часть должна будет содержать 2 фрагмента данных (целочисленное значение для изменения цвета и название статуса, например, значение переключателя для изменения цвета и метка кнопки для отображения текста в ячейке). О системе входа в систему поговорим позже…

Настройка базы данных:

 Database: test
Table: fire_alert
Structure:
   id (INT, PRIMARY); color(INT); warning(VACHAR);
  

connect.php :

 <?php
// Database Variables (edit with your own server information)
$server = 'localhost';
$user = 'root';
$pass = 'root';
$db = 'test';

// Connect to Database
$connection = mysql_connect($server, $user, $pass) 
    or die("Could not connect to server ... n" . mysql_error());
mysql_select_db($db) 
    or die("Could not connect to database ... n" . mysql_error());
?>
  

view.php :

 <div id="container">
<?php
// connect to the database
include('connect.php');
include("header.php");

// get results from database
$result = mysql_query("SELECT * FROM fire_alert") 
    or die(mysql_error());  
echo "Current date - " . date("Y/m/d") . "<br /><br />";

// display data in table
echo "<table>";
echo "<tr> <th>Area</th> <th>Status</th></tr>";

// loop through results of database query, displaying them in the table
while($row = mysql_fetch_array($result)) {
    // echo out the contents of each row into a table
    echo "<tr>";
    echo '<td>' . $row['id'] . '</td>';
    echo '<td>' . $row['warning'] . '</td>';
    echo "</tr>"; 
} 

// close table>
echo "</table>";

echo '<td><a href="edit.php' . $row['id'] . '">Change Area Status</a></td>';
?>
</div>
<body>
</body>
</html>
  

edit.php (только для клиентского доступа) пока никаких изменений динамических данных, жестко закодированный HTML:

 <?php include("header.php"); ?>
<?php include("connect.php"); ?>

<div id="container" class="edit">
<div id="radio1">

<?
$result = mysql_query("SELECT * FROM fire_alert") 
    or die(mysql_error());  
echo "Current date - " . date("Y/m/d") . "<br /><br />";
?>

<table class="edit">
    <tr><th>Area</th><th>Status</th></tr>
    <tr>
        <td>1</td>
        <td>
            <form method="post" action="edit.php">
                <input type="radio" id="radio1" name="radio" value="1" /><label for="radio1">Safe</label>
                <input type="radio" id="radio2" name="radio" value="2" /><label for="radio2">Caution L1</label>
                <input type="radio" id="radio3" name="radio" value="3" /><label for="radio3">Caution L2</label>
                <input type="radio" id="radio4" name="radio" value="4" /><label for="radio4">Closed</label>
            </form>
        </td>
    </tr>
</table>

</div>
<?php echo '<td><a href="view.php' . $row['id'] . '">Update</a></td>'; ?>
</div>
  

Ответ №1:

Самый простой способ запустить это обновление (или способ, которым я пользуюсь в любом случае) — использовать javascript. Имейте каждый раздел радиоблоков в своей собственной форме, которая автоматически отправляется при изменении, и включайте скрытую переменную для указания отправки страницы. Затем просто напишите функцию для обновления базы данных на основе введенного идентификатора пользователя (или того, что вы проверяете) и их выбора…

Что-то вроде:

 if($_POST["submit"] == 1)
{
  $id = $_POST["id"];
  $radio = $_POST["radio"];
  $query = "UPDATE fire_alert SET warning = '$radio' WHERE id = '$id'";
  $result = mysql_query($query) or die(mysql_error());
}
  

У вас проблема с тем, как вы отформатировали свой view.php ссылка, эта строка должна быть следующей:

‘Обновить’; ?>’

Хотя вышеупомянутое не совсем сработает так, как вы намереваетесь, поскольку оно не отправляет форму, поэтому значения переключателей передаваться не будут … вместо этого вы должны сделать:

 <form method="post" action="edit.php">
    <input type="radio" id="radio1" name="radio" value="1" onChange="this.submit()"/><label for="radio1">Safe</label>
    <input type="radio" id="radio2" name="radio" value="2" onChange="this.submit()"/><label for="radio2">Caution L1</label>
    <input type="radio" id="radio3" name="radio" value="3" onChange="this.submit()" /><label for="radio3">Caution L2</label>
    <input type="radio" id="radio4" name="radio" value="4" onChange="this.submit()"/><label for="radio4">Closed</label>
    <input type="hidden" name="id" value="<?=$row["id"]?>" />
</form>
  

И вам также нужно отредактировать свой php, чтобы отразить это различие