Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] - błąd w zapytaniu po pojawieniu się zmiennej $_POST
Forum PHP.pl > Forum > Przedszkole
elemeledutki
Cześć.

Jestem zbyt świeżutki żeby znaleźć się "aż" w Przedszkolu, ale niższej kategorii nie znalazłem, więc piszę tutaj.

Napisałem (posługując się głównie przykładami z netu) bardzo prosty skrypt, który wyświetla kilka informacji z bardzo prostej bazy danych (dwie tabele: users (id, username, password, active) i karty (id, kartanr, data, danie, cena, firma)
Po zalogowaniu skrypt wyświetla odpowiednie dane (działa)

dodanie bardzo prostego formularza:
  1. <form method='POST'>
  2. <input type='text' name='newpass' placeholder='Nowe haslo' required>
  3. <button type='submit'>ZMIEN HASLO</button>
  4. </form>


zapytanie (które działało "przed chwilą") zwraca błąd (sprawdziłem, to to samo zapytanie i POWINNO działać)

Różnica, którą widzę jest taka, że w momencie pierwszego (poprawnego) zapytania istnieją zmienne $_POST['username'] i $_POST['password'], przy ponownym wykonaniu nie ma ich, jest tylko $_POST['newpass'] (którą chcę użyć do możliwości zmiany hasła). Tyle, że dane używane w zapytaniu przechowywane są w $_SESSION a ta zmiennna się NIE ZMIENIA.

łatwiej byłoby zobaczyć na działającym przykładzie: link: karty.delihouse.pl login: 686 hasło: haslo . Po zalogowaniu wszystko działa jak powinno, po kliknięciu guzika "ZMIEN HASLO" zapytanie wywraca się, mimo, że (mi się wydaje) jest poprawne...

Pomożecie?

CAŁY KOD:
  1. <?php //Start the Session
  2. // require('connect.php');
  3. //3. If the form is submitted or not.
  4. //3.1 If the form is submitted
  5. if (isset($_POST['username']) and isset($_POST['password'])){
  6. //3.1.1 Assigning posted values to variables.
  7. $username = $_POST['username'];
  8. $password = $_POST['password'];
  9. //3.1.2 Checking the values are existing in the database or not
  10.  
  11.  
  12. //dane dostępowe
  13.  
  14. $query = "SELECT * FROM `users` WHERE username='$username' and password='$password'";
  15.  
  16. if (mysql_connect($serwer, $login, $haslo) and mysql_select_db($baza)) {
  17. // zapytanie do bazy danych
  18.  
  19.  
  20. // echo "<style>
  21.  
  22. // </style>
  23. // ";
  24.  
  25.  
  26.  
  27. }
  28. else echo "Nie mogę połączyć się z bazą danych!";
  29.  
  30.  
  31.  
  32.  
  33. $result = mysql_query($query) or die("Błąd w zapytaniu! 0");
  34. $count = mysql_num_rows($result);
  35. //3.1.2 If the posted values are equal to the database values, then session will be created for the user.
  36. if ($count == 1){
  37. $_SESSION['username'] = $username;
  38.  
  39. $query = mysql_query("SELECT firma FROM `karty` WHERE kartanr='$username' LIMIT 1") or die("Błąd w zapytaniu! 4");
  40. $nazwafirmy = mysql_fetch_array($query);
  41. $_SESSION['firma'] = $nazwafirmy[0];
  42.  
  43. }else{
  44.  
  45. //3.1.3 If the login credentials doesn't match, he will be shown with an error message.
  46. $fmsg = "NIEPRAWIDLOWE DANE LUB BRAK KARTY.";
  47. }
  48. }
  49.  
  50. //3.1.4 if the user is logged in Greets the user with message
  51. if (isset($_SESSION['username'])){
  52. $username = $_SESSION['username'];
  53.  
  54. $day = date('d'); // dzień
  55. $month = date('m'); // miesiąc
  56. $year = date('Y'); // rok
  57.  
  58. if ($_SESSION['firma'] == 'NETCOMPANY') {
  59. $data_in = date("Y-m-d", mktime (0,0,0,$month-1,19,$year));
  60. $data_out = date("Y-m-d", mktime (0,0,0,$month,20,$year));
  61. }
  62. else {
  63. $data_in = date("Y-m-d", mktime (0,0,0,$month,1,$year));
  64. $data_out = date("Y-m-d", mktime (0,0,0,$month,date("t"),$year));
  65. }
  66.  
  67.  
  68. echo "<!DOCTYPE html>
  69. <head>
  70. <meta http-equiv=content-type content=text/html; charset=iso-8859-2>
  71. <link rel=stylesheet href=styles.css >
  72. <title>Page Title</title>
  73. <meta name=description content=Write some words to describe your html page>
  74. </head>
  75. <body>
  76. <div class=blended_grid>
  77. <div class=pageHeader>
  78. Wersja MOCNO robocza. Dane na razie uaktualniane sa recznie poprzez export z naszego programu sprzedazowego do excela i stamtad do bazy. MOZE sie zdarzyc tak, ze zapomne, ale staral sie bede aktualizoweac kazdego dnia po jego zakonczeniu.<br />
  79. W kazdym razie w tej plikacji moga pojawic sie bledy (glownie ludzkie), w razie watpliwosci prosze o mail.<br />
  80. <small> V 0.1.6 (dodane rozliczenie po okresie wybranym dla danej firmy)</small>
  81. ";
  82. //*
  83. echo "cena: " . $rek[1];
  84.  
  85. echo "<pre>";
  86. print_r($_POST);
  87. unset($_POST['newpass']);
  88. print_r($_POST);
  89. print_r($_SESSION);
  90. echo "</pre>";
  91. //*/
  92.  
  93. echo "
  94. </div>
  95. <div class=pageLeftMenu>KARTA NR:<br />
  96.  
  97. <b>
  98. <font color='#FAA' size='7'>" . $username . "</font>
  99. <br />
  100. <font color='#AA5050' size='5'>" . $_SESSION['firma'] . "</font>
  101. </b>
  102.  
  103. <br />Data od:<br /><b>". $data_in . "</b><br />Data do:<br /><b>". $data_out . "</b>
  104. <small><p>Na razie automatycznie wybierany jest okres aktualny (wlasciwy dla danej firmy).<br />Pozniej postaram sie dopisac mozliwosc wyboru wlasnego zakresu dat.</p></small>
  105. <br /><strong><a href='logout.php'><br />LOGOUT</a></strong><br />
  106. <br /><strong><a href='logout.php'><br />ZMIEN HASLO</a></strong><br /><small>Na razie nie dziala</small>
  107.  
  108. <form method='POST'>
  109. <input type='text' name='newpass' placeholder='Nowe haslo' required>
  110. <button type='submit'>ZMIEN HASLO</button>
  111. </form>
  112.  
  113. </div>
  114. <div class=pageContent>
  115. ";
  116.  
  117.  
  118. echo "
  119. <div class=divTable>
  120. <div class=divTableBody>
  121. ";
  122.  
  123. $wynik = mysql_query("SELECT data FROM karty WHERE kartanr='$username' AND data>='$data_in' AND data<'$data_out' GROUP BY data") or die("BLAD w zapytaniu 1: <pre>SELECT data FROM karty WHERE kartanr='$username' AND data>='$data_in' AND data<'$data_out' GROUP BY data</pre>");
  124. while($rek1 = mysql_fetch_array($wynik)) {
  125. echo "<br /><b>";
  126. echo $rek1[0];
  127. echo "</b>";
  128. $dania = mysql_query("SELECT danie, cena FROM karty WHERE data='$rek1[0]' AND kartanr='$username'") or die("Błąd w zapytaniu 2: <pre>SELECT danie, cena FROM karty WHERE data='$rek1[0]' AND kartanr='$username'</pre>");
  129. while($rek = mysql_fetch_array($dania)) {
  130. echo "<div class=divTableRow><div class=divTableCell>".$rek[0]."</div><div class=divTableCell>".$rek[1]."</div></div>";
  131. /*echo "<pre>";
  132. print_r ($rek);
  133. echo "</pre>";*/
  134. }
  135. }
  136. echo "
  137. </div>
  138. </div>
  139. ";
  140.  
  141. echo "
  142. <br /><font color='#CCC'><p>Niestety nie umiem jeszcze tego podsumowac (cos poczytam o zamianie stringa na liczbe, pewnie o to chodzi), na razie trzeba uzyc kalkulatora albo oszacowac w pamieci...</p></font><pre>
  143. ";
  144.  
  145. echo "
  146. </pre></div>
  147. <div class=pageFooter>";
  148. echo "
  149. </div>
  150. </div>
  151. </boy>
  152. </html>
  153. ";
  154.  
  155.  
  156.  
  157.  
  158.  
  159. }else{
  160. //3.2 When the user visits the page first time, simple login form will be displayed.
  161. ?>
  162. <html>
  163. <head>
  164. <title>Nie mam pomyslu na title</title>
  165.  
  166. </head>
  167. <body>
  168.  
  169. <div class="container">
  170. <form class="form-signin" method="POST">
  171. <?php if(isset($fmsg)){ ?><div class="alert alert-danger" role="alert"> <?php echo $fmsg; ?> </div><?php } ?>
  172. <h2 class="form-signin-heading">Please Login</h2>
  173. <div class="input-group">
  174. <span class="input-group-addon" id="basic-addon1">@</span>
  175. <input type="text" name="username" class="form-control" placeholder="Username" required>
  176. </div>
  177. <label for="inputPassword" class="sr-only">Password</label>
  178. <input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
  179. <button class="btn btn-lg btn-primary btn-block" type="submit">Login</button>
  180.  
  181. </form>
  182. </div>
  183.  
  184. </body>
  185.  
  186. </html>
  187. <?php } ?>
nospor
Zamiast wyswietlac nic nie mowiace:

or die("Blablabla");

wyswietlaj blad zapytania

or die(mysql_error());
elemeledutki
Kod
Access denied for user 'srv17998'@'localhost' (using password: NIE)


czyli wiem, gdzie szukać...

PODZIĘKOWAŁ.
nospor
ps: skoro dopiero zaczynasz zabawe, przerzuc sie na PDO albo chociaz na mysqli_. mysql_ jest juz przestarzale i wylecialo z nowych wersji php
elemeledutki
właściwie to nie zaczynam - po prostu muszę zrobić taki jeden malutki projekcik i tyle. A że kiedyś (kilka lat temu) cośtam cośtam próbowałem pisać w php/mysql to stare przyzwyczajenia zostały...
Dzięki wielkie za pomoc - właściwie za zwrócenie uwagi (myślałem że wypisywanie które zapytanie jest wadliwe jest dobrym pomysłem - okazało się, że lepszym jest sprawdzenie DLACZEGO jest wadliwe:)) Człowiek się całe życie uczy..

Co do samego mysqli - (to chyba bardziej obiektowe podejście do mysql) - czytałem - i gdybym miał zrobić coś jeszcze - pewnie poszedłbym w tym kierunku - ale na razie zgodnie z zasadą "nie zepsute - nie naprawiać" - póki działa zostaje jak jest:)

Szczególnie, że jeszcze kilka pierdółek mam do dopisania (ale to już poza sql).

jeszcze raz dzięki.
patwoj98
Cytat(elemeledutki @ 13.06.2017, 16:08:44 ) *
właściwie to nie zaczynam - po prostu muszę zrobić taki jeden malutki projekcik i tyle. A że kiedyś (kilka lat temu) cośtam cośtam próbowałem pisać w php/mysql to stare przyzwyczajenia zostały...
Dzięki wielkie za pomoc - właściwie za zwrócenie uwagi (myślałem że wypisywanie które zapytanie jest wadliwe jest dobrym pomysłem - okazało się, że lepszym jest sprawdzenie DLACZEGO jest wadliwe:)) Człowiek się całe życie uczy..

Co do samego mysqli - (to chyba bardziej obiektowe podejście do mysql) - czytałem - i gdybym miał zrobić coś jeszcze - pewnie poszedłbym w tym kierunku - ale na razie zgodnie z zasadą "nie zepsute - nie naprawiać" - póki działa zostaje jak jest:)

Szczególnie, że jeszcze kilka pierdółek mam do dopisania (ale to już poza sql).

jeszcze raz dzięki.


Jeśli mogę się jeszcze odnieść - mysqli owszem obiektowe, ALE możesz również zrobić ze zwykłego mysql, mysqli. Wystarczy, że dodając tę jedną samogłoskę, popatrzysz w dokumentacji i ewentualnie dodasz zmienną z połączeniem bazy danych jako pierwszy argument. Tak nie wiele, a będziesz miał pewność, że zadziała na nowszych wersjach PHP.
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.