Я должен нажать на кнопку обновления, а затем сделать обновление в базе данных и обновить, чтобы показать обновленные значения на той же странице. Эти значения также должны быть обновлены в базе данных. Я пытался сделать обновление, но это не работает. Нужна помощь и руководство. Есть ли другая альтернатива, кроме обновления страницы? Можно ли это сделать без обновления страницы?
<?php
//initalizing the query
$id = $_GET['id'];
$query = "SELECT * FROM new_default_reports WHERE id = '$id'";
$result = $conn->query($query);
$row = $result->fetch_assoc();
?>
<input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
<div id="dialog" align="center">
<form action = "" method="post">
<label> SQL Statement</label>
<textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
<label> X axis: </label>
<input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
<label> Y axis: </label>
<input type="text" name="y" class = "form-control" value="<?php echo $row['y_axis'] ?>"><br>
<input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" onclick="window.location.reload();"/>
</form>
</div>
<?php
if (isset($_POST['set'])){
$query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
$result = $conn->query($query);
header("Refresh: 0; url=previewgraphs.php?id=".$id);
}
?>
ОБНОВЛЕНО:
<input type="button" id="btnShow"style="overflow:hidden; margin-left:1400px; font-weight:bold; background-color:lightgray" value="Edit Default Reports">
<div id="dialog" align="center">
<form action="previewgraphs.php?id=$id" method="post">
<label>SQL Statement</label>
<textarea name="sqlst" style="width:100%; height:40%;" class="form-control">
<?php echo $row['sql_statement']?>
</textarea>
<br>
<label>X axis: </label>
<input type="text" name="x" class="form-control"value="<?php echo $row['x_axis'] ?>">
<br>
<label>Y axis: </label>
<input type="text" name="y" class="form-control"value="<?php echo $row['y_axis'] ?>">
<br>
<input type="submit" name="set" value="Update"style="background-color:darkred;width:100px;color:white;font-weight:bold">
<input type="submit" name="submitted" value="Submit the form">
</form>
</div>
<?php
if (isset($_POST['submitted'])){
$query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
$result = $conn->query($query);
// make a query to get the updated result and display it on the page
$select_query = "SELECT sql_statement, x_xis, y_axis FROM new_default_reports WHERE id = $id";
$select_result = $conn->query($select_query);
if ($select_result->num_rows == 1) {
echo "You have successfully updated the database.";
$row = $select_result->fetch_assoc();
echo $row['sql_statement'];
echo $row['x_axis'];
echo $row['y_axis'];
}
}
?>
Пожалуйста, возьмите обновленное значение из базы данных после запроса на обновление.
Пожалуйста, попробуйте этот код: —
<?php
if (isset($_POST['set'])){
$query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
$result = $conn->query($query);
$select_query = "SELECT * FROM new_default_reports where id = $id";
$select_result= $conn->query($select_query );
$row = $select_result->fetch_assoc();
}
?>
<input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
<div id="dialog" align="center">
<form action = "" method="post">
<label> SQL Statement</label>
<textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
<label> X axis: </label>
<input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
<label> Y axis: </label>
<input type="text" name="y" class = "form-control" value="<?php echo $row['y_axis'] ?>"><br>
<input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" />
</form>
</div>
header
функция не работает в вашем случае, потому что вы уже выводили, прежде чем пытаться установить заголовок.
Решение состоит в том, чтобы полностью изменить код php и html так, чтобы код php находился в самом начале документа.
Небольшое примечание: теперь вам больше не нужно обновляться.
РЕДАКТИРОВАТЬ включенный запрос выбора.
<?php
if (isset($_POST['set'])){
$query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
$result = $conn->query($query);
//header("Refresh: 0; url=previewgraphs.php?id=".$id);//not needed
$select_query = "SELECT sql_statement, x_xis, y_axis FROM new_default_reports WHERE id = $id";
$select_result = $conn->query($select_query);
if ($select_result->num_rows == 1) {
$row = $select_result->fetch_assoc();
}
}
?>
<input type="button" id="btnShow" style="overflow:hidden;margin- left:1400px;font-weight:bold;background-color:lightgray" value="Edit Default Reports" />
<div id="dialog" align="center">
<form action = "" method="post">
<label> SQL Statement</label>
<textarea name="sqlst" style="width:100%;height:40%;" class = "form-control"><?php echo $row['sql_statement']?></textarea><br>
<label> X axis: </label>
<input type="text" name="x" class = "form-control" value="<?php echo $row['x_axis'] ?>"><br>
<label> Y axis: </label>
<input type="text" name="y" class = "form-control" value="<?php echo $row['y_axis'] ?>"><br>
<input type="submit" name = "set" value="Update" style="background-color:darkred;width:100px;color:white;font-weight:bold" />
</form>
</div>
И удалить onclick="window.location.reload();"
Вот как я бы это сделал:
<input type="button" id="btnShow"style="overflow:hidden; margin-left:1400px; font-weight:bold; background-color:lightgray" value="Edit Default Reports">
<div id="dialog" align="center">
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>"method="post">
<label>SQL Statement</label>
<textarea name="sqlst" style="width:100%; height:40%;" class="form-control">
<?php echo $row['sql_statement']?>
</textarea>
<br>
<label>X axis: </label>
<input type="text" name="x" class="form-control"value="<?php echo $row['x_axis'] ?>">
<br>
<label>Y axis: </label>
<input type="text" name="y" class="form-control"value="<?php echo $row['y_axis'] ?>">
<br>
<input type="submit" name="set" value="Update"style="background-color:darkred;width:100px;color:white;font-weight:bold"">
<input type="submit" name="submitted" value="Submit the form">
</form>
</div>
<?php
if (isset($_POST['submitted'])){
$query = "UPDATE new_default_reports SET sql_statement ='{$_POST['sqlst']}', x_axis ='{$_POST['x']}', y_axis = '{$_POST['y']}' where id = $id";
$result = $conn->query($query);
// make a query to get the updated result and display it on the page
$select_query = "SELECT sql_statement, x_axis, y_axis FROM new_default_reports WHERE id = $id";
$select_result = $conn->query($select_query);
if ($select_result->num_rows == 1) {
echo "You have successfully updated the database.";
$row = $select_result->fetch_assoc();
echo $row['sql_statement'];
echo $row['x_axis'];
echo $row['y_axis'];
}
}
?>
Таким образом, вам не нужно обновлять страницу, а отправлять форму самому себе. Это приведет к другому запросу. Если форма была отправлена, php-код в условии if будет выполнен, и база данных будет обновлена. Затем у вас есть задача сделать запрос на выборку, чтобы получить обновленный результат и отобразить его на странице.
Если пользователь откроет страницу с формой для каждого запроса get, он не увидит никаких результатов из базы данных.
При написании HTML вы также должны стараться быть последовательными и придерживаться кодовых соглашений на протяжении всего проекта. Для отдельных тегов XML-подобный стиль <input \>
HTML-стиль <input>
,
Я надеюсь, что это поможет вам, а также даст вам альтернативный взгляд на то, как решить вашу проблему.
РЕДАКТИРОВАТЬ:
Я удалил событие onclick из вашего элемента ввода и добавил кнопку отправки. При проверке, была ли отправлена форма, ищите кнопку отправки в вашем предложении if. Если вам нравится, вы можете использовать <button type="submit">Submit the form</button>
вместо <input type="submit">
ДРУГОЕ РЕДАКТИРОВАНИЕ:
Я добавил простой запрос выбора и вывел обновленный отчет на страницу.
Это моя идея об этом:
При создании чего-то подобного я всегда думаю о CRUD — создавать, извлекать, обновлять, отображать.
Форма должна обновить запись в базе данных.
Для извлечения части лучше использовать другой вид, отображающий только результат, но не форму.
Вы, конечно, можете отправить форму на страницу, где отображается результат *, но я думаю, что это будет плохой практикой. Пользователю нужна обратная связь, если обновление было успешным.
например что-то вроде этого:
<form action="<?php echo 'previewgraphs?id=$id'; ?>">
Вы не должны втиснуть много логики в одну часть. Переосмыслите свой дизайн. Я также рекомендую вам использовать платформу, которая реализует шаблон MVC. У вас большой выбор. Фреймворк позаботится о многих вещах и предоставит вам также семантические URL, поэтому у вас будет что-то вроде:
/reports
/reports/1
вместо добавления всех параметров в URL.
Сначала реструктурируйте свой код.
Первая часть вашего кода должна сохранять значения в случае отправки изменений. Затем вы снова читаете из базы данных и показываете результаты.
Однако это может быть проблема с кэшированием в браузере или прокси. У меня есть пара тегов, которые были очень полезны:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
<meta http-equiv="cache-control" content="no-cache">
положить их в HTML < руководитель> раздел. Старые IE иногда делают странные вещи с прокси.
Ура, Карстен