nethken
nethken

Reputation: 1092

PHP - Wrong data is passed and shown to another page

this is what i want to do, i have two pages, first is the "edit.php" and second is the "edit2.php". the page "edit.php" this is the page where all the news is shown and you will select what news you will edit by clicking the "edit button" and the "edit2.php" where will i exactly edit the news. i want to pass the value of the selected news in another page. But here is the problem, when i clicked the "Sample news 1" edit button the data showing in another page is the "Sample news 2". Even when i clicked the "Sample news 2" edit button, the data is also the "Sample news 2". Can someone give me ideas on how to fix this?

here is the picture of edit.php. I click the edit button of "Sample news 1". enter image description here

here is the picture of edit2.php. and this is the output data. The data should be "Sample news 1" not "Samplel news 2". enter image description here

here is my php code in edit.php

 <?php
      session_start();
       include_once('connection.php');
       $sql ="SELECT * FROM news ORDER BY news_id";
       $result = mysqli_query($con, $sql);

       while($row = mysqli_fetch_array($result)){
               $newsid = $row['news_id'];
                $title = $row['news_title'];
                 $date = $row['news_date'];
                 $content = $row['news_content'];
                 $newsimage = $row['news_image'];

                  if(isset($_POST['esubmit'])){
                 $_SESSION['news_id'] = $newsid;
                 $_SESSION['n_title'] = $title;
                 $_SESSION['n_date'] = $date;
                 $_SESSION['n_content'] = $content;
                 $_SESSION['n_image'] = $newsimage;
                  header('Location: edit2.php');
                  }

                 ?>
                 <div class="fix single_news">
                   <div class="single_image">
                       <img src="<?php echo $newsimage; ?>" style="width:200px; height:140px; alt="court">
                   </div>
                   <a href="#"><?php echo $title; ?></a>
                   <p><?php echo $date; ?></p>
                 <p><?php echo $content; ?></p>
                 </div>
                 <form  action="" method="post">
                 <input type="submit" name="esubmit" value="edit" />
                 </form>
                  <hr>
                <?php
                 }
                 ?> 

here is my php code for "edit2.php"

<?php
session_start();

?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>


    <form method="post" action ="" enctype="multipart/form-data">

    Title<input type ="text" name ="title" value="<?php echo $_SESSION['n_title']; ?>"/><br>
        Date<input type ="text" name="date" value="<?php echo $_SESSION['n_date']; ?>" /><br>
        Content<textarea name="content"><?php echo $_SESSION['n_content']; ?></textarea>
        <input type="submit" name="submit" value="Update" />
        <input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
        <img id="blah" src="<?php echo $_SESSION['n_image']; ?>" alt="your image" style="width:200px; height:140px;"/>

    </form>
    <hr>


<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

Upvotes: 0

Views: 339

Answers (4)

Rajdeep Paul
Rajdeep Paul

Reputation: 16963

The problem is, in each iteration of while loop you're overwriting $newsid, $title, $date,... variables. So when you submit the form, the last row's data will get stored in the corresponding $_SESSION variables.

So here's the solution to your problem.

  1. You don't need $_SESSION to pass the form values to edit2.php page, instead change the <form> element in the following way,

    <form  action="edit2.php?news_id=<?php echo $newsid; ?>" method="post">
    
  2. On edit2.php page, first catch the news_id value using $_GET superglobal , like this:

    $newsid = $_GET['news_id'];
    
  3. And then get the appropriate news details using this $newsid, and finally populate the form.

Here's the complete code,

edit.php

<?php

    include_once('connection.php');
    $sql ="SELECT * FROM news ORDER BY news_id";
    $result = mysqli_query($con, $sql);

    while($row = mysqli_fetch_array($result)){
        $newsid = $row['news_id'];
        $title = $row['news_title'];
        $date = $row['news_date'];
        $content = $row['news_content'];
        $newsimage = $row['news_image'];

    ?>
    <div class="fix single_news">
        <div class="single_image">
           <img src="<?php echo $newsimage; ?>" style="width:200px; height:140px; alt="court">
        </div>
        <a href="#"><?php echo $title; ?></a>
        <p><?php echo $date; ?></p>
        <p><?php echo $content; ?></p>
    </div>
    <form  action="edit2.php?news_id=<?php echo $newsid; ?>" method="post">
        <input type="submit" name="esubmit" value="edit" />
    </form>
    <hr>
    <?php
    }

?> 

edit2.php

<?php

    if(isset($_POST['esubmit'])){
        $newsid = $_GET['news_id'];

        include_once('connection.php');

        /* create a prepared statement */
        if ($stmt = mysqli_prepare($con, "SELECT * FROM news WHERE news_id = ? LIMIT 1")) {
            /* bind parameters */
            mysqli_stmt_bind_param($stmt, "s", $newsid);

            /* execute query */
            mysqli_stmt_execute($stmt);

            /* get the result set */
            $result = mysqli_stmt_get_result($stmt);

            /* fetch row from the result set */
            $row = mysqli_fetch_array($result);
        }
    }

    if(isset($_POST['submit'])){

        // Write code to commit the edit details

    }

?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>

<?php

    if(isset($_POST['esubmit'])){
        ?>

        <form method="post" action ="edit2.php?news_id=<?php echo $row['news_id']; ?>" enctype="multipart/form-data">
            Title<input type ="text" name ="title" value="<?php echo $row['news_title']; ?>"/><br>
            Date<input type ="text" name="date" value="<?php echo $row['news_date']; ?>" /><br>
            Content<textarea name="content"><?php echo $row['news_content']; ?></textarea>
            <input class="form-control" id="image" name="image" type="file" accept="image/*" onchange='AlertFilesize();'/>
            <img id="blah" src="<?php echo $row['news_image']; ?>" alt="your image" style="width:200px; height:140px;"/>

            <input type="submit" name="submit" value="Update" />
        </form>

        <?php
    }

?>


<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>

Upvotes: 1

Viks
Viks

Reputation: 227

what I think is happening is when you are clicking edit button this edit.php page is again reloading and that sql query is running again that's why it is taking value of first image in both cases.what I suggest you to try is use $_get[] instead of $_SESSION and $_POST and pass value of image id directly to page edit2.php and query others details from database in that page and then display it.try it Remove <form> and <input> use just <a> instead like this.

<a href='edit2.php?id=$news_id'>Edit</a>

and then fetch this id in edit2.php like following

$news_id=$_GET['id'];

and atlast fetch other details of news from the database using this id like'

$query='select * from news where news_id=$news_id';

Upvotes: 1

Spider
Spider

Reputation: 524

Here is the issue, You are looping your data to the session, usually single session keeps only a value. Since that final item of your loop will store on the session [in this case it is 'Sample news 2']. I believe, you can place it on a hidden field & post it to the next page or you can use URL Parameter [GET], to pass the Id to the next page.

Ex : <a href ='edit2.php?newsId ='<?php echo $newsid?>> Edit </a>

Upvotes: 1

Afsar
Afsar

Reputation: 3124

Remove if(isset($_POST['esubmit'])){ code out of while loop and add values in form as I shown in below example

Pass $newsid in edit form as hidden and retrieve the content based on new

 <form  action="" method="post">
   <input type='hidden' value="<?php echo $newsid;?>" name="news_id">
   <input type="submit" name="esubmit" value="edit" />
 </form>

and in your php add this line.

if(isset($_POST['esubmit'])){
 $_SESSION['news_id'] = $_POST['news_id'];

Upvotes: 2

Related Questions