Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błąd Column count doesn't match value count at row 1
Forum PHP.pl > Forum > Przedszkole
JaNieUmiem
Witam.
Mój poprzedni projekt się popsuł (chyba moja wina, zapisy się źle zrobiły, pogubiły itp.)
Było tam tyle rzeczy pominiętych, że postanowiłem zrobić drugi system rejestracji i logowania.
Ehh... Kodzik:
  1. [<?php
  2. if (isset($_POST['email']))
  3. {
  4. $wszystko_OK = true;
  5. $login = $_POST['login'];
  6. $haslo1 = $_POST['haslo1'];
  7. $haslo2 = $_POST['haslo2'];
  8. $email = $_POST['email'];
  9.  
  10. //SPRAWDZANIE LOGINU
  11. if ((strlen($login)<3) || (strlen($login)>20))
  12. {
  13. $wszystko_OK = false;
  14. $_SESSION['e_login']="Login powinien zawierać od 3 do 20 znaków";
  15. }
  16. if (ctype_alnum($login)==false)
  17. {
  18. $wszystko_OK = false;
  19. $_SESSION['e_login']="Login może zawierać tylko litery i cyfry (bez polskich znaków)";
  20. }
  21. //SPRAWDZANIE HASŁA
  22. if ((strlen($haslo1)<8))
  23. {
  24. $wszystko_OK = false;
  25. $_SESSION['e_haslo']="Hasło powinno zawierać conajmniej 8 znaków";
  26. }
  27. //SPRAWDZANIE DRUGIEGO HASŁA
  28. if ($haslo1!=$haslo2)
  29. {
  30. $wszystko_OK = false;
  31. $_SESSION['e_haslo2']="Podane hasła nie są takie same";
  32. }
  33. //SPRAWDZANIE EMAILA
  34. $emailB = filter_var($email, FILTER_SANITIZE_EMAIL);
  35. if ((filter_var($emailB, FILTER_VALIDATE_EMAIL)==false) || ($emailB!=$email))
  36. {
  37. $wszystko_OK=false;
  38. $_SESSION['e_email']="Podany adres e-mail jest niepoprawny";
  39. }
  40. //SPRAWDZANIE CHECKBOXA
  41. if (!isset($_POST['regulamin']))
  42. {
  43. $wszystko_OK = false;
  44. $_SESSION['e_regulamin']="Aby się zarejestrować potwierdź regulamin";
  45. }
  46. require_once "connect.php";
  47. mysqli_report(MYSQLI_REPORT_STRICT);
  48. try
  49. {
  50. $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
  51. if($polaczenie->connect_errno!=0)
  52. {
  53. throw new Exception(mysqli_connect_errno());
  54. }
  55. else
  56. {
  57. //CZY EMAIL JUŻ ISTNIEJE
  58. $rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE email='$email'");
  59. if (!$rezultat) throw new Exception($polaczenie->error);
  60. $mails = $rezultat->num_rows;
  61. if($mails>0)
  62. {
  63. $wszystko_OK=false;
  64. $_SESSION['e_email']="E-mail jest już aktualnie w użyciu";
  65. }
  66. //CZY LOGIN JUŻ ISTNIEJE
  67. $rezultat = $polaczenie->query("SELECT id FROM uzytkownicy WHERE user='$login'");
  68. if (!$rezultat) throw new Exception($polaczenie->error);
  69. $logins = $rezultat->num_rows;
  70. if($logins>0)
  71. {
  72. $wszystko_OK=false;
  73. $_SESSION['e_login']="Login jest już aktualnie w użyciu";
  74. }
  75. if ($wszystko_OK==true)
  76. {
  77. //DODAWANIE DO BAZY
  78.  
  79. if ($polaczenie->query("INSERT INTO uzytkownicy VALUES (NULL, '$login', '$haslo1', '$email')"))
  80. {
  81. $_SESSION['udanarejestracja']=true;
  82. header('Location: welcome.php');
  83. }
  84. else
  85. {
  86. throw new Exception($polaczenie->error);
  87. }
  88.  
  89. }
  90.  
  91. $polaczenie->close();
  92. }
  93.  
  94. }
  95. catch(Exception $e)
  96. {
  97. echo '<span style="color:red;">Przepraszamy, połączenie z serwerem aktualnie nieczynne. Prosimy o rejestrację w innym terminie.</span>';
  98. echo '<br />'.$e;
  99. }
  100.  
  101. }
  102. ?>
  103. <!DOCTYPE HTML>
  104. <html lang="pl">
  105. <head>
  106. <title>GRA</title>
  107. <meta charset="utf-8" />
  108. <meta name="description" content=" " />
  109. <meta name="keywords" content=" " />
  110. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  111. <link rel="stylesheet" href="style.css" type="text/css" />
  112. </head>
  113. <body>
  114. <div id="header">Fajna gra - rejestracja</div>
  115. <div id="page">
  116. <font size="5"><i>Załóż darmowe konto i dołącz do społeczności!</font></i><br><br>
  117. <form method="post" />
  118. Login:<br>
  119. <input type="text" name="login" /><br>
  120. <?php
  121. if (isset($_SESSION['e_login']))
  122. {
  123. echo '<div class="error">'.$_SESSION['e_login'].'</div>';
  124. unset($_SESSION['e_login']);
  125. }
  126. ?><br>
  127. Hasło:<br>
  128. <input type="password" name="haslo1" /><br>
  129. <?php
  130. if (isset($_SESSION['e_haslo']))
  131. {
  132. echo '<div class="error">'.$_SESSION['e_haslo'].'</div>';
  133. unset($_SESSION['e_haslo']);
  134. }
  135. ?><br>
  136. Powtórz hasło:<br>
  137. <input type="password" name="haslo2" /><br>
  138. <?php
  139. if (isset($_SESSION['e_haslo2']))
  140. {
  141. echo '<div class="error">'.$_SESSION['e_haslo2'].'</div>';
  142. unset($_SESSION['e_haslo2']);
  143. }
  144. ?><br>
  145. E-mail:<br>
  146. <input type="text" name="email" /><br>
  147. <?php
  148. if (isset($_SESSION['e_email']))
  149. {
  150. echo '<div class="error">'.$_SESSION['e_email'].'</div>';
  151. unset($_SESSION['e_email']);
  152. }
  153. ?><br>
  154. <label><input type="checkbox" name="regulamin" /> Akceptuję</label> <a href="regulamin.php">regulamin</a><br>
  155. <?php
  156. if (isset($_SESSION['e_regulamin']))
  157. {
  158. echo '<div class="error">'.$_SESSION['e_regulamin'].'</div>';
  159. unset($_SESSION['e_regulamin']);
  160. }
  161. ?><br>
  162. <input type="submit" name="submit" value="Zarejestruj się" /><br><br><br>
  163. <font size="5"><a href="index.php"><< LOGOWANIE <<</a></font>
  164. </div>
  165. </body>
  166. </html>


A błąd, który ciągle wyskakuje po POPRAWNEJ rejestracji to:

Przepraszamy, połączenie z serwerem aktualnie nieczynne. Prosimy o rejestrację w innym terminie.
Exception: Column count doesn't match value count at row 1 in C:\xampp\htdocs\gra\rejestracja.php:87 Stack trace: #0 {main}

Proszę o pomoc i jak to naprawić.
markuz
Pokaż strukturę tabeli "uzytkownicy" - błąd mówi, że wstawiasz do niej za mało/dużo wartości.
Lion
Problemem jest niedopasowanie do ilości kolumn w tabeli i to że nie korzystasz z zapytania INSERT w wersji w której można wskazać o które kolumny chodzi.

Ponadto kod w obecnej wersji jest podatny na SQL Injection.

Jeśli "psujesz" kod to może warto by skorzystać z systemu kontroli wersji?
JaNieUmiem
Rzeczywiście kombinowałem z tą bazą danych. Teraz nie ma mnie w domu, ale jutro wracam i sprawdzę.
Za to z tym, że kod jest podatny na MySQL injection muszę się nie zgodzić, ponieważ to kod rejestracji, a nie logowania. Dziękuję za odpowiedzi smile.gif
Lion
Dla SQL Injection nie ma znaczenie do czego służy kod jeśli da się je zrobić wink.gif
JaNieUmiem
Ja uczę się z videoporadnikow Mirosława Zelenta i nic nie było o możliwości wstrzykniecia MySQL do rejestracji. Było tylko tyle, że można zalogować się na czyjeś konto wykorzystując tę metodę. Ja jeszcze trochę zielony w temacie... smile.gif

Dziękuję, już zmieniłem i działa jak należy.
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.