Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Inkrementacja wierszy w bazie
Forum PHP.pl > Forum > Przedszkole
redtyper
Witam,
Posiadam taki formularz dodający/edytujący zdarzenie.
Mianowicie, chciałym rozszerzyć go o funkcję automatycznego dodania wartości (tak jak działa inkrementacja i++).
Posiadam w bazie tabele statistic_tips zawierającą dwa wiersze stat_win oraz stat_false
Tylko podczas edycji (bo w gruncie reczy edycja będzie polegała przeważnie na zmianie jednego rekordu) po dokonaniu zmian, chciałbym aby w zależności od wybranej opcji (win, loss z results) automatycznie powiększało wiersz stat_win bądź stat_false.
Jak to osiągnąć moi drodzy ?
Podpowiecie? Ewentualnie z miłą chęcią usłyszę lepsze rozwiązania.
Przepraszam za pewnie błache pytanie, ale jestem początkujący smile.gif
Na czerwono zaznaczyłem fragment, gdzie próbowałem jakoś to wykombinować, ale niestety nie udało się.
  1. <div class="panel-body">
  2. <div class="row">
  3. <div class="col-lg-3">
  4. <form role="form" method="post" action="" onreset="resetAction()">
  5. <div class="form-group">
  6. <label>Dane o meczu</label>
  7.  
  8. <input class="form-control" placeholder="Data meczu" type="datetime-local" name="datentime" required><br>
  9. <input class="form-control" placeholder="Liga" name="league" required>
  10. </div>
  11. <div class="form-group">
  12. <label>Gospodarze</label>
  13. <input class="form-control" placeholder="Enter team name" name="team1" required>
  14. </div>
  15. <div class="form-group">
  16. <label>Goście</label>
  17. <input class="form-control" placeholder="Enter team name" name="team2" required>
  18. </div>
  19. <div class="form-group">
  20. <label>Typ</label>
  21. <input class="form-control" placeholder="Enter prediction" name="draw" required>
  22. </div>
  23. <label>Status typu</label>
  24. <div class="radio">
  25. <label><input type="radio" name="results" value="actual">Kupon w trakcie</label>
  26. </div>
  27. <div class="radio">
  28. <label><input type="radio" name="results" value="win">Kupon wygrany</label>
  29. </div>
  30. <div class="radio">
  31. <label><input type="radio" name="results" value="loss">Kupon przegrany</label>
  32. </div>
  33. <div>
  34.  
  35. </div>
  36. <button type="submit" class="btn btn-default" name="add_tip">Dodaj typ</button>
  37. <button type="reset" class="btn btn-default">Reset</button>
  38.  
  39. </form>
  40. <?php
  41. function undefinedIndex(){
  42. }
  43. set_error_handler("undefinedIndex", E_NOTICE);
  44. if(isset($_POST['add_tip'])){
  45. $team1=$_POST['team1'];
  46. $team2=$_POST['team2'];
  47. $league=$_POST['league'];
  48. $datentime=$_POST['datentime'];
  49. $draw=$_POST['draw'];
  50. $results=$_POST['results'];
  51. $sql_insert="INSERT INTO premium_tips(datentime, league, team1, team2, draw, results) VALUES ('$datentime','$league','$team1','$team2','$draw','$results')";
  52. if ($conn->query($sql_insert) === TRUE) {
  53. } else {
  54. echo "Error: " . $sql . "<br>" . $conn->error;
  55. }
  56. }
  57. if(isset($_POST['update_tip'])){
  58. $team1=$_POST['team1u'];
  59. $team2=$_POST['team2u'];
  60. $league=$_POST['leagueu'];
  61. $datentime=$_POST['datentimeu'];
  62. $draw=$_POST['drawu'];
  63. $results=$_POST['resultsu'];
  64. $id=$_POST['id'];
  65. [color="#FF0000"] $win1=$mysqli->query('SELECT stat_win FROM statistic_tips');
  66. $loss1=$mysqli->query('SELECT stat_false FROM statistic_tips');
  67. if($results=="win"){
  68. $sql_insert="
  69. INSERT INTO statistic_tips (stat_win) VALUES '$win1+=1'";
  70. }
  71. if($results=="loss"){
  72. $sql_insert="
  73. INSERT INTO statistic_tips (stat_false) VALUES '$loss1+=1'";
  74. }[/color]
  75. $sql_insert="
  76. UPDATE premium_tips SET datentime='$datentime', league='$league',team1='$team1', team2='$team2',draw='$draw', results='$results' WHERE id='$id'";
  77. if ($conn->query($sql_insert) === TRUE) {
  78. } else {
  79. echo "Error: " . $sql . "<br>" . $conn->error;
  80. }
  81. }
  82. ?>
  83. </div>
  84. <div class="col-lg-9" id="del_status"></div>
  85. <div class="col-lg-9 tooltip-demo">
  86. <strong>Predictions:</strong><br>Hover on titles for more info
  87. <div id="gotten_info"></div>
  88. </div>
nospor
Sie zdecyduj co w koncu chcesz osiagnac. Czy chcesz updatowac te pola czy chcesz tworzyc nowe. Bo INSERT tworzy nowy, UPDATE updatuje.
I czemu mowisz ze masz dwa wiersze? A nie powinny to byc pola a nie wierwsze? Moze pokaz strukture bazy bo cos przekombinowales
redtyper
Proszę :


W gruncie rzeczy chodzi mi o automatyczne statystyki na wykresie WYGRANE/PRZEGRANE
Na początku przy dodawaniu każdy typ ma $result=actual a przy edycji zostaje zmieniony albo na $result=win lub $result=loss
Nie wiem czy dobrze kombinuje z tymi statystykami.

EDIT:
Przy aktualnym kodzie, nawet po zmianie na UPDATE mam błąd :
Fatal error: Uncaught Error: Call to a member function query() on null in premiumtips.php on line 309
Toshikatsu
No error podpowiada co jest źle.

Próbujesz wykonać funkcję na null'u ( $conn->query ), oznacza to niemal 100% pewność, że $conn jest null'em.
W kodzie który załączyłeś nie widać jak próbujesz się z bazą połączyć. Najpewniej tego nie robisz, stąd problem. Jeśli robisz, to pokaż w jaki sposób smile.gif
redtyper
W tym samym plliku powyżej
  1. <?php
  2. require 'credentials.php';
  3. function notLoggedIn() {
  4. echo "<meta http-equiv='refresh' content='0;url=errors/error.php'>";
  5. echo "<script language='javascript'>window.location.href = 'errors/error.php'</script>";
  6. }
  7. function customError($errno, $errstr) {
  8. }
  9. //set error handler
  10. set_error_handler("customError");
  11. if($_SESSION['login']== false){
  12. notLoggedIn();
  13. }
  14. else{
  15. if($conn->connect_error){
  16. die("Failed to connect".$conn->connect_error);
  17. }
  18. else{
  19. $sql="SELECT * FROM premium_tips";
  20. $result = $conn->query($sql);
  21. }
  22. }
  23. ?>


Plik updaterecordpremium
  1. <?php
  2. $q = intval($_GET['q']);
  3. require 'credentials.php';
  4. if($conn->connect_error){
  5. die("Failed to connect".$conn->connect_error);
  6. }
  7. else{
  8. $sql_get = "SELECT * FROM matches WHERE match_id='$q'";
  9. $result = $conn->query($sql_get);
  10. if($result->num_rows>0){
  11. while($row = $result->fetch_assoc()){
  12. echo '<form role="form" method="post" action="" onreset="resetAction()">
  13. <div class="form-group">
  14. <label>Match info</label>
  15.  
  16. <input class="form-control" placeholder="Date of match" type="datetime-local" name="datentime" required><br>
  17. <input class="form-control" placeholder="League" name="league" required><br>
  18. <input class="form-control" placeholder="Stadium" name="stadium" required>
  19. </div>
  20. <div class="form-group">
  21. <label>Home</label>
  22. <input class="form-control" placeholder="Enter team name" name="team1" required>
  23. </div>
  24. <div class="form-group">
  25. <label>Away</label>
  26. <input class="form-control" placeholder="Enter team name" name="team2" required>
  27. </div>
  28. <button type="submit" class="btn btn-default" name="add_match">Add Match</button>
  29. <button type="reset" class="btn btn-default">Reset</button>
  30.  
  31. </form>';
  32. }
  33. }
  34. else{
  35. echo "Unable to fetch data";
  36. }
  37. }
  38. ?>


Plik credentials
  1. <?php
  2.  
  3. $conn=new mysqli("","","","");
  4.  
  5. ?>
Toshikatsu
Ni jestem do końca przekonany do tego jak zrobiłeś łączenie z bazą. Gdybyś zostawił po prostu mysqli(), to jeszcze by przeszło, ale w ten sposób podstawiasz puste ciągi znaków.

Najlepsza rada na przyszłość, jeśli chcesz sprawdzić co zawiera zmienna użyj "var_dump"

W twoim przykładzie w pliku credentials
  1. <?php
  2.  
  3. $conn=new mysqli("","","","");
  4. var_dump($conn);
  5. ?>
redtyper
Ale tutaj mam zadeklarowana nazwę bazy, hasło, host oraz nazwę użytkownika.
  1. $conn=new mysqli("localhost","roor","root","nazwabazy")


Chyba, że ja czegoś nie zrozumiałem
viking
Wstaw te var_dumpy, będziesz wiedział co się dzieje.
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-2025 Invision Power Services, Inc.