Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie do bazy
Dukov
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Wszystko już jest na dobrej drodze, problem mam jeszcze z zapytaniem do bazy
  1. <?php
  2. $avatar;
  3. if ($_POST['name'] != null){
  4. $userName = $_POST['name'];
  5. }
  6. if ($_POST['city'] != null ) {
  7. $userCity = $_POST['city'];
  8. }
  9. if ($_POST['desc'] != null){
  10. $userDesc = $_POST['desc'];
  11. }
  12.  
  13. if ($_POST['login'] != '' && $_POST['pass'] != '' && $_POST['mail'] != '') {
  14.  
  15.  
  16. if (strlen($_POST['login']) > 3 && strlen($_POST['login']) < 10 && strlen($_POST['pass']) > 5 && strlen($_POST['pass']) < 16 ) {
  17. if (preg_match('/^[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-z]{2,4}$/D', $_POST['mail']) && preg_match('/^[a-zA-Z0-9\.\-_]/', $_POST['login']) ) {
  18.  
  19.  
  20. $userLogin = $_POST['login'];
  21. $userPass = $_POST['pass'];
  22. $userMail = $_POST['mail'];
  23. $len = 20;
  24. $userID = substr(sha1(rand(1,10000)),0,$len);
  25. echo $userID;
  26. if($_FILES['filename']['name'] != ''){
  27. $avatar = fileReceive();
  28. }
  29. reg();
  30. }
  31. else
  32. {
  33. header("Location: ../reg.php?reg=badchars");
  34. }
  35. }
  36. else
  37. {
  38. header("Location: ../reg.php?reg=shortpole");
  39. }
  40. }
  41. else
  42. {
  43. header("Location: ../reg.php?reg=emptyf");
  44. }
  45. function reg(){
  46. global $userID, $userMail, $userPass, $userLogin, $userDesc, $userCity, $userName, $avatar;
  47. try {
  48. $host = 'localhost';
  49. $baza = 'user';
  50. $uzytkownik = 'adamek';
  51. $haslo = 'aaaaa5';
  52.  
  53.  
  54. $conn = new PDO("mysql:host=$host;dbname=$baza", $uzytkownik, $haslo);
  55. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  56. $stmt = $conn->prepare("SELECT Nazwa AND mail FROM Users WHERE Nazwa = '$userLogin' OR mail = '$userMail'");
  57. $stmt->execute();
  58. $row = $stmt->fetch();
  59. if($row['Nazwa'] == 0 && $row['mail'] == 0){
  60. $stmt = $conn->exec("INSERT INTO Users ( ID , Nazwa , Haslo , mail , name , city , image , desci , activate , admin ) VALUES ('$userID','$userLogin', '$userPass', '$userMail', '$userName', '$userCity, $avatar', '$userDesc', 0 , 0 ");
  61.  
  62. echo "ok";
  63. #$sendMail();
  64. }
  65.  
  66. else{
  67. header("Location: ../reg.php?reg=userexists");
  68. }
  69. }
  70. catch(PDOException $e)
  71. {
  72. echo "duppppp";
  73. }
  74. }
  75.  
  76.  
  77.  
  78.  
  79. function fileReceive(){
  80. $max_size = 1024*1024;
  81. if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
  82. if ($_FILES['filename']['size'] > $max_size) {
  83. echo 'Błąd! Plik jest za duży!';
  84. }
  85. else {
  86. echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['filename']['name'];
  87. echo '<br/>';
  88. if (isset($_FILES['filename']['type'])) {
  89. echo 'Typ: '.$_FILES['filename']['type'].'<br/>';
  90. }
  91. $strExt = substr( $_FILES['filename']['name'], strrpos( $_FILES['filename']['name'], '.' ) + 1 );
  92. echo "Rozszerzenie: ". $strExt;
  93. $len = 20;
  94. $randstring = substr(sha1(rand(1,10000)),0,$len).".jpg";
  95. echo $randstring;
  96. echo $_FILES['filename']['name'];
  97.  
  98. if ($strExt == 'jpg' || 'JPG' || 'jpeg' || 'JPEG'){
  99. move_uploaded_file($_FILES['filename']['tmp_name'],
  100. $_SERVER['DOCUMENT_ROOT'].'/avatars/'.$_FILES['filename']['name']);
  101.  
  102. }
  103. else{
  104. echo "niy!!";}
  105. }
  106. } else {
  107. echo 'Błąd przy przesyłaniu danych!';
  108. }
  109.  
  110. rename('../avatars/'.$_FILES['filename']['name'], "../avatars/". $randstring);
  111. return $randstring;
  112. }
  113.  
  114.  
  115.  
  116. function sendMail(){
  117. $addressee = 'ajjambor912@gmail.com';
  118. @$email = $_POST['email'];
  119.  
  120. @$content = 'Name '.$_POST['username'].' Phone: '.$_POST['userphone'].' Content: '.$_POST['message'];
  121.  
  122. $header = "From: ".$_POST['email']." \nContent-Type:".
  123. ' text/plain;charset="iso-8859-2"'.
  124. "\nContent-Transfer-Encoding: 8bit";
  125. if (mail($addressee, 'Message from NAhandyman: ', $content , $header))
  126.  
  127. header('Location:index.php?send=true');
  128. else
  129. header('Location:index.php?send=false');
  130. }
  131. ?>


Tutaj jest błąd
  1. $stmt = $conn->exec("INSERT INTO Users ( ID , Nazwa , Haslo , mail , name , city , image , desci , activate , admin ) VALUES ('$userID','$userLogin', '$userPass', '$userMail', '$userName', '$userCity, $avatar', '$userDesc', 0 , 0 ");


Skąd wiem? Bo jak wykomentuje to skrypt leci do kolejnej lini i mam wyświetla się ok, z echa. Jeśli skasuje komentarz to przechodzi do instrukcji catch i z echa wyświetla się duppp.
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jaki błąd? echo $e->getMessage();
Poza tym http://php.net/manual/en/pdo.prepare.php


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1


Błąd składni widocznie, jakiś znak źle, ale sorry już mi się tak miesza, że nie dojdę sam do tego, więc jak ktoś mi to wytłumaczy łopatologicznie będę wdzięczny, tymbardziej, że skrypt logowania będę musiał dopracować (ale tamten działa, tylko przekierowania zrobić) do tego zahashować hasła i dopisać funkcje sprawdzającą, czy nie istnieje już taki plik. Z czy się nie powtarza ID już zrobiłem i nawet ładnie rekurencyjnie mi to wyszło :] no i wysłanie maila ogarnąć. A ostatnie tabele, admin itd, mam w tabeli jako boolean, choć z automatu mi dało TINYINT, a przed tymi kolumnami mam też KEY jako A_I, nie wiem czy nie powineinem tam dopisać pustej wartości czy coś.

Ten post edytował Dukov 25.07.2017, 16:13:24
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


'$userCity, $avatar'

Poza tym id to nie wartość string jak to teraz zapisujesz. Zastosuj prepare i problem zniknie.


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #5





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Albo czegoś nie zrozumiałem albo jestem ślepy i czegoś nie widzę, pozmieniałem ale nadal to smao
  1. if($row['Nazwa'] == 0 && $row['mail'] == 0 ){
  2.  
  3. $stmt = $conn->prepare("INSERT INTO Users ( ID , Nazwa , Haslo , mail , name , city , image , desci , activate , admin ) VALUES ($userID,'$userLogin', '$userPass', '$userMail', '$userName', '$userCity', '$avatar', '$userDesc', 0 , 0 ");
  4. $stmt->execute();
  5. echo "ok";
  6. #$sendMail();
  7. }
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Naprawdę w dokumentacji jest to tak zapisane? Poza stosuj `` do nazw.


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #7





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Nie wiem jak jest w dokumentacji, ale siedzę przy kompie w zasadzie odkąd mam l4, czyli od 18 lipca z kilkoma przerwami na sen i już nie mam siły tam zajrzeć, a chciałbym, żeby to tylko działało. Na nauke przyjdzie pora, jak się wezmę za system komentarzy ale musze już odpocząć.

Ten post edytował Dukov 25.07.2017, 16:33:42
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://dev.mysql.com/doc/refman/5.7/en/keywords.html
I poszukaj sobie name. Później zastosuj się do mojego poprzedniego wpisu.


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


Majster, wszystko jest ok, tylko jak to ja, przeoczyłem zamknięcie nawiasów VALUES wink.gif
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Z kodu powyżej nie wynika żebyś miał problem z zamknięciem tylko ewidentnie słowo kluczowe. I zrób w końcu coś z tym sql injection. Wzorzec na weryfikację maila jest też jakimś przestarzałym badziewiem.

Ten post edytował viking 26.07.2017, 03:37:14


--------------------
Go to the top of the page
+Quote Post
Tomplus
post
Post #11





Grupa: Zarejestrowani
Postów: 1 879
Pomógł: 230
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Tak jak mówi viking zainteresuj się funkcją do walidacji wartości:
http://php.net/manual/en/filter.examples.validation.php

Oraz hashowaniem hasła:
password_hash
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Cytat(viking @ 26.07.2017, 04:35:40 ) *
Z kodu powyżej nie wynika żebyś miał problem z zamknięciem tylko ewidentnie słowo kluczowe. I zrób w końcu coś z tym sql injection. Wzorzec na weryfikację maila jest też jakimś przestarzałym badziewiem.


No proooszę cię wink.gif Toż tam brakuje ) na końcu a nie żadne keyword.
Go to the top of the page
+Quote Post
Dukov
post
Post #13





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----



Hej, znowu będę Wam zawracał głowę smile.gif

Mam pewien problem oczywiście z bazą, nie działa to zapytanie
  1. $stmt = $conn->prepare("INSERT INTO articles (articleID, userID, author, title, artciletext, authorIP, createDate, editDate ) VALUES ('$articleID','$userID', '$user', '$title', '$articletext', '$ip' , '$date', '$modify')");



A tu cały kod

  1. <?php
  2. function checkExists($title){
  3.  
  4. try{
  5. $conn = new PDO("mysql:host=localhost;dbname=wojtecki", 'root', '');
  6. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7. $stmt = $conn->prepare("SELECT count(*) FROM articles WHERE title = '$title'");
  8. $stmt->execute();
  9. $row = $stmt->fetch();
  10. $result = $row[0];
  11.  
  12.  
  13. $conn = null;
  14. if($result <> 1){
  15. return 1;
  16. }
  17. else
  18. {
  19. header("Location: ../admin.php?id=news&news=exist");
  20. return;
  21. }
  22. }
  23. catch(PDOException $e){
  24. $e ->getMessage();
  25. echo $e;
  26. }
  27. }
  28. function checkID(){
  29.  
  30.  
  31.  
  32. try {
  33.  
  34. $len = 20;
  35. $articleID = substr(sha1(rand(1,10000)),0,$len);
  36.  
  37. $conn = new PDO("mysql:host=localhost;dbname=wojtecki", "root", "");
  38. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  39. $stmt = $conn->prepare("SELECT count(*) FROM articles WHERE articleID = '$articleID'");
  40. $stmt->execute();
  41. $row = $stmt->fetch();
  42. $result = $row[0];
  43. $conn = null;
  44. if ($result != 1){
  45. return $articleID;
  46.  
  47. }
  48. else{
  49. checkID();
  50. }
  51.  
  52.  
  53. }
  54. catch(PDOException $e)
  55. {
  56. $e->getMessage();
  57.  
  58.  
  59. }
  60.  
  61. }
  62. function getAuthor(){
  63.  
  64. try {
  65.  
  66.  
  67. $userID = $_SESSION['log'];
  68.  
  69.  
  70. $conn = new PDO("mysql:host=localhost;dbname=wojtecki", "root", "");
  71. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  72. $stmt = $conn->prepare("SELECT login, lastiplogin FROM users WHERE userID = '$userID'");
  73. $stmt->execute();
  74. $row = $stmt->fetch();
  75. $author = $row['login'];
  76. $authorArray["login"] = $author;
  77. $authorArray["userID"] = $userID;
  78. $authorArray['lastiplogin'] = $row['lastiplogin'];
  79. return $authorArray;
  80. $conn = null;
  81. }
  82. catch(PDOException $e)
  83. {
  84. $e->getMessage();
  85.  
  86.  
  87. }
  88.  
  89. }
  90.  
  91. function insertNews($articletext,$title){
  92.  
  93. try {
  94. echo 'dupa';
  95. $date = date("H.i d-m-Y");
  96. $modify = date("H.i d-m-Y");
  97. $articleID = checkID();
  98. $author = getAuthor();
  99. $userID = $author['userID'];
  100. $user = $author['login'];
  101. $ip = $author['lastiplogin'];
  102. $conn = new PDO("mysql:host=localhost;dbname=wojtecki", 'root', '');
  103. $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  104. echo 'idartu'. $articleID;
  105. echo "<br>userID". $userID;
  106. echo "<br>autor". $user;
  107. echo "<br>title". $title;
  108. echo "<br>art". $articletext;
  109. echo "<br>ip". $ip;
  110. echo "<br>userID". $userID;
  111. $stmt = $conn->prepare("INSERT INTO articles (articleID, userID, author, title, artciletext, authorIP, createDate, editDate ) VALUES ('$articleID','$userID', '$user', '$title', '$articletext', '$ip' , '$date', '$modify')");
  112. $stmt->execute();
  113. $conn = null;
  114.  
  115. }
  116. catch(PDOException $e)
  117. {
  118. $e->getMessage();
  119. }
  120. }
  121. $title ='dupa';
  122. $articletext = 'fefefefefefefefwefefegrgewrrefwefegwecefa';
  123. $check = checkExists($title);
  124. if ($check == 1) {
  125. insertNews($articletext,$title);
  126. }
  127.  
  128. ?>



Wiem, że problem jest z zapytaniem, bo skrypt działa do miejsca, w którym wyświetlam zmienne, które mają być do niej wpisane, wrzuciłem je do echo, bo myślałem, że może któraś zmienna jest pusta albo z nimi jest problem, ale widzę, że wyświetla je, tak jakimi powinny być.

Ten post edytował Dukov 7.08.2017, 20:05:31
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Wydrukuj na ekran pełną treść zapytania (z podstawionymi zmiennymi) i wykonaj bezpośrednio na bazie (np. w PHPMyAdmin czy kliencie desktopowym).

P.S. Jeśli nie bindujesz wartości do zapytań, to prepare+execute jest zupełnie niepotrzebne, wystarczy exec. Ale oczywiście binduj, jeśli nie ufasz zawartości i pochodzeniu zmiennych.


--------------------
Go to the top of the page
+Quote Post
Dukov
post
Post #15





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 21.03.2017

Ostrzeżenie: (0%)
-----


AuthorIP miałem jako INT, a w adresie są kropki. Dzięki, na przyszłość będę wiedział, że jak coś wygląda ok, to żeby sprawdzić sam SQL, aczkolwiek możesz mi powiedzieć, czy dobrze robię, ze każda funkcja, która potrzebuje coś z bazy łączy się z bazą? Czy lepiej napisać osobną funkcje do łączenia z bazą? Albo łączyć się tylko w głównej funkcji i wywoływać w niej pozostałe?

EDIT
Działa.

Ten post edytował Dukov 7.08.2017, 20:38:18
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 05:31