Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zniką dane po przeładowaniu strony
Forum PHP.pl > Forum > Przedszkole
ufo1990
Mam problem z poniższym kodem ponieważ jest on częścią większego formularza i kiedy zrobię przeładowanie formularza i dostanę jakiś błąd walidacji to nie zapamiętywane są dane zaczytane z bazy danej. Proszę o jakieś sugestie co zrobić aby dane były zapamiętywane.

  1. <?php
  2. echo('<select name="name_check" >');
  3. $result = $connect->query("Select name from clients");
  4. if($result->num_rows > 0)
  5. {
  6. while($row = $result->fetch_assoc())
  7. {
  8. echo('<option value="'.$row['name'].'">'.$row['name'].' </option>');
  9. }}
  10. echo('</select>');
  11. ?>
trueblue
A po co używasz formularza? Chyba po to, aby przesłać jakieś dane do kodu. A skoro formularz przesyła dane do kodu, to jest tam również wybrana opcja.
https://www.w3schools.com/tags/att_option_selected.asp
ufo1990
Z bazej danej pobieram listę osób, następnie wybieram osobę której chce pewne dane w formularzu dodać.
nospor
trueblue o to nie pytal. To co teraz napisales bylo wiadome. trueblue podal ci wskazowke o ktora pytales: SELECTED - patrz link jaki ci podal trueblue
ufo1990
Mi nawet nie chodzi o to zeby zapamiętywalo wcześniej wybraną opcje, chodzi o to że po przeładowaniu strony nie mogę wybrać żadnej osoby ponieważ lista jest pusta.
nospor
No a formularz wysylasz do skryptu ktory generuje te dane ponownie do forma? Pokasz caly kod
ufo1990
  1. <?php
  2.  
  3. if (!isset($_SESSION['logged']))
  4. {
  5. header('Location: index.php');
  6. exit();
  7. }
  8. else
  9. {
  10. if ($_SESSION['roles'] == "1")
  11. {
  12.  
  13. require_once "connect.php";
  14. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
  15. mysqli_report(MYSQLI_REPORT_STRICT);
  16.  
  17. if (isset($_POST['name']))
  18. {
  19.  
  20. $all_ok=true;
  21. $id_clients=$_SESSION['id'];
  22. $name = $_POST['name'];
  23. if ((strlen($name)<5))
  24. {
  25. $all_ok=false;
  26. $_SESSION['e_name']="Nazwa miejscowości jest zbyt krótkie !";
  27. }
  28.  
  29. $check_all = empty($_POST['check_all']) ? array() : (array)$_POST['check_all'];
  30.  
  31. if(!isset($_POST['check_all']))
  32. {
  33. $all_ok=false;
  34. $_SESSION['e_checkbx_number']="Potwierdz poprawność wprowadzonych danych !";
  35. }
  36. $check_all = empty($_POST['check_all']) ? array() : (array)$_POST['check_all'];
  37.  
  38. $_SESSION['fr_name'] = $name;
  39.  
  40. try
  41. {
  42. if ($connect->connect_errno!=0)
  43. {
  44. throw new Exception(mysqli_connect_errno());
  45. }
  46. else
  47. {
  48.  
  49. if ($all_ok==true)
  50. {
  51. if ($connect->query("INSERT INTO `agreement` (`id`, `name_a`, `id_clients`) VALUES (NULL, '$name','$id_clients')"))
  52.  
  53. {
  54. $_SESSION['well_done']=true;
  55. header('Location: register_confirm.php');
  56. }
  57. else
  58. {
  59. throw new Exception($connect->error);
  60. }
  61. }
  62. $connect->close();
  63. }
  64. }
  65. catch(Exception $e)
  66. {
  67. echo '<span style="color:#FF0000;">Błąd serwera! Przepraszamy za niedogodności i prosimy o rejestrację w innym terminie!</span>';
  68. echo '<br />Informacja developerska: '.$e;
  69. }
  70. }
  71. }
  72. else
  73. {
  74. header('Location: index.php');
  75. }}
  76. ?>
  77. <!DOCTYPE HTML>
  78. <html lang="pl">
  79. <head>
  80. <meta charset="utf-8" />
  81. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  82. <title>Rejestracja klienta</title>
  83. <link rel="stylesheet" href="../css/style.css" type="text/css" />
  84. <link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet">
  85. <meta name="viewport" content="width=device-width, initial-scale=1">
  86. <script src="js/add_field.js"></script>
  87. </head>
  88. <body>
  89. <div id="container">
  90. <form method="post" enctype="multipart/form-data">
  91. <?php
  92. echo('<select name="name_check" >');
  93. $result = $connect->query("Select id, name from clients");
  94. if($result->num_rows > 0)
  95. {
  96. while($row = $result->fetch_assoc())
  97. {
  98. echo('<option value="'.$row['name'].'">'.$row['name'].' </option>');
  99. }}
  100. echo('</select>');
  101. ?>
  102. <br>
  103. <input type="text" value="<?php
  104. if (isset($_SESSION['fr_name']))
  105. {
  106. echo $_SESSION['fr_name'];
  107. unset($_SESSION['fr_name']);
  108. }
  109. ?>" name="name" placeholder="Miejscowość:"><br />
  110. <?php
  111. if (isset($_SESSION['e_name']))
  112. {
  113. echo '<div class="error">'.$_SESSION['e_name'].'</div>';
  114. unset($_SESSION['e_name']);
  115. }
  116. ?>
  117. <br>
  118. Sprawdzenie danych:<input class="checkbox" type="checkbox" value="0" name="check_all">
  119. <br>
  120. <?php
  121. if (isset($_SESSION['e_checkbx_number']))
  122. {
  123. echo '<div class="error">'.$_SESSION['e_checkbx_number'].'</div>';
  124. unset($_SESSION['e_checkbx_number']);
  125. }
  126. ?>
  127. <?php
  128. if (isset($_SESSION['e_bot']))
  129. {
  130. echo '<div class="error">'.$_SESSION['e_bot'].'</div>';
  131. unset($_SESSION['e_bot']);
  132. }
  133. ?>
  134.  
  135. <input type="submit" value="Zarejestruj" />
  136. </form>
  137. </div>
  138. </body>
  139. </html>
nospor
sprawdz czy to
$result = $connect->query("Select id, name from clients");
nie zwraca ci jakiegos bledu
ufo1990
kod zawiera więcej walidacji, ale skróciłem go żeby nie był taki długi. Kod sam w sobie działa, aktualizuje dane w bazie danych jednak tak jak pisałem problem pojawia się kiedy formularz zawiera jakiś błąd to wtedy nie zapamiętuje się poniższy kod w formularzu.

  1. <?php
  2. echo('<select name="name_check" >');
  3. $result = $connect->query("Select id, name from clients");
  4. if($result->num_rows > 0)
  5. {
  6. while($row = $result->fetch_assoc())
  7. {
  8. echo('<option value="'.$row['name'].'">'.$row['name'].' </option>');
  9. }}
  10. echo('</select>');
  11. ?>
nospor
Prosilem o cos
ufo1990
Cytat(nospor @ 16.07.2020, 17:52:49 ) *
Prosilem o cos


Kod nie zwraca żadnych błędów
nospor
A jak to sprawdziles? Pokaz kod, ktory sprawdza czy ten kawalek zapytania, ktory ci podalem, nie zwraca bledu
ufo1990
Sprawdziłem w taki sposób że skoro następuje
  1. header('Location: register_confirm.php');
tzn ze kod nie zwiera błędów, chyba że się mylę...

Problem rozwiązany okazało się że brakowalo
  1. require_once "connect.php";
  2. $connect = @new mysqli($host, $db_user, $db_password, $db_name);
viking
Na przyszłość nie używaj nigdy @ tym bardziej że masz włączone wyjątki. Dodatkowi nigdy nie wstawaj danych od użytkownika bezpośrednio do zapytania tak jak to robisz z name. Dobrze by też było rozdzielić ten kod html od reszty.
ufo1990
Mógł byś mi wytłumaczyć dlaczego nie używać @? Rozumiem że nie powinno się wstawiać danych od użytkownika jednak nie widzę inne rozwiązania żeby wiedzieć komu aktualizuję dane.
viking
Bo ukrywasz bez sensu błędy a potem są takie kwiatki że nie wiesz że coś nie działa. Programując powinieneś mieć włączone maksymalne raportowanie i usunąć wszystkie najdrobniejsze nawet notice. Nie zdawać się na przypadek.
https://www.php.net/manual/en/mysqli.prepare.php

  1. mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

A tutaj mieszasz styl obiektowy z proceduralnym dodatkowo.
nospor
Cytat
Sprawdziłem w taki sposób że skoro następuje

[PHP] pobierz, plaintext

header('Location: register_confirm.php');

tzn ze kod nie zwiera błędów, chyba że się mylę...

No to przeciez sie wykonuje gdy walidacja ok. Sam pisales,ze nie dziala gdy walidacja NIE OK...

Chodzilo mi bys wyswietluil BLAD BAZY DANYCH. To by ci od razu pokazalo ze masz zwalone cos. W dziale PRZEDSZKOLE masz przypiety temat JAK ZADAC PYTANIE. Tam masz to wszystko opisane. Zapoznaj sie z tym i nie marnuj swojego i naszego czasu na przyszlosc.


Cytat
Problem rozwiązany okazało się że brakowalo

Poprostu nie potrzebnie wczesniej zamykasz polaczenie:
$connect->close();
Ale jak juz pisalem wczesniej: to bys od razu wykryl jakbys wyswietlil blad bazy danych o ktory prosilem od paru postow
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.