Здравствуйте. Есть два запроса, проблема заключается в следующем. При авторизации пользователя с этим запросом, пользователь не авторизовывается. Система пишет неправильный логин или пароль. $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, пользователя авторизовывает и когда уже авторизованный пользователь зашёл, он видет неправильный свой адрес. Помогите разобраться, уже больше недели немогу найти проблему. Авторизация по средствам сессии.
когда он УЖЕ зашел - больше не надо проверять его логин пароль. далее система должна узнавать его по другому признаку. по сессии и идентификатору пользователя например. второе что непонятно - зачем при проверке логина-пароля цепляется таблица адресов?
Неправильно ты понял, У меня выполняется один запрос, то есть я ставлю первый запрос, сохраняю файл. Захожу на сайт ввожу логин пароль, пишет неправильный Логин или пароль. Заполняю таблицу Адрес. Пользователя авторизовывает, но неправильно показывает адрес. У всех пользователей показывается одинаковый адрес.
потому что теорию реляционных баз данных надо было сначала выучить. у тебя идет умножение таблиц. когда во второй нет строк - в результирующей тоже не будет строк, сколько бы не было в первой. вот и не логинит. а потом ты вбиваешь любой адрес и он по теории реляционных баз данных будет при умножении - у каждого кортежа первой таблицы. а вбей еще один - у каждого кортежа первой таблицы будет по два из второй. и так далее.
Также талица ордер пока незаполнена пользователя тоже не авторизовывает с первым запросом. Добавлено спустя 1 минуту 52 секунды: Я так понял, все давят на теорию, а вот помочь человеку примером всем слабо. Спасибо.
магия какая-то. казалось бы как таблица заказов и таблица адресов вообще могут участвовать в авторизации пользователя? ну ладно, допустим адресная таблица при рбаке по локации может проверку производить. а ордеры? покажи полностью структуру таблиц и какие еще у тебя там запросы есть. в этих я логики не увидел - в первом умножение, которое даст много шума, а во втором - жесткие соединения, дающие ноль строк при пустых цепляемых таблицах. и логин-пароль опять же во втором запросе фигурирует. Добавлено спустя 3 минуты 36 секунд: ой какая обидулька прилетела. а мы тебе чем-то обязаны? если ты теорию не знаешь то какой толк в тебя писать готовыми запросами? ты их все равно не поймешь. или тебе нужна даунская халявочка которую ты скопипастишь и она у тебя не заведется и ты с горящим пердаком прилетишь тут на меня ушат говна выливать? иди мануалы штрудируй. и по алгоритмизации тоже подучи. вот эта проверка логина-пароля уже после того как человек залогинен - только пожалуй от адептов попова можно такой трик ожидать. не хочешь быть таким - включай мозги.
Я человек без обид, просто прошу реальной помощи, а не советы. Спасибо за понимание, а тебе совет если человек просит помощи то нужно просто помочь разобраться. Добавлено спустя 1 минуту 39 секунд: Код (Text): <?php session_start(); ?> <?php require_once("includes/connection.php"); ?> <?php include("includes/header.php"); include("includes/functions.php"); ?> <?php if(isset($_SESSION["session_username"])){ // echo "Session is set"; // for testing purposes header("Location: index.php"); } if(isset($_POST["login"])){ if(!empty($_POST['username']) && !empty($_POST['password'])) { $username=$_POST['username']; $password=$_POST['password']; // $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."'"); $numrows=mysql_num_rows($query); if($numrows!=0) { while($row=mysql_fetch_assoc($query)) { $dbusername=$row['login']; $dbpassword=$row['pass']; $dbid=$row['id']; $dbfio=$row['fio']; $dbtel=$row['tel']; $dbaddress=$row['street'] . " " . $row['house'] . ", кв. " . $row['apartament']; $addressid=$row['addressId']; $code=$_POST['code']; } if($username == $dbusername && $password == $dbpassword) { $_SESSION['id']=$dbid; $_SESSION['session_username']=$username; $_SESSION['fio']=$dbfio; $_SESSION['phone']=$dbtel; $_SESSION['address']=$dbaddress; $_SESSION['addressId']=$addressid; /* Redirect browser */ header("Location: index.php"); } } else { $message = "Invalid username or password!"; } } else { $message = "All fields are required!"; } } ?> <div class="container mlogin"> <div id="login"> <h1>Авторизация</h1> <form name="loginform" id="loginform" action="" method="POST"> <p> <label for="user_login">Логин<br /> <input type="text" name="username" id="username" class="input" value="" size="20" /></label> </p> <p> <label for="user_pass">Пароль<br /> <input type="password" name="password" id="password" class="input" value="" size="20" /></label> </p> <p class="submit"> <input type="submit" name="login" class="button" value="Вход" /> </p> <p class="regtext">Еще нет учётной записи? <a href="register.php" >Регистрация</a>! </p> </form> </div> </div> <?php include("includes/footer.php"); ?> <?php if (!empty($message)) {echo "<p class=\"error\">" . "MESSAGE: ". $message . "</p>";} ?> Добавлено спустя 1 минуту 18 секунд: Файл index.php Код (Text): <?php session_start(); echo "<pre>"; print_r($_SESSION); echo "</pre>"; if(!isset($_SESSION["session_username"])) { header("location:login.php"); } else { ?> <?php include("includes/header.php"); include("includes/connection.php"); include("includes/functions.php"); ?> <div id="welcome"> <a href="logout.php">Выход</a> <h2>Добро пожаловать, <span><?php echo $_SESSION['fio'];?>! </span></h2> <div style="padding: 0 20px; border: 1px solid black; background-color: whitesmoke;"> <h4>Мой домашний адрес: <span style="font: bold 16px Arial;"><?php echo $_SESSION['address'];?></span> </h4> <h4>Контактный телефон: <span style="font: bold 16px Arial;"><?php echo $_SESSION['phone'];?></span> </h4> <?php if(!isset($_SESSION["vi1zov"])) { ?> <!--------------------------------------------------------------------------------> <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;"> <form action="vizov.php" method="POST"> <p> <label>Код заявки</label> <input name="code" value="<?php echo generate_password(intval("3")) . "-" . generate_password(intval("5")); ?>" /> </p> <p> <label title="">Удобное время вызова</label> <input type="datetime" name="dataOrder" placeholder="00-00-0000" /> </p> <p><label title="">Опишите вашу неисправность</label></p> <textarea name="comment" style="width: 100%; height: 150px;"></textarea> <p class="submit"> <input type="submit" name="vizov" class="button" /> </p> </form> </div> <!--------------------------------------------------------------------------------> <?php } else { ?> <?php } ?> </div> <?php // выбираем все значения из таблицы "Contacts" $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'])."' ") or die(mysql_error()); // выводим на страницу сайта заголовки HTML-таблицы ?> <table> <thead> <tr> <th>#</th> <th>Артикул</th> <th>Дата вызова</th> <!-- <th>ФИО</th> <th>Телефон</th> <th>Домашний адресс</th> --> <th>Заявленная неисправность</th> <th>Выполненные работы</th> <th>Стоимость работы</th> <th>Дата оплаты</th> <th>Дата выдачи</th> </tr> </thead> <tbody> <?php $id = 1; // выводим в HTML-таблицу все данные клиентов из таблицы MySQL while($data = mysql_fetch_array($query)) { if($data['id'] == '0' ) { $id++; /*<?php echo generate_password(intval("3")) . "-" . generate_password(intval("5")); ?>*/ } ?> <tr> <td><?=$id++?></td> <td><?=$data['code']?></td> <td><?=$data['dataOrder']?></td> <!-- <td><?=$data['fio']?></td> <td><?=$_SESSION['tel']?></td> <td class="street"><?=$data['street'] . " " . $data['house'] . ", кв. " . $data['apartament']?></td> --> <td><?=$data['fault']?></td> <td><?=$data['defect']?></td> <td class="pay"><?=$data['pay']?>.00 грн.</td> <td><?=$data['dataPay']?></td> <td><?=$data['dataEnd']?></td> </tr> <?php } ?> </tbody> </table> </div> <?php include("includes/footer.php"); ?> <?php } ?> Добавлено спустя 33 секунды: Прошу за код не ругать.
а советы это не помощь? ты нигде явно не указал что тебе нужны готовые коды. ты попросил помощи. я для начала указал на самые странные моменты в том что увидел. а ты вместо того чтоб исправить это говно - начал на слабо разводить. странный ты.
maestro0728 не, ну реально, Ganzal хотел как лучший вариант тебе предложить... давай для начало тогда начнем с другого пути - раз знания на столь малы... смотри тебе не кажется довольно странным запросом?? причем тут ваще 2 таблицы, и в какой из них есть поля login и pass ??? ((
в запросе я єту строку коментирую: Добавлено спустя 1 минуту 2 секунды: Запрос два вроде работает, но хотелось бы сделать все первым запросом, может что то нужно дописать? Добавлено спустя 2 минуты: То есть Пользователь зарегистрировался, у него нет заявок, он должен авторизоваться и видеть пустую таблицу, но пользователя без заявок не авторизовывает. Добавлено спустя 33 секунды: В этом то вся и проблема, со вторым и первым запросом.
конечно не авторизовывает. потому что у него нет заявок. вот этот код за это отвечает: 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."'"); ты не очень-то понимаешь что делаешь. давай еще раз с самого начала про вот этот фрагмент. ДЛЯ ЗАЧЕМ ТЫ ВЫДЕРГИВАЕШЬ АДРЕСА-ЗАКАЗЫ ПРИ ПРОВЕРКЕ ЛОГИНА-ПАРОЛЯ???
Я понял так, что нужно разделить запроса на две части. 1 запрос авторизовывает пользователя и должен показывать информацию о пользователе (его контактные данные). 2 запрос должен выводить в таблицу заявки пользователя. Вот только как это сделать не могу разобраться. Буду очень благодарен за помощь.
уже лучше ( теперь осталось нормально реализовать авторизацию с сессией, а потом уже вывод в личном кабинете ((
пожалуйста, не ожидай здесь увидеть готовый код решения твоей задачи. это раздел для новичков и тут помогают самостоятельно решить проблему тем кто готов учиться и работать головой. у тебя уже фактически есть код авторизации, разве не так? выкинь из него ненужное и этот пункт готов. проверил логин-пароль, записал сессию, перенаправил на личный кабинет, показал что там тебе нужно. кстати что у нас там со структурой БД?
Таблица ордер это связвающая таблица для клиентов и адресов, также в не указана дата и время вызова, статус, дата завершения.
лять, не надо трогать адрес при проверке пароля! И, кстати, не надо проверять пароль всякий раз при открытии странички. "Помочь примером" это будет медвежья услуга. Ты потому и заблудился в трех деревьях, что не пытаешся понять, а только копируешь чужие слова. Дальше будет только хуже.