PHP обновляет данные в mysql (ОШИБКА с неопределенной переменной)

#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, и переменные будут установлены только в случае GET

2. Если вы это сделаете: 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), ….