Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySql] System prywatnych wiadomości
Forum PHP.pl > Forum > Przedszkole
Voquee
Witam

Chce zaimplementować na mojej stronie system prywatnych wiadomości lecz napotkałem błąd którego nie jestem w stanie rozwiązać... napewno jest coś nie tak z zapytaniem SQL tylko niebardzo rozumiem dlaczego. Tutaj jest kod funkcji której używam do znajdowania użytkowników:

  1. <?php
  2.  
  3. include('connect.php');
  4.  
  5. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  6.  
  7. if($polaczenie->connect_errno!=0)
  8. {
  9. echo "Error: ".$polaczenie->connect_errno;
  10. }
  11. else
  12. {
  13. function fetch_user_ids($user_names)
  14. {
  15. foreach($user_names as &$name){
  16. $name = mysqli_real_escape_string($name);
  17. }
  18. $result = mysqli_query("SELECT UzytkownikID, Login FROM uzytkownicy WHERE Login IN ('" . implode("', '", $user_names) . "')");
  19.  
  20. $names = array();
  21.  
  22.  
  23.  
  24. while(($row = mysqli_fetch_assoc($result)) !== false){
  25. $names[$row['Login']] = $row['UzytkownikID'];
  26. }
  27.  
  28. return $names;
  29. }
  30.  
  31. }
  32. ?>



A tak wygląda walidacja w której używam wyżej napisanej funkcji :

  1. <?php
  2.  
  3.  
  4. ?>
  5.  
  6.  
  7. <! DOCTYPE html>
  8. <html>
  9. <head>
  10. <title>On-move</title>
  11. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  12. <meta charset='UTF-8'>
  13. <link href ="css/bootstrap.min.css" rel = "stylesheet">
  14. <link href="css/styles.css" rel = "stylesheet">
  15. <link href="css/fontello.css" rel = "stylesheet">
  16. <link href="css/simple-sidebar.css" rel="stylesheet">
  17. <link rel="stylesheet" href="jquery.realperson.css">
  18.  
  19. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  20. <script src = "js/bootstrap.js"></script>
  21. <script src = "js/skrypty.js"></script>
  22. <script type="text/javascript" src="jquery.plugin.js"></script>
  23. <script type="text/javascript" src="jquery.realperson.js"></script>
  24. <link rel="shortcut icon" href="http://sstatic.net/stackoverflow/img/favicon.ico">
  25.  
  26. </head>
  27. <body>
  28. <?php include "NaglowekLogged.php" ?>
  29. <?php
  30. if (isset($_POST['do'], $_POST['temat'], $_POST['body'])){
  31. $errors = array();
  32.  
  33. if(empty($_POST['do'])){
  34. $errors[] = "Musisz dodac odbiorce";
  35. }else if (preg_match('#^[a-z, ]+$#i',$_POST['do']) == 0){
  36. $errors[] = 'Lista uzytkownikow nie wyglada prawidlowo';
  37. }else{
  38. $user_names = explode(',', $_POST['do']);
  39.  
  40. foreach ($user_names as &$name){
  41. $name = trim($name);
  42. }
  43. include "funkcja.php";
  44. $user_ids = fetch_user_ids($user_names);
  45. if(count($user_ids) !== count($user_names)){
  46. $errors[] = 'Uzytkownicy nie moga zostac znalezieni' . implode(', ', array_diff($user_names, array_keys($user_ids)));
  47. }
  48. }
  49.  
  50. if(empty($_POST['temat'])){
  51.  
  52. $errors[] = 'Temat nie moze byc pusty';
  53. }
  54.  
  55. if(empty($_POST['body'])){
  56.  
  57. $errors[] = 'Musisz cos napisac, nie można wysłać pustej wiadomości';
  58. }
  59.  
  60. if(empty($errors)){
  61.  
  62. }
  63. }
  64. if(isset($errors)){
  65. if(empty($errors)){
  66. echo '<div class ="alert alert-success">Twoja Wiadomosc została wysłana! <a href="Konwersacja.php">Wróc do skrzynki</a></div>';
  67. }else{
  68. foreach($errors as $error){
  69. echo '<div class="alert alert-danger">', $error, '</div>';
  70. }
  71. }
  72.  
  73. }
  74. ?>
  75. <div class = "container" style="padding: 80px; color: white;">
  76. <form class="form-horizontal" action="" method="post">
  77. <div class="col-md-4">
  78. <label for="do"> Do </label>
  79. <input type="text" class="form-control input-md" name="do" id="do" value="<?php if(isset($_POST['do'])) echo htmlentities($_POST['do']); ?>" />
  80.  
  81. <label for="temat"> Temat </label>
  82. <input type="text" class="form-control input-md" name="temat" id="temat" value="<?php if(isset($_POST['temat'])) echo htmlentities($_POST['temat']); ?>" />
  83. </br>
  84. </div>
  85. <div>
  86.  
  87. <textarea class="form-control" name="body" rows="20" cols="110" ><?php if(isset($_POST['body'])) echo htmlentities($_POST['body']); ?></textarea>
  88. </div>
  89. <div>
  90. </br>
  91. <input type="submit" value="Wyslij" />
  92. </div>
  93. </form>
  94. </div>
  95. </body>
  96. </html>




Gdy nie wypełnie żadnego pola to walidacja zadziała tak jak na screenie poniżej:




A gdy wszystkie pola zostaną wypełnione następuje coś takiego :




Cały czas wypisuje tą linijke z błędem jakby była zapętlona niemam pojęcia dlaczego... Z tego co wyczytałem błąd ten dotyczy złego zapytania SQL ale zmieniałem to zapytanie na takie które mi działają i problem nadal występuje.
Jeżeli ktoś ma pomysł jak to rozwiązać będę wdzięczny.
viking
Wielkość liter w nazwach kolumn ma znaczenie. Spróbuj `UzytkownikID`. I nie ukrywaj błędów przez @ tylko je poprawnie obsługuj smile.gif
Voquee
Tak wiem że ma znaczenie, próbowałem też z ' ' bez skutku... , okej nie będę już używał @. Sprawdzałem zapytanie wiele razy i nie widze tam ani literówki ani błędu z wielkością liter. Czy ten błąd naprawde może sie odwoływać tylko do zapytania? i dlaczego on jest tak dziwnie zapętlony że non stop sie tworzy ?
nospor
Wyswietl sobie to zapytanie:
$result = mysqli_query("SELECT UzytkownikID, Login FROM uzytkownicy WHERE Login IN ('" . implode("', '", $user_names) . "')");
czyli
echo "SELECT UzytkownikID, Login FROM uzytkownicy WHERE Login IN ('" . implode("', '", $user_names) . "')";
To moze sam zobaczysz blad.
A jak to nie pomoze, to dodaj do tego jeszcze wysweitlenie bledu bazy
Voquee
Zrobiłem tak jak napisałeś w MySql zapytanie dobrze działa i zwraca wynik natomiast w php zapytanie nadal jest źle. Udało mi się też pozbyć zapętlenia błędu. Screeny:




Mysql:

nospor
Prosilem tez, bys wyswietlil sobie blad zapytania. On ci powie wszystko...
Voquee
Nie wiem czy dobrze zrozumiałem mogę to zrobić w ten sposób?

http://webmade.org/kursy-online/analiza-bl...-kurs-mysql.php

EDIT:

Dobra właśnie udało mi sie dojść do sedna problemu połączenie miało być zdefiniowane w funkcji a było nad nią dlatego zapytanie nie mogło nie mogło się wykonać tak wygląda teraz kod funkcji :

  1. <?php
  2.  
  3. function fetch_user_ids($user_names)
  4. {
  5. include('connect.php');
  6.  
  7. $polaczenie = @new mysqli($host, $db_user, $db_password, $db_name);
  8.  
  9. if($polaczenie->connect_errno!=0)
  10. {
  11. echo "Error: ".$polaczenie->connect_errno;
  12. }
  13. else
  14. {
  15. $query = "SELECT UzytkownikID , Login FROM uzytkownicy WHERE Login LIKE ('" . implode("', '", $user_names) . "')";
  16. $result = mysqli_query($polaczenie, $query);
  17.  
  18. echo mysqli_error($polaczenie);
  19.  
  20. $names = array();
  21.  
  22.  
  23.  
  24. while($row = mysqli_fetch_assoc($result)){
  25. $names[$row['Login']] = $row['UzytkownikID'];
  26. }
  27.  
  28. return $names;
  29. }
  30.  
  31. }
  32. ?>






Zmyliło mnie to że za wszelką cene szukałem błędu w zapytaniu a tu po prostu połączenie było zdefiniowane w złym miejscu... Tak czy siak dziękuje za pomoc!
Pozdrawiam
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.