Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MySQL][PHP]Pobieranie danych z mysql

Napisany przez: Kedi 2.09.2019, 16:45:47

Witam,
Chciałem pobrać informację z bazy danych czy wartość jest równa 0 lub 1

Jeśli mamy 0


  1. if ($rezultat = $conn->query(
  2. http://www.php.net/sprintf("SELECT postac FROM users WHERE login='%s'",
  3. mysqli_real_escape_string($conn,$username))))
  4. {
  5. $postac = $rezultat->num_rows;
  6. if($postac == 0)
  7. {
  8. http://www.php.net/header('Location: index.php?page=stworz');
  9. }


zaś jeśli zwraca nam 1 to

  1. else{
  2. $_SESSION['loggedin'] = $username;
  3. http://www.php.net/header('Location: index.php?page=gra');
  4. }


Ale cały ładuje mi się else, mimo, że w db w tabeli users oraz w kolumnie postac jest sztywno ustawione 0.

Jakieś sugestie ?

Napisany przez: nospor 2.09.2019, 16:53:30

Mowisz o tym
$postac = $rezultat->num_rows;
?
To sprawdz co to zawiera

$postac = $rezultat->num_rows;
var_dump($postac);
exit;

No chyba ze ELSE podpiales pod to
($rezultat = $conn->query(
? No to wtedy zapytanie zwraca blad. No ale ciezko powiedziec jak zamiast calego kodu podajesz wycinki i zgaduj zgadula....

Napisany przez: Kedi 2.09.2019, 16:55:13

Cytat(nospor @ 2.09.2019, 17:53:30 ) *
Mowisz o tym
$postac = $rezultat->num_rows;
?
To sprawdz co to zawiera

$postac = $rezultat->num_rows;
var_dump($postac);
exit;

No chyba ze ELSE podpiales pod to
($rezultat = $conn->query(
? No to wtedy zapytanie zwraca blad. No ale ciezko powiedziec jak zamiast calego kodu podajesz wycinki i zgaduj zgadula....



D:\wamp\www\strony\gra.php:61:int 1

  1. <?php
  2. http://www.php.net/global $tytul;
  3. http://www.php.net/global $separator;
  4. http://www.php.net/global $description;
  5.  
  6. ?>
  7.  
  8. <html>
  9. <head>
  10.  
  11. <title><?php http://www.php.net/echo $tytul.$separator.$description;?> </title>
  12. <script src="design/js/script.js"></script>
  13. <link href="https://fonts.googleapis.com/css?family=EB+Garamond&display=swap" rel="stylesheet">
  14. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  15. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  16. <link href="design/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
  17. <link rel="stylesheet" type="text/css" href="../design/css/style.css">
  18. <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  19. <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
  20. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
  21. </head>
  22. <body>
  23.  
  24. <div class="wrapper">
  25. <?php require_once("temp/header.php"); ?>
  26. <div class="layer">
  27. <div class="menu">
  28. <?php require_once("temp/menu.php"); ?>
  29. </div>
  30. </div>
  31. <div class="layer">
  32. <div class="content">
  33. <fieldset>
  34. <center><legend>Logowanie</legend></center>
  35. <form role="form" method="post">
  36. <div class="form-group">
  37. <label for="username">Nazwa Postaci:</label>
  38. <input type="text" class="form-control" id="username" name="login" required />
  39. </div>
  40.  
  41. <div class="form-group">
  42. <label for="password">Wprowadź hasło:</label>
  43. <input type="password" class="form-control" id="password" name="haslo" required />
  44. </div>
  45. <button type="submit" class="btn btn-outline-success" name="send">Zaloguj się</button>
  46. </form>
  47.  
  48. <?php
  49.  
  50. function inject_checker ($conn, $field){
  51. return (http://www.php.net/htmlentities(http://www.php.net/trim(mysqli_real_escape_string($conn, $field))));
  52. }
  53.  
  54. $dbserver = "localhost";
  55. $dbusername = "root";
  56. $dbpassword = "";
  57. $db = "game";
  58.  
  59. $conn = new mysqli($dbserver, $dbusername, $dbpassword, $db);
  60. $conn -> query ('SET NAMES utf8');
  61. $conn -> query ('SET CHARACTER_SET utf8_unicode_ci');
  62.  
  63. //Sprawdza Połączenie
  64. if ($conn->connect_error)
  65. {
  66. http://www.php.net/die("Połączenie nie udane z bazą dany.".$conn->connect_error);
  67. }
  68.  
  69. if(http://www.php.net/isset($_POST['send'])){
  70. $username = inject_checker($conn, http://www.php.net/strtolower($_POST['login']));
  71. $password = inject_checker($conn, $_POST['haslo']);
  72. $haslo_hash = password_hash($password, PASSWORD_DEFAULT);
  73.  
  74.  
  75.  
  76. if ($rezultat = $conn->query(
  77. http://www.php.net/sprintf("SELECT * FROM users WHERE login='%s'",
  78. mysqli_real_escape_string($conn,$username))))
  79. {
  80. $ilu_userow = $rezultat->num_rows;
  81. if($ilu_userow == 1)
  82. {
  83. $wiersz = $rezultat->fetch_assoc();
  84.  
  85. if (password_verify($password, $wiersz['haslo']))
  86. {
  87.  
  88. if ($rezultat = $conn->query(
  89. http://www.php.net/sprintf("SELECT postac FROM users WHERE login='%s'",
  90. mysqli_real_escape_string($conn,$username))))
  91. {
  92. $postac = $rezultat->num_rows;
  93. if($postac == 0)
  94. {
  95. http://www.php.net/header('Location: index.php?page=stworz');
  96. }else{
  97.  
  98. $_SESSION['loggedin'] = $username;
  99. http://www.php.net/header('Location: index.php?page=gra');
  100. }
  101. }
  102. else
  103. {
  104. ?> <div class="alert alert-danger" role="alert">
  105. <center>Podane dane są błędne!</center>
  106. </div> <?php
  107. }
  108.  
  109. }
  110. }
  111. }
  112. }
  113.  
  114.  
  115. ?>
  116.  
  117. </fieldset>
  118. </div>
  119. </div>
  120. <?php require_once("temp/footer.php"); ?>
  121. </div>
  122. </body>
  123. </html>

Napisany przez: nospor 2.09.2019, 16:59:49

Zrobiles var_dump jak prosilem?

Napisany przez: Kedi 2.09.2019, 17:38:50

Cytat(nospor @ 2.09.2019, 17:59:49 ) *
Zrobiles var_dump jak prosilem?


Tak, napisałem co zwraca linię nad kodem. ( inna nazwa ponieważ skopiowałem tylko zawartość login do innego php.)

Nie ważnę jaką wartość ustawię w db zawsze zwraca 1

Napisany przez: viking 2.09.2019, 18:45:08

A sprawdziłeś w dokumentacji co zawiera num_rows? Bo na pewno nie jest to pole z bazy. I czemu tak mieszasz kod obiektowy ze strukturalnym? Zamiast mysqli_real_escape_string użyj bindowania.

Napisany przez: dublinka 2.09.2019, 18:50:51

po co 2 razy to ?

  1. http://www.php.net/sprintf("SELECT postac FROM users WHERE login='%s'",


pomyliles where z like

Napisany przez: nospor 2.09.2019, 18:53:35

Cytat
pomyliles where z like
Oj chyba tobie sie cos teraz pomylilo wink.gif

Napisany przez: dublinka 2.09.2019, 20:37:24

Cytat(nospor @ 2.09.2019, 18:53:35 ) *
Oj chyba tobie sie cos teraz pomylilo wink.gif

a no tak smile.gif sprintf. sorki.

  1. <?php
  2. function query($host, $user, $pwd, $database, $table)
  3. {
  4. $mysqli = new mysqli($host, $user, $pwd, $database);
  5. if($mysqli->connect_error) {
  6. http://www.php.net/exit('Błąd polączenia z MySQL');
  7. }
  8.  
  9. $mysqli->set_charset("utf8");
  10.  
  11. $loginf = 'qqq2'; // login z forma
  12. $haslof = 'qwerty2'; // haslo z forma
  13.  
  14. $stmt = $mysqli->prepare("SELECT id, login, haslo, postac FROM $table WHERE login = ?");
  15. $stmt->bind_param("s", $loginf);
  16. $stmt->execute();
  17. $stmt->store_result();
  18. $stmt->bind_result($id, $login, $haslo, $postac);
  19. $stmt->fetch();
  20.  
  21. if($stmt->num_rows === 1)
  22. {
  23.  
  24. if (password_verify($haslof, $haslo))
  25. {
  26. if($postac == 0)
  27. {
  28. http://www.php.net/echo 'Postac ma wartosc: ' . $postac;
  29. http://www.php.net/exit;
  30.  
  31. http://www.php.net/header('Location: index.php?page=stworz');
  32. }else{
  33.  
  34. http://www.php.net/echo 'Postac ma wartosc: ' . $postac;
  35. http://www.php.net/exit;
  36.  
  37. $_SESSION['loggedin'] = $loginf;
  38. http://www.php.net/header('Location: index.php?page=gra');
  39. }
  40.  
  41. } else {
  42.  
  43. http://www.php.net/exit('Błędne hasło');
  44.  
  45. }
  46.  
  47. } else {
  48.  
  49. http://www.php.net/echo $stmt->num_rows . ' wyników';
  50.  
  51. }
  52.  
  53. $stmt->close();
  54. }
  55. query('localhost', 'root', 'haslo', 'nazwabazy', 'nazwatabeli');
  56.  
  57.  
  58. ?>

Napisany przez: nospor 3.09.2019, 09:08:00

@dublinka jaki sens ma twoja funkcja? To jest jakis groch z kapusta. Czemu tam sa przekazywane wszystkie dane do polaczenia? Czemu ta funkcja tworzy nowe polaczenie za kazdym razem jak jest wywolywana?
Czemu tam jest jako parametr nazwa tabeli? A jak sie kod rozrosnie w niej i bede zapytania do dwoch tabel? Kolejny parametr dodasz?
Rozumiem chec pomocy ale nie ucz ludzi pisac tak nieoptymalnych rzeczy.

Napisany przez: dublinka 4.09.2019, 06:40:36

To jest tylko przyklad jak mozna zrobic to na czym koledze zalezy.
Jesli ktos chcialby bardzo zeby to przerabiac dla dalszego kodu to oczywiscie trzeba to pozmieniac. Parametry podalem ot tak jak i nazwe tabeli.
Zalozeniem bylo pokazanie jak dobrac sie do rekordu POSTAC i to bylo najwazniejsze. Reszta to ogolny zarys.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)