Здравствуйте, есть код,но не могу понять в чем ошибка,не выводит данные помогите плиз PHP: if(isset($_POST["familiy"])) { $mysqli = new mysqli("localhost", "root", "", "my_base"); $userid = $mysqli->real_escape_string($_POST["familiy"]); //Запрос на выборку всех сообщений $sql="SELECT sotrudnik.lich_nomer, sotrudnik.familiy, sotrudnik.name, sotrudnik.Otchevstvo, sotrudnik.Zvanie,sotrudnik.dolznost, sotrudnik.vzisk, sotrudnik.Poochrenie, sotrudnik.birthday, sotrudnik.obrazovanie, sotrudnik.semeynoe, sotrudnik.Children, sotrudnik.Stach,sotrudnik.reiting, test.rez_prof, test.del_nrav, test.res_intel, test.sport_dost, test.rez_fiz FROM sotrudnik INNER JOIN test ON sotrudnik.lich_nomer = test.lich_nomer WHERE 'familiy' = '$userid' "; $result = $mysqli -> query($sql); function vivod($result) { // Проверка на то, что строк больше нуля if ($result -> num_rows > 0) { // Цикл для вывода данных while ($row = $result -> fetch_assoc()) { // Получаем массив с строками которые нужно выводить $arr = doesItExist($row); // Вывод данных echo "<tr>"; echo "<td>".$row['lich_nomer']."</td>"; echo "<td>".$row['familiy']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['Otchevstvo']."</td>"; echo "<td>".$row['Zvanie']."</td>"; echo "<td>".$row['dolznost']."</td>"; echo "<td>".$row['vzisk']."</td>"; echo "<td>".$row['Poochrenie']."</td>"; echo "<td>".$row['birthday']."</td>"; echo "<td>".$row['obrazovanie']."</td>"; echo "<td>".$row['semeynoe']."</td>"; echo "<td>".$row['Children']."</td>"; echo "<td>".$row['Stach']."</td>"; echo "<td>".$row['rez_prof']."</td>"; echo "<td>".$row['del_nrav']."</td>"; echo "<td>".$row['res_intel']."</td>"; echo "<td>".$row['sport_dost']."</td>"; echo "<td>".$row['rez_fiz']."</td>"; echo "<td>".$row['reiting']."</td>"; echo "</tr>"; } } } print($userid); } ?>
Разбейте свою задачу на составляющие. 1.Отладьте запрос к базе в phpMyAdmin 2. Соберите аналогичный запрос в вашем сценарии PHP из данных полученных извне, например из формы. 3. Отладьте передачу этого запроса в базу из сценария. 4. Отформатируйте полученные сценарием данные из базы.
Если использовать инструмент </> и выбрать язык php то код будет смотреться красивее и читабельнее. Скажите, а вы функцию vivod($result) где то вызываете? или она у вас только объявлена? И что за функция $arr = doesItExist($row);
Да,выводятся. WHERE 'familiy' = '$userid' - проблема в этом,т.к если убрать условие, то выводиться результат в виде всех данных из таблицы,а мне нужна конкретная строка --- Добавлено --- vivod($result) должно быть вместе vivod($userid) (уже исправил) $arr = doesItExist($row); это лишнее,но я уже убрал но все равно не выводится(((
Вот так можно попробовать: Код (Text): $sql="SELECT sotrudnik.lich_nomer, sotrudnik.familiy, sotrudnik.name, sotrudnik.Otchevstvo, sotrudnik.Zvanie,sotrudnik.dolznost, sotrudnik.vzisk, sotrudnik.Poochrenie, sotrudnik.birthday, sotrudnik.obrazovanie, sotrudnik.semeynoe, sotrudnik.Children, sotrudnik.Stach,sotrudnik.reiting, test.rez_prof, test.del_nrav, test.res_intel, test.sport_dost, test.rez_fiz FROM sotrudnik INNER JOIN test ON sotrudnik.lich_nomer = test.lich_nomer WHERE 'familiy' = " . $userid';
PHP: if(isset($_POST["familiy"])) { $mysqli = new mysqli("localhost", "root", "", "my_base"); $userid = $mysqli->real_escape_string($_POST["familiy"]); //Запрос на выборку всех сообщений $sql="SELECT sotrudnik.lich_nomer, sotrudnik.familiy, sotrudnik.name, sotrudnik.Otchevstvo, sotrudnik.Zvanie,sotrudnik.dolznost, sotrudnik.vzisk, sotrudnik.Poochrenie, sotrudnik.birthday, sotrudnik.obrazovanie, sotrudnik.semeynoe, sotrudnik.Children, sotrudnik.Stach,sotrudnik.reiting, test.rez_prof, test.del_nrav, test.res_intel, test.sport_dost, test.rez_fiz FROM sotrudnik INNER JOIN test ON sotrudnik.lich_nomer = test.lich_nomer WHERE 'familiy' = '$userid' "; var_dump($sql); echo' '; $result = $mysqli -> query($sql); var_dump($result); echo' '; function vivod($result) { // Проверка на то, что строк больше нуля if ($result -> num_rows > 0) { // Цикл для вывода данных while ($row = $result -> fetch_assoc()) { // Получаем массив с строками которые нужно выводить $arr = doesItExist($row); // Вывод данных echo "<tr>"; echo "<td>".$row['lich_nomer']."</td>"; echo "<td>".$row['familiy']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['Otchevstvo']."</td>"; echo "<td>".$row['Zvanie']."</td>"; echo "<td>".$row['dolznost']."</td>"; echo "<td>".$row['vzisk']."</td>"; echo "<td>".$row['Poochrenie']."</td>"; echo "<td>".$row['birthday']."</td>"; echo "<td>".$row['obrazovanie']."</td>"; echo "<td>".$row['semeynoe']."</td>"; echo "<td>".$row['Children']."</td>"; echo "<td>".$row['Stach']."</td>"; echo "<td>".$row['rez_prof']."</td>"; echo "<td>".$row['del_nrav']."</td>"; echo "<td>".$row['res_intel']."</td>"; echo "<td>".$row['sport_dost']."</td>"; echo "<td>".$row['rez_fiz']."</td>"; echo "<td>".$row['reiting']."</td>"; echo "</tr>"; } } } print($userid); } ?> прописал var_dump($sql) и var_dump($result). В случае с $sql все работает. а вот для $result выдает вот что: object(mysqli_result)#1 (5) { ["current_field"]=> int(0) ["field_count"]=> int(19) ["lengths"]=> NULL ["num_rows"]=> int(0) ["type"]=> int(0) } Как я понял,из-за пустых значений у меня и не выводиться результат
PHP: if(isset($_POST["familiy"])) { $mysqli = new mysqli("localhost", "root", "", "my_base"); $userid = $mysqli->real_escape_string($_POST["familiy"]); //Запрос на выборку всех сообщений $sql="SELECT sotrudnik.lich_nomer, sotrudnik.familiy, sotrudnik.name, sotrudnik.Otchevstvo, sotrudnik.Zvanie,sotrudnik.dolznost, sotrudnik.vzisk, sotrudnik.Poochrenie, sotrudnik.birthday, sotrudnik.obrazovanie, sotrudnik.semeynoe, sotrudnik.Children, sotrudnik.Stach,sotrudnik.reiting, test.rez_prof, test.del_nrav, test.res_intel, test.sport_dost, test.rez_fiz FROM sotrudnik INNER JOIN test ON sotrudnik.lich_nomer = test.lich_nomer WHERE 'familiy' = '$userid' "; var_dump($sql); echo' '; $result = $mysqli -> query($sql); var_dump($result); echo' '; function vivod($result) { // Проверка на то, что строк больше нуля if ($result -> num_rows > 0) { // Цикл для вывода данных while ($row = $result -> fetch_assoc()) { // Получаем массив с строками которые нужно выводить $arr = doesItExist($row); // Вывод данных echo "<tr>"; echo "<td>".$row['lich_nomer']."</td>"; echo "<td>".$row['familiy']."</td>"; echo "<td>".$row['name']."</td>"; echo "<td>".$row['Otchevstvo']."</td>"; echo "<td>".$row['Zvanie']."</td>"; echo "<td>".$row['dolznost']."</td>"; echo "<td>".$row['vzisk']."</td>"; echo "<td>".$row['Poochrenie']."</td>"; echo "<td>".$row['birthday']."</td>"; echo "<td>".$row['obrazovanie']."</td>"; echo "<td>".$row['semeynoe']."</td>"; echo "<td>".$row['Children']."</td>"; echo "<td>".$row['Stach']."</td>"; echo "<td>".$row['rez_prof']."</td>"; echo "<td>".$row['del_nrav']."</td>"; echo "<td>".$row['res_intel']."</td>"; echo "<td>".$row['sport_dost']."</td>"; echo "<td>".$row['rez_fiz']."</td>"; echo "<td>".$row['reiting']."</td>"; echo "</tr>"; } } } } vivod($result); ?>
Зачем писать все поля в строке запроса если можно заменить их знаком * ? После строки запроса напишите echo $sql; У вас таблица строится? А где теги <table> и </table> ? --- Добавлено --- $arr= doesItExist($row); Что это?
doesItExist это функция для запоминания переменной из select(а) выглядит она так PHP: function doesItExist(array $arr) { // Создаём новый массив $data = array( 'familiy' => $arr['familiy'] != false ? $arr['familiy'] : 'Нет данных', ); return $data; // Возвращаем этот массив } но в данном коде опечатка,я это убрал ($arr= doesItExist($row) таблица строится,просто я не стал загромождать все кодом,если надо,могу скинуть полный код
WHERE 'familiy' = '$userid' "; Здесь в запросе надо указать имя таблицы: WHERE sotrudnik.familiy = ' ". $userid . " ' ;"; Обрати внимание на синтаксис. В условии не нужно ставить кавычки после WHERE а вот где значение я указал одинарную кавычку, потом двойную, потом точку, потом переменную, потом точку и еще кусочек строки. После объявления $sql я просил вывести ее на экран. Так ты увидишь реальную строку со вставленной переменной $userid. Она будет в одинарных кавычках. Строка завершится знаком ; Можно проверить эту стоку в PHPMyAdmin в поле запроса SQL. Если запрос отработает в MyAdminе то его можно смело использовать в коде.
PHP: function vivod($result) { // Проверка на то, что строк больше нуля if ($result -> num_rows > 0) { ?> <table border="1" cellpadding="5" cellspacing="0"> <?php // Цикл для вывода данных while ($row = $result -> fetch_assoc()) { // Получаем массив с строками которые нужно выводить // Вывод данных echo "<tr>"; echo "<td>Личный номер</td>"; echo "<td>".$row['lich_nomer']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Фамилия</td>"; echo "<td>".$row['familiy']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Имя</td>"; echo "<td>".$row['name']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Отчество</td>"; echo "<td>".$row['Otchevstvo']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Звание</td>"; echo "<td>".$row['Zvanie']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Должность</td>"; echo "<td>".$row['dolznost']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Взыскание</td>"; echo "<td>".$row['vzisk']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Поощрение</td>"; echo "<td>".$row['Poochrenie']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>День рождения</td>"; echo "<td>".$row['birthday']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Образование</td>"; echo "<td>".$row['obrazovanie']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Семейное положение</td>"; echo "<td>".$row['semeynoe']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Дети</td>"; echo "<td>".$row['Children']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Стаж</td>"; echo "<td>".$row['Stach']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Не понял</td>"; echo "<td>".$row['rez_prof']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Не понял</td>"; echo "<td>".$row['del_nrav']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Не понял</td>"; echo "<td>".$row['res_intel']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Спортивные достижения</td>"; echo "<td>".$row['sport_dost']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Не понял</td>"; echo "<td>".$row['rez_fiz']."</td>"; echo "</tr>"; echo "<tr>"; echo "<td>Оценка</td>"; echo "<td>".$row['reiting']."</td>"; echo "</tr>"; ?> </table> <?php } } } vivod($result);
Спасибо! --- Добавлено --- Еще есть такой вопрос. Могу ли я ,например, данную которую я запомнил в $a передать методом пост в другую форму?
Ты можешь вставить переменную php в форму в виде <input type='text' name='txt1' value='<?php echo $a ?>'> При отправке формы она будет доступна на сервере под именем txt1
Давно хотел узнать как это делается. Спасибо, @don.bidon! Теоретически любые данные из формы могут навредить серверу.