#php #html #mysql #sql
#php #HTML #mysql #sql
Вопрос:
Это часть кода: сначала он извлекает информацию в соответствии с идентификатором. но когда я меняю одну из данных и нажимаю обновить, это выдает ошибку неопределенной переменной и вообще не может обновиться.
<?php
include("includes/connect.php");
if(isset($_GET['edit'])) {
$edit_id = $_GET['edit'];
$edit_query = "select * from posts where post_id = '$edit_id' ";
$run_edit = mysqli_query($con,$edit_query);
while ($edit_row=mysqli_fetch_array($run_edit)) {
$post_id = $edit_row['post_id'];
$post_title = $edit_row['post_title'];
$post_author = $edit_row['post_author'];
$post_keywords = $edit_row['post_keywords'];
$post_image = $edit_row['post_image'];
$post_content = $edit_row['post_content'];
}
}
?>
<form method="post" action="edit.php?edit_form=<?php echo $post_id; ?>" enctype="multipart/form-data">
<table width="600" bgcolor="orange" align="center" border="10">
<tr>
<td align="center" bgcolor="yellow" colspan="6">
<h1>Edit The Post Here</h1>
</td>
</tr>
<tr>
<td align="right">Post Title:</td>
<td><input type="text" name="title" size="30" value="<?php echo $post_title; ?>"></td>
</tr>
<tr>
<td align="right">Post Author:</td>
<td><input type="text" name="author" size="30" value="<?php echo $post_author; ?>"></td>
</tr>
<tr>
<td align="right">Post Keywords:</td>
<td><input type="text" name="keywords" size="30" value="<?php echo $post_keywords; ?>"></td>
</tr>
<tr>
<td align="right">Post Image:</td>
<td>
<input type="file" name="image">
<img src="../images/<?php echo $post_image; ?>"width="100" height="100"></td>
</tr>
<tr>
<td align="right">Post Content:</td>
<td><textarea name="content" cols="30" rows="15"><?php echo $post_content; ?></textarea></td>
</tr>
<tr>
<td align="center" colspan="6"><input type="submit" name="update" id="update" value="Update Now"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
if(isset($_POST['update'])) {
$update_id = $_GET['edit_form'];
$post_title1 = $_POST['title'];
$post_date1 = date('m-d-y');
$post_author1 = $_POST['author'];
$post_keywords1 = $_POST['keywords'];
$post_content1 = $_POST['content'];
$post_image1 = $_FILES['image']['name'];
$image_tmp = $_FILES['image']['tmp_name'];
if($post_title1 == '' or $post_author1=='' or $post_keywords1=='' or $post_content1=='' or $post_image1=='') {
echo "<script>alert('Any of the fields is empty')</script>";
exit();
}
else {
move_uploaded_file($image_tmp,"../images/$post_image1");
$update_query = "update posts set post_title='$post_title1', post_date='$post_date1', post_author='$post_author1',post_image='$post_image1',post_keywords='$post_keywords1',post_content='$post_content1' where post_id='$update_id'";
if(mysqli_query($con,$update_query)) {
echo "<script>alert('Post has been updated')</script>";
echo "<script>window.open('view_posts.php','_self')</script>";
}
}
}
?>
Вот ошибка. В нем говорится неопределенная переменная:
Комментарии:
1. Ну, эти переменные не устанавливаются во время их использования. Вероятно, это означает, что либо
isset($_GET['edit'])
значение false (не установлено), либо у$edit_id
него нет значения, указывающего на запись в БД. Обратите внимание, что когда вы попадаете на страницу, когда она отправляется как обновление, вы делаете POST, и переменные будут установлены только в случае GET2. Если вы это сделаете:
if(isset($_GET['edit'])) { var_dump($_GET['edit']);exit; .....
какое значение вы получите обратно при его запуске? Является ли это значение целым числом, которое соответствуетpost_id
строке в вашей базе данных?3. попробуйте это
$update_query = "update posts set post_title='”.$post_title1.”', post_date='”.$post_date1.”', post_author='”.$post_author1.”',post_image='”.$post_image1.”',post_keywords='”.$post_keywords1.”',post_content='”.$post_content1.”' where post_id='”.$update_id.”'";
4. @CraigvanTonder Да, это соответствует.
5. @RahulSaxena Извините, я пытался, но все равно не работает.
Ответ №1:
На мой взгляд, при первой загрузке скрипта все в порядке, потому что вы ПОЛУЧАЕТЕ страницу. В это время isset($_GET[‘edit’]) будет true .
После того, как вы нажали обновить (я предполагаю, что вы отправляете саму страницу). На этом этапе isset($_GET[‘edit’]) будет false, потому что вы делаете POST. Итак, заблокируйте код внутри
if(isset($_GET['edit'])) {
.....
}
будет пропущено. И эти переменные были бы неопределенными.
Извините за мой английский.
Комментарии:
1. я вижу. итак, как мне это изменить?
2. Извините, так как мне это изменить?
3. В вашем случае, я думаю, вам следует переместить блок формы html внутрь if(isset($ _GET [‘edit’])) { ….. } .Эта ссылка может быть полезной: yourwebskills.com/phpformssingle.php
4. да, ошибки неопределенной переменной уже нет. Спасибо за решение. Когда я нажал обновить, он сообщает, что сообщение обновлено. Но моя база данных вообще не изменилась. Есть идеи, почему?
5. Попробуйте распечатать свой sql, в этом случае это переменная $update_query. И запустите его непосредственно с вашего сервера базы данных. Вы также могли бы отладить, почему ваш запрос не затронут? используйте try catch, просмотрите журнал ошибок, var_dump($result), ….