Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Update Bazy danych, jak poprawnie
Forum PHP.pl > Forum > PHP
Qatadah
Cześć. Jak poprawnie z aktualizować bazę danych. Pobranie z bazy danych jest poprawne. Nie działa tylko update.
Nie wyświetla błędów ani w kodzie i po otwarciu strony. Mam dwa pola input w każdym rekordzie i według głównego ID w każdym rekordzie chce zrobić update bazy. Albo czegoś mi brakuję albo źle ułożyłem zmienne w update

tabela którą che edytować w bazie wygląda tak:

matches (matchID, homeID, guestID, homeGoals, guestGoals)

connect.php

  1. <?php
  2. $db_server = "localhost";
  3. $db_username = "root";
  4. $db_password = "";
  5. $db_database = "football_db";
  6. $conn = new PDO("mysql:host=$db_server;dbname=$db_database", $db_username, $db_password);
  7. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  8. $conn->exec("set names utf8");
  9. echo 'Connected to Database <br/>';
  10. ?>


index.php

  1. <form action="" method="put">
  2. <table width="100%">
  3. <thead>
  4. <tr>
  5. <td class="colsp" colspan="5">Terminarz</td>
  6. </tr>
  7. <tr class="subcolor title-row">
  8. <td style="width: 10%">id</td>
  9. <td style="width: 40%" class="left">Gospodarz</td>
  10. <td style="width: 40%">Gość</td>
  11. <td style="width: 5%">Home<br/>Goals</td>
  12. <td style="width: 5%">Guest<br/>Goals</td>
  13. </tr>
  14. </thead>
  15. <tbody>
  16. <?php
  17. if(isset($_POST['Submit'])){
  18. $hGoals = $_POST['inphomegoals'];
  19. $gGoals = $_POST['inpguestGoals'];
  20. $update="UPDATE matches SET homeGoals=$hGoals, guestGoals=$gGoals where matchID = ".$matchID;
  21. $stmt = $conn->prepare($update);
  22. $stmt->execute();
  23. echo $stmt->rowCount() . " records UPDATED successfully";
  24. }
  25. $display = $conn->prepare(
  26. "SELECT
  27. m.matchID,
  28. hc.clubName as homeClub,
  29. gc.clubName as guestClub,
  30. m.homeGoals,
  31. m.guestGoals
  32. FROM matches AS m
  33. JOIN clubs AS hc ON hc.clubID = m.homeID
  34. JOIN clubs AS gc ON gc.clubID = m.guestID
  35. ORDER BY matchID ASC ");
  36.  
  37. $display->execute();
  38. $results = $display->fetchAll();
  39. foreach ($results as $index => $row){
  40. ?>
  41. <tr>
  42. <td><label class="matchID"><?php echo $row['matchID']; ?></label></td>
  43. <td><label><?php echo $row['homeClub']; ?></label></td>
  44. <td><label><?php echo $row['guestClub']; ?></label></td>
  45. <td><label><input type="number" name="inphomegoals" value="<?php echo $row['homeGoals']; ?>"/> : </label></td>
  46. <td><label><input type="number" name="inpguestGoals" value="<?php echo $row['guestGoals']; ?>"</label></td>
  47. </tr>
  48. <?php } ?>
  49. </tbody>
  50. <tfoot>
  51. <tr>
  52. <td colspan="5"><input type="submit" value="Add To Base" name="Submit" style="width: 150px; height: 45px"</td>
  53. </tr>
  54. </tfoot>
  55. </table>
  56. </form>
Kshyhoo
Wyechuj sobie ten update, to zobaczysz co nie tak.
Qatadah
A możesz podpowiedzieć jak to zrobić, jestem nowicjuszem, nie znam jeszcze wszystkich bajerów smile.gif by samemu znaleźć rozwiązanie ale tak bardziej łopatologicznie jeśli można prosić.
Kshyhoo
  1. echo $update;

Nawet parser Forum koloruje ciemniej zmienną, sam powinieneś do tego dojść:
  1. $update="UPDATE matches SET homeGoals=$hGoals, guestGoals=$gGoals where matchID = ".$matchID;

Pyton_000
@Kshyhoo Update jest akurat w miarę dobry.

Problem leży w formularzu. Pobierasz sobie dane z bazy i w pętli wyświetlaszo wszystkie rekordy. Wysyłając formularz aktualizuje Ci dane tylko z ostatniego wiersza bo poprzednie są nadpisywane (wszędzie to samo name)

Zastanów się co chcesz robić. Czy robić update dla wszystkich rekordów czy tylko dla konkretnego.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.