छवि विवरण यहां दर्ज करेंमैं PHP में नया हूं इसलिए कृपया निर्णय न लें:D

मैं संपादन विकल्प के साथ तालिका बनाने की कोशिश कर रहा हूं। कोई फर्क नहीं पड़ता कि मैं किस पंक्ति में "संपादित करें" बटन पर क्लिक करता हूं, केवल पृष्ठ की अंतिम पंक्ति का डेटा लोड होता है। मुझे क्या करना चाहिए?

        $sql = "SELECT * FROM countries LIMIT " . $this_page_first_result . ',' . $results_per_page;
        $result = $connection-> query($sql);

        echo '<div style="text-align:center; font-weight: bold;">';
        for ($page=1; $page<=$num_of_pages; $page++){
            echo '<a href="index.php?page=' . $page . '">' . $page . '</a> ';
        }
        echo '<div><br>';

        if($result-> num_rows > 0){
            while($row = mysqli_fetch_assoc($result)){
                $id = $row['id'];
        $Name = $row['Name'];
        $Area = $row['Area'];
        $Population = $row["Population"];
        $Phone_code = $row["Phone_code"];
                echo "<tr><td><a href='cities.php?id={$row['id']}'>".$row['Name']."</a></td><td>". $row["Area"] ."</td><td>"
            . $row["Population"] ."</td><td>". $row["Phone_code"] ."</td><td><button id='update-button' onclick='openEdit()'>Update</button></td><td><button id='delete-button'>Delete</button></td></tr>";
            }
            print_r($row);
        }
        else{
            echo "</table><h2 style='text-align:center'>There are no countries in the database..</h2>";
        }

    $connection-> close();
    ?>
</table>  
<br>

<div style="text-align:center">
<button type="button" id="close-button-edit" onclick="closeEdit()" style="display:none">Close</button>
<div id="edit_form" style="display:none; text-align:left">
    <form action="edit_country.php" method="POST" class="forms">
        <input type="hidden" name="id" value="<?php echo $id; ?>">
        <p>Name: <input type="text" name="name" required value="<?php echo $Name; ?>"></p>
        <p>Area: <input type="text" name="area" required value="<?php echo $Area; ?>"></p>
        <p>Population: <input type="text" name="population" required value="<?php echo $Population; ?>"></p>
        <p>Phone code: <input type="text" name="phone_code" required value="<?php echo $Phone_code; ?>"></p>
        <input type="submit" name="update" value="Update">
        </form>
</div>
0
Gasperro 10 नवम्बर 2019, 16:24

1 उत्तर

सबसे बढ़िया उत्तर

इस समस्या के लिए दो रणनीतियों का उपयोग किया जा सकता है: सभी PHP या जावास्क्रिप्ट का उपयोग करना।

केवल पीएचपी

इसके लिए संपादन फ़ॉर्म को पहले से भरने के लिए एक सबमिशन की आवश्यकता होती है। प्रत्येक अपडेट बटन id को GET अनुरोध के रूप में भेजता है (यह जानकारी का अनुरोध कर रहा है, जानकारी नहीं बदल रहा है, इसलिए GET का उपयोग करें), एक साधारण लिंक के रूप में, जिसे PHP स्क्रिप्ट संपादन फॉर्म को पॉप्युलेट करने के लिए उपयोग करती है।

<?php 
// always start with php stuff and don't issue any html until you're done

// initialization
$sortDirection = 'asc';
if(isset($_REQUEST['sortDirection'])) {
    // this decouples the value from user input.  It can only be 'Asc' or 'Desc'
    $sortDirection = $_REQUEST['sortDirection'] == 'asc' ? 'Asc' : 'desc';
}
$rowToEdit = '';
$pdo = new PDO( ... );

// Using PDO because it is more standard
// Leaving connection details to user. See https://phpdelusions.net/pdo_examples/connect_to_mysql for tutorial 
// $pdo is assumed to be the pdo object

// deal with row delete. Destructive, so will be post, and delete button will be set
if(isset ($_POST['delete']) ) {

    // delete from countries where id = ?

    //redirect back to self (Post, Redirect, Get pattern). 
    // Always do this when done working with POST submissions!

    header('Location: /countries.php');
    exit;
}

// deal with row update. This changes data, so use POST
if(isset($_POST['id'])) {

    // update countries set ...

    // redirect back to self
    header('Location: /countries.php');
    exit;
}

// deal with request for row to edit, use GET for info requests 
if(array_key_exists('id', $_GET) {

    $rowToEdit = $pdo->prepare("select * from countries where id = ?");
    $rowToEdit->execute([$id]);
    // fall through to show page
}
// get all country rows (Note, OK to use $sortDirection here because it is decoupled from user input)
$country = $pdo->query("SELECT * FROM countries ORDER BY NAME $sortDirection")->fetchAll(PDO::FETCH_GROUP);

// got all our data, dealt with user input, now we can present the view
?>
<html>
  <head>

  </head>
  <body>
    <h1>Countries</h1>
    <a href="/countries.php?sortDirection=asc">Sort Asc</a>
    <a href="/countries.php?sortDirection=desc">Sort Desc</a>
    <table>
      <tr>
        <th>Name</th>
         <th>Area</th>
         <th>Population</th>
         <th>Phone</th>
         <th></th>
         <th></th>
      </tr>
      <?php foreach( $country as $row): ?>
      <tr>
        <td><a href='cities.php?country_id=<?=$row['id']?>'><?=$row['Name']?></a></td>
        <td><?=$row["Area"]?></td>
        <td><?=$row["Population"]?></td>
        <td><?=$row["Phone_code"]?></td>
        <td> <a href='countries.php?id=<?=$row['id']?>'>Update</a> </td>
        <td>
          <form method="post">
          <input type="hidden" name="id" value="<?=$row['id']?>" />
          <button id='delete-button'>Delete</button>
          </form>
        </td>
      </tr>
    </table>

    <?php if($rowToEdit): ?>

    <div style="text-align:center">
        <form action="countries.php" method="POST" class="forms">
          <input type="hidden" name="id" value="<?= rowToEdit ['id']?>">
          <input type="hidden" name="sortDirection" value="<?= $sortDirection?>">
          <p>Name: <input type="text" name="name" required value="<?= $rowToEdit['Name']?>"></p>
          <p>Area: <input type="text" name="area" required value="<?= $rowToEdit['Area']?>"></p>
          <p>Population: <input type="text" name="population" required value="<?= $rowToEdit["Population"]?>"></p>
          <p>Phone code: <input type="text" name="phone_code" required value="<?= $rowToEdit["Phone_code"]?>"></p>
          <input type="submit" name="update" value="Update">
        </form>
    </div>

    <?php endif; ?>

  </body>
</html>
0
Tim Morton 12 नवम्बर 2019, 16:41