За последние 24 часа нас посетили 17740 программистов и 1619 роботов. Сейчас ищут 1855 программистов ...

Неправильно работают запросы

Тема в разделе "PHP для новичков", создана пользователем maestro0728, 7 фев 2016.

  1. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Здравствуйте. Есть два запроса, проблема заключается в следующем. При авторизации пользователя с этим запросом, пользователь не авторизовывается. Система пишет неправильный логин или пароль.

    $query =mysql_query("SELECT * FROM Client, Address WHERE login='".$username."' AND pass='".$password."'");

    Но когда я ставлю такой запрос все хорошо работает:

    $query =mysql_query("SELECT * FROM Client JOIN Address JOIN Orders ON (Address.addressId = Orders.addressId AND Client.id = Orders.clientId) WHERE login='".$username."' AND pass='".$password."'");

    Но есть одно но, в первом запросе если я заполню все ячейки в ручную через MySQL Client в таблице Address, пользователя авторизовывает и когда уже авторизованный пользователь зашёл, он видет неправильный свой адрес.
    Помогите разобраться, уже больше недели немогу найти проблему. Авторизация по средствам сессии.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    когда он УЖЕ зашел - больше не надо проверять его логин пароль. далее система должна узнавать его по другому признаку. по сессии и идентификатору пользователя например.
    второе что непонятно - зачем при проверке логина-пароля цепляется таблица адресов?
     
  3. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Неправильно ты понял, У меня выполняется один запрос, то есть я ставлю первый запрос, сохраняю файл. Захожу на сайт ввожу логин пароль, пишет неправильный Логин или пароль. Заполняю таблицу Адрес. Пользователя авторизовывает, но неправильно показывает адрес. У всех пользователей показывается одинаковый адрес.
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    потому что теорию реляционных баз данных надо было сначала выучить. у тебя идет умножение таблиц. когда во второй нет строк - в результирующей тоже не будет строк, сколько бы не было в первой. вот и не логинит. а потом ты вбиваешь любой адрес и он по теории реляционных баз данных будет при умножении - у каждого кортежа первой таблицы. а вбей еще один - у каждого кортежа первой таблицы будет по два из второй. и так далее.
     
  5. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Также талица ордер пока незаполнена пользователя тоже не авторизовывает с первым запросом.

    Добавлено спустя 1 минуту 52 секунды:
    Я так понял, все давят на теорию, а вот помочь человеку примером всем слабо. Спасибо.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    магия какая-то. казалось бы как таблица заказов и таблица адресов вообще могут участвовать в авторизации пользователя? ну ладно, допустим адресная таблица при рбаке по локации может проверку производить. а ордеры?
    покажи полностью структуру таблиц и какие еще у тебя там запросы есть. в этих я логики не увидел - в первом умножение, которое даст много шума, а во втором - жесткие соединения, дающие ноль строк при пустых цепляемых таблицах. и логин-пароль опять же во втором запросе фигурирует.

    Добавлено спустя 3 минуты 36 секунд:
    ой какая обидулька прилетела. а мы тебе чем-то обязаны? если ты теорию не знаешь то какой толк в тебя писать готовыми запросами? ты их все равно не поймешь. или тебе нужна даунская халявочка которую ты скопипастишь и она у тебя не заведется и ты с горящим пердаком прилетишь тут на меня ушат говна выливать? иди мануалы штрудируй. и по алгоритмизации тоже подучи. вот эта проверка логина-пароля уже после того как человек залогинен - только пожалуй от адептов попова можно такой трик ожидать. не хочешь быть таким - включай мозги.
     
  7. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Я человек без обид, просто прошу реальной помощи, а не советы. Спасибо за понимание, а тебе совет если человек просит помощи то нужно просто помочь разобраться.

    Добавлено спустя 1 минуту 39 секунд:
    Код (Text):
    1. <?php
    2. session_start();
    3. ?>
    4.  
    5. <?php require_once("includes/connection.php"); ?>
    6. <?php
    7. include("includes/header.php");
    8. include("includes/functions.php"); ?>
    9.  
    10. <?php
    11.  
    12. if(isset($_SESSION["session_username"])){
    13. // echo "Session is set"; // for testing purposes
    14. header("Location: index.php");
    15. }
    16.  
    17. if(isset($_POST["login"])){
    18.  
    19. if(!empty($_POST['username']) && !empty($_POST['password'])) {
    20.     $username=$_POST['username'];
    21.     $password=$_POST['password'];
    22.  
    23.     // $query =mysql_query("SELECT * FROM Client, Address WHERE login='".$username."' AND pass='".$password."'");
    24.     $query =mysql_query("SELECT * FROM Client JOIN Address JOIN Orders ON (Address.addressId = Orders.addressId AND Client.id = Orders.clientId) WHERE login='".$username."' AND pass='".$password."'");
    25.  
    26.     $numrows=mysql_num_rows($query);
    27.     if($numrows!=0)
    28.  
    29.     {
    30.     while($row=mysql_fetch_assoc($query))
    31.     {
    32.     $dbusername=$row['login'];
    33.     $dbpassword=$row['pass'];
    34.     $dbid=$row['id'];
    35.     $dbfio=$row['fio'];
    36.     $dbtel=$row['tel'];
    37.     $dbaddress=$row['street'] . " " . $row['house'] . ", кв. " . $row['apartament'];
    38.     $addressid=$row['addressId'];
    39.     $code=$_POST['code'];
    40.     }
    41.     if($username == $dbusername && $password == $dbpassword)
    42.  
    43.     {
    44.  
    45.     $_SESSION['id']=$dbid;
    46.     $_SESSION['session_username']=$username;
    47.     $_SESSION['fio']=$dbfio;
    48.     $_SESSION['phone']=$dbtel;
    49.     $_SESSION['address']=$dbaddress;
    50.     $_SESSION['addressId']=$addressid;
    51.    
    52.  
    53.     /* Redirect browser */
    54.     header("Location: index.php");
    55.     }
    56.     } else {
    57.  
    58.  $message =  "Invalid username or password!";
    59.     }
    60.  
    61. } else {
    62.     $message = "All fields are required!";
    63. }
    64. }
    65. ?>
    66.  
    67.  
    68.  
    69.  
    70. <div class="container mlogin">
    71.     <div id="login">
    72.         <h1>Авторизация</h1>
    73.             <form name="loginform" id="loginform" action="" method="POST">
    74.                 <p>
    75.                     <label for="user_login">Логин<br />
    76.                     <input type="text" name="username" id="username" class="input" value="" size="20" /></label>
    77.                 </p>
    78.                 <p>
    79.                     <label for="user_pass">Пароль<br />
    80.                     <input type="password" name="password" id="password" class="input" value="" size="20" /></label>
    81.                 </p>
    82.                 <p class="submit">
    83.                     <input type="submit" name="login" class="button" value="Вход" />
    84.                 </p>
    85.                 <p class="regtext">Еще нет учётной записи?
    86.                     <a href="register.php" >Регистрация</a>!
    87.                 </p>
    88.             </form>
    89.     </div>
    90. </div>
    91.  
    92.     <?php include("includes/footer.php"); ?>
    93.    
    94.     <?php if (!empty($message)) {echo "<p class=\"error\">" . "MESSAGE: ". $message . "</p>";} ?>
    Добавлено спустя 1 минуту 18 секунд:
    Файл index.php

    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4.  
    5.     echo "<pre>";
    6.     print_r($_SESSION);
    7.     echo "</pre>";
    8.    
    9. if(!isset($_SESSION["session_username"])) {
    10.     header("location:login.php");
    11. } else {
    12. ?>
    13.  
    14.  
    15. <?php
    16.  
    17. include("includes/header.php");
    18. include("includes/connection.php");
    19. include("includes/functions.php");
    20.  
    21. ?>
    22.  
    23. <div id="welcome">  <a href="logout.php">Выход</a>
    24.     <h2>Добро пожаловать, <span><?php echo $_SESSION['fio'];?>! </span></h2>
    25. <div style="padding: 0 20px; border: 1px solid black; background-color: whitesmoke;">
    26. <h4>Мой домашний адрес:
    27. <span style="font: bold 16px Arial;"><?php echo $_SESSION['address'];?></span>
    28. </h4>
    29. <h4>Контактный телефон:
    30. <span style="font: bold 16px Arial;"><?php echo $_SESSION['phone'];?></span>
    31. </h4>
    32. <?php
    33. if(!isset($_SESSION["vi1zov"])) {
    34. ?>
    35.  
    36. <!-------------------------------------------------------------------------------->
    37. <div class="authform" style="border-radius: 15px 15px 0 0; background-color: white; float: right; margin: 10px -20px 0 20px; padding: 20px 10px; width: 600px; border: 1px solid black;">
    38. <form action="vizov.php" method="POST">
    39.     <p>
    40.     <label>Код заявки</label>
    41.     <input name="code" value="<?php echo generate_password(intval("3")) . "-" . generate_password(intval("5")); ?>" />
    42.     </p>
    43.     <p>
    44.     <label title="">Удобное время вызова</label>
    45.     <input type="datetime" name="dataOrder" placeholder="00-00-0000" />
    46.     </p>
    47.     <p><label title="">Опишите вашу неисправность</label></p>
    48.     <textarea name="comment" style="width: 100%; height: 150px;"></textarea>
    49.     <p class="submit">
    50.         <input type="submit" name="vizov" class="button" />
    51.     </p>
    52.    
    53. </form>
    54. </div>
    55. <!-------------------------------------------------------------------------------->
    56. <?php
    57. } else {
    58. ?>
    59.  
    60. <?php } ?>
    61. </div>
    62. <?php
    63.  
    64.  // выбираем все значения из таблицы "Contacts"
    65. $query = mysql_query("SELECT * FROM Client JOIN Address JOIN Orders ON (Address.addressId = Orders.addressId AND Client.id = Orders.clientId) WHERE Client.id = '".intval($_SESSION['id'])."' ")
    66.     or die(mysql_error());
    67.  
    68. // выводим на страницу сайта заголовки HTML-таблицы
    69. ?>
    70.  
    71.  
    72.  
    73. <table>
    74. <thead>
    75. <tr>
    76. <th>#</th>
    77. <th>Артикул</th>
    78. <th>Дата вызова</th>
    79. <!--
    80. <th>ФИО</th>
    81. <th>Телефон</th>
    82. <th>Домашний адресс</th>
    83. -->
    84. <th>Заявленная неисправность</th>
    85. <th>Выполненные работы</th>
    86. <th>Стоимость работы</th>
    87. <th>Дата оплаты</th>
    88. <th>Дата выдачи</th>
    89. </tr>
    90. </thead>
    91.  
    92. <tbody>
    93.  
    94. <?php
    95. $id = 1;
    96.  // выводим в HTML-таблицу все данные клиентов из таблицы MySQL
    97.  while($data = mysql_fetch_array($query))
    98.  {
    99.     if($data['id'] == '0' )
    100.     {
    101.         $id++;
    102.         /*<?php echo generate_password(intval("3")) . "-" . generate_password(intval("5")); ?>*/
    103.     }
    104.  ?>
    105.  
    106.      <tr>
    107.      <td><?=$id++?></td>
    108.      <td><?=$data['code']?></td>
    109.      <td><?=$data['dataOrder']?></td>
    110. <!--
    111.      <td><?=$data['fio']?></td>
    112.      <td><?=$_SESSION['tel']?></td>
    113.      <td class="street"><?=$data['street'] . " " . $data['house'] . ", кв. " . $data['apartament']?></td>
    114. -->
    115.      <td><?=$data['fault']?></td>
    116.      <td><?=$data['defect']?></td>
    117.      <td class="pay"><?=$data['pay']?>.00 грн.</td>
    118.      <td><?=$data['dataPay']?></td>
    119.      <td><?=$data['dataEnd']?></td>
    120.      </tr>
    121.  <?php
    122.  
    123.  }
    124.  ?>
    125.     </tbody>
    126.     </table>
    127.  
    128. </div>
    129.  
    130. <?php include("includes/footer.php"); ?>
    131.    
    132.  
    133. <?php
    134. }
    135. ?>
    Добавлено спустя 33 секунды:
    Прошу за код не ругать.
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а советы это не помощь? ты нигде явно не указал что тебе нужны готовые коды. ты попросил помощи. я для начала указал на самые странные моменты в том что увидел. а ты вместо того чтоб исправить это говно - начал на слабо разводить. странный ты.
     
  9. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    maestro0728 не, ну реально, Ganzal хотел как лучший вариант тебе предложить...
    давай для начало тогда начнем с другого пути - раз знания на столь малы...
    смотри
    тебе не кажется довольно странным запросом?? причем тут ваще 2 таблицы, и в какой из них есть поля login и pass ??? ((:)
     
  10. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    в запросе я єту строку коментирую:
    Добавлено спустя 1 минуту 2 секунды:
    Запрос два вроде работает, но хотелось бы сделать все первым запросом, может что то нужно дописать?

    Добавлено спустя 2 минуты:
    То есть Пользователь зарегистрировался, у него нет заявок, он должен авторизоваться и видеть пустую таблицу, но пользователя без заявок не авторизовывает.

    Добавлено спустя 33 секунды:
    В этом то вся и проблема, со вторым и первым запросом.
     
  11. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    по моему - не логично как то... Мож я че то не понимаю в замысле... (:)
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    конечно не авторизовывает. потому что у него нет заявок. вот этот код за это отвечает:
    mysql_query("SELECT * FROM Client JOIN Address JOIN Orders ON (Address.addressId = Orders.addressId AND Client.id = Orders.clientId) WHERE login='".$username."' AND pass='".$password."'");

    ты не очень-то понимаешь что делаешь. давай еще раз с самого начала про вот этот фрагмент. ДЛЯ ЗАЧЕМ ТЫ ВЫДЕРГИВАЕШЬ АДРЕСА-ЗАКАЗЫ ПРИ ПРОВЕРКЕ ЛОГИНА-ПАРОЛЯ???
     
  13. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Я понял так, что нужно разделить запроса на две части.
    1 запрос авторизовывает пользователя и должен показывать информацию о пользователе (его контактные данные).
    2 запрос должен выводить в таблицу заявки пользователя.
    Вот только как это сделать не могу разобраться. Буду очень благодарен за помощь.
     
  14. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    уже лучше (:)
    теперь осталось нормально реализовать авторизацию с сессией, а потом уже вывод в личном кабинете ((:)
     
  15. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    пожалуйста, не ожидай здесь увидеть готовый код решения твоей задачи. это раздел для новичков и тут помогают самостоятельно решить проблему тем кто готов учиться и работать головой.

    у тебя уже фактически есть код авторизации, разве не так? выкинь из него ненужное и этот пункт готов. проверил логин-пароль, записал сессию, перенаправил на личный кабинет, показал что там тебе нужно.

    кстати что у нас там со структурой БД?
     
  16. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    Таблица ордер это связвающая таблица для клиентов и адресов, также в не указана дата и время вызова, статус, дата завершения.
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    связи?
     
  18. maestro0728

    maestro0728 Новичок

    С нами с:
    28 дек 2015
    Сообщения:
    27
    Симпатии:
    0
    А что связи для это новое?
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    этот вопрос на каком языке?
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    лять, не надо трогать адрес при проверке пароля! И, кстати, не надо проверять пароль всякий раз при открытии странички.

    "Помочь примером" это будет медвежья услуга. Ты потому и заблудился в трех деревьях, что не пытаешся понять, а только копируешь чужие слова. Дальше будет только хуже.