С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159

Проверка наличия строк в бд и вывод результата

10.03.2015, 17:28. Показов 1677. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Люди помогите пожалуйста, есть вот такие наброски кода. Задача стоит чтобы залить скрипт на сервер и через ссылку допустим www.demo.ru/script.php?=тут вставляю значение для проверки допустим 123. Мне выдавало результат есть такое значение в бд или нет. И если значение есть выдавало бы "Public", а если нет то выдавало бы "Private" и заносило значение которого нет, в базу данных.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
//include('bd.php'); // Подключение к бд
$link = mysqli_connect( '127.0.0.1', 'root', '', 'antipublic');
if ( !empty($_GET['phone'] ) )
{
        if (!empty($_GET['pass']))
        {
                $mail = mysqli_real_escape_string( $link, $_GET['phone'] );
                $pass = mysqli_real_escape_string( $link, $_GET['pass'] );
                $add = $_GET['add'];
                $result = mysqli_query( $link, "SELECT * FROM `baza` WHERE phone='$phone' AND pass='$pass' ORDER BY id DESC LIMIT 1");
                $row = mysqli_fetch_assoc($result);
                if ( empty($row['id'] ) )
                {
                        echo 'PRIVATE';
                        //echo '<br />'.$add.'<br />';
                        if ( $add == 1 ) {
                                //echo '<br />Add';
                                mysqli_query( $link, "INSERT INTO `baza` ( `phone`, `pass`) VALUES ('".$phone."','".$pass."')");
                                //mysqli_close( $link );
                        }
                }else{
                        echo 'PUBLIC';
                }
        }
}
Чисто на mysql запросе работает всё идеально. Я уже замучался, не разбираюсь в пхп но серверную часть очень хочу доделать.
INSERT INTO `antipublic`.`baza` (`phone`, `pass`) VALUES ('1234', '1234'); // добавление значений в бд
SELECT * FROM `baza` WHERE phone='1234' AND pass='1234' //поиск значений в базе данных mysql
Люди очень прошу помогите. Сей чудный код залил на денвер. Вроде он приконектился все дела. Но при вводе по ссылке www.demo.ru/script.php?=значение вообще ничего не выдает никакой реакции.
Может кто помочь, что я не так делаю ? Заранее благодарю, если кто подсобит.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2015, 17:28
Ответы с готовыми решениями:

Проверка наличия одинаковых строк в двух файлах
Добрый день, помогите написать батник. Нужно следующее: 1. Есть .txt файл со следующим примерным содержимым: 123qwe 23afwae ...

Проверка наличия файла в папках + вывод пустых папок
Добрый вечер! Пытаюсь написать bat файл, который будет показывать какие папки пустые в заданном диске. Но проблема в том , что файлы могут...

Проверка наличия папки, вывод информации о ее наличии в label
Здравствуйте, нужна помощь по данному вопросу. Как сделать проверку наличия папки в директории и если ее нет, либо она есть вывести...

11
> /dev/null
 Аватар для Блеф
286 / 119 / 86
Регистрация: 14.05.2014
Сообщений: 767
10.03.2015, 17:54
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$args = array(
    'product_id'   => FILTER_SANITIZE_MAGIC_QUOTES,
    'component'    => FILTER_SANITIZE_MAGIC_QUOTES,
    'add'          => FILTER_VALIDATE_INT
);
 
$post = filter_input_array(INPUT_POST, $args);
 
if(!empty($post['phone']) and !empty($post['pass'])){
 
    $query = mysqli_query( $link, "SELECT `id` FROM `baza` WHERE phone='".$post['phone']."' AND pass='".$post['pass']."' ORDER BY id DESC LIMIT 1");
    $row = mysqli_fetch_assoc($query);
    
    if(mysqli_stmt_num_rows($row) > 0){
    
        echo 'PRIVATE';
        
        if($post['add'])
            mysqli_query( $link, "INSERT INTO `baza` ( `phone`, `pass`) VALUES ('".$post['phone']."','".$post['pass']."')");    
    }
    else{
        echo 'PUBLIC';
    }
}
отображение ошибок включенно?
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
10.03.2015, 17:55
Цитата Сообщение от eastsida Посмотреть сообщение
Но при вводе по ссылке http://www.demo.ru/script.php?=значение вообще ничего не выдает никакой реакции.
И не должно ничего выдавать, потому что ваш скрипт ждет гет запрос на phone и pass, тоесть по урлу надо передавать так- http://www.demo.ru/script.php?... =значение2
1
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
10.03.2015, 17:58
Цитата Сообщение от eastsida Посмотреть сообщение
if (!empty($_GET['pass']))
Например, это означает проверку наличия параметра pass в адресной строке. Чтобы условие выполнилось, ссылка должна быть такой:
http://www.demo.ru/script.php?pass=1234

И с телефоном тоже самое.
0
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
10.03.2015, 20:31  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Например, это означает проверку наличия параметра pass в адресной строке. Чтобы условие выполнилось, ссылка должна быть такой:
http://www.demo.ru/script.php?pass=1234

И с телефоном тоже самое.
Цитата Сообщение от UchihaSV Посмотреть сообщение
И не должно ничего выдавать, потому что ваш скрипт ждет гет запрос на phone и pass, тоесть по урлу надо передавать так- http://www.demo.ru/script.php?... =значение2
Цитата Сообщение от Jodah Посмотреть сообщение
Например, это означает проверку наличия параметра pass в адресной строке. Чтобы условие выполнилось, ссылка должна быть такой:
http://www.demo.ru/script.php?pass=1234
И с телефоном тоже самое.
Спасибо ребят, действительно не усмотрел пол дня просто возился с этим пхп.
У меня допустим такая база

Вот ввожу и выдаёт теперь ошибку
Цитата Сообщение от bleef159 Посмотреть сообщение
отображение ошибок включенно?
Попробовал по вашему скрипту, переделал под свои имена базы, выдаёт просто чистый лист, ошибок нет никаких но и ничего не показывает.
http://demo26.ru/333.php?mail=1234&pass=1234
И проверил подключение к бд я думал может я что накосячил не то ввёл
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
class connection{
    public $host ="127.0.0.1";
    public $user = "root"; 
    public $password = "";
    public $db="antipublic";
    public $dbc;
   
    function __construct() {
        $con = mysqli_connect($this->host, $this->user, $this->password, $this->db);
       
        if(mysqli_errno($con)){
            echo"sum error";
           
        }
        else{
           $this->dbc = $con; // assign $con to $dbc
           echo"connected ";
        }
    }
}
 
$test = new connection();
?>
Получил connected.

Добавлено через 13 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
   if ( empty($row['id'] ) )
                {
                        echo 'PRIVATE';
                        //echo '<br />'.$add.'<br />';
                        if ( $add == 1 ) {
  mysqli_query( $link, "INSERT INTO `baza_myr` ( `phone`, `pass`) VALUES ( '".$phone."','".$pass."')");
                                //mysqli_close( $link );
                        }
                }else{
                        echo 'PUBLIC';
                }
        }
}                                //echo '<br />Add';
Меня вот этот код смущает. Судя по всему я так понял оно ищет строчку id и если она пустая, то есть если то, что я ввёл в гет запрос отсутствует в базе мне выдает на странице текст приват и добавляет в базу, в любом другом случает паблик. Как мне просто подкорректировать чтобы искало строки в столбцах как на скриншоте.
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
10.03.2015, 20:31
Цитата Сообщение от eastsida Посмотреть сообщение
Вот ввожу и выдаёт теперь ошибку
Это значит что при выборке не нашлось записей, но вы все равно хотите превратить ресурс в массив через функцию mysqli_fetch_assoc(), чтобы такого не происходило, надо проверить нашлись ли какие-нибудь записи, и судя по вашему коду необходимость массива из mysqli_fetch_assoc() не нужна:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//include('bd.php'); // Подключение к бд
$link = mysqli_connect( '127.0.0.1', 'root', '', 'antipublic');
if ( !empty($_GET['phone'] ) )
{
        if (!empty($_GET['pass']))
        {
                $mail = mysqli_real_escape_string( $link, $_GET['phone'] );
                $pass = mysqli_real_escape_string( $link, $_GET['pass'] );
                $add = $_GET['add'];
                $result = mysqli_query( $link, "SELECT * FROM `baza` WHERE phone='$phone' AND pass='$pass' ORDER BY id DESC LIMIT 1");
                if (mysqli_num_rows($result)) echo "PUBLIC";
                else {
                        echo 'PRIVATE';
                        //echo '<br />'.$add.'<br />';
                        if ( $add == 1 ) {
                                //echo '<br />Add';
                                mysqli_query( $link, "INSERT INTO `baza` ( `phone`, `pass`) VALUES ('".$phone."','".$pass."')");
                                //mysqli_close( $link );
                        }
                }
        }
}
1
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
10.03.2015, 21:16  [ТС]
Цитата Сообщение от UchihaSV Посмотреть сообщение
Это значит что при выборке не нашлось записей, но вы все равно хотите превратить ресурс в массив через функцию mysqli_fetch_assoc(), чтобы такого не происходило, надо проверить нашлись ли какие-нибудь записи, и судя по вашему коду необходимость массива из mysqli_fetch_assoc() не нужна:
Опять беда (


Я так подозреваю что в этой строке может ошибка, что оно потом $result вернуть не может. Я так понял, что ошибка означает что оно ждет получения какого-то результата в виде текста или что-то в этом роде, а получает булево значение true,false.
PHP
1
$result = mysqli_query( $link, "SELECT * FROM `baza` WHERE phone='$phone' AND pass='$pass' ORDER BY id DESC LIMIT 1");
Ну по идее $result это то, что оно находит в таблице "база" в столбиках "phone" и "pass" и ищет там строки введенные мной в строке http://demo26.ru/check.php?mail=1234&pass=1234 и если эти строки присутствуют выдать текст паблик. Вот, что оно хочет вроде всё логично для человека по крайней мере. Вот только вопрос в виде чего мы получаем $result не в виде ли строк из базы данных ?
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
11.03.2015, 00:57
Значит ошибка у вас в запросе SQL и поэтому mysqli_query возвращает FALSE, чтобы учитывать и эту вашу ошибку используйте:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$link = mysqli_connect( '127.0.0.1', 'root', '', 'antipublic');
if (isset($_GET['phone'],$_GET['pass'])) {
    $phone = mysqli_real_escape_string( $link, $_GET['phone'] );
    $pass = mysqli_real_escape_string( $link, $_GET['pass'] );
    if ($result = mysqli_query( $link, "SELECT * FROM `baza` WHERE phone='$phone' AND pass='$pass' ORDER BY id DESC LIMIT 1")) {
        if (mysqli_num_rows($result) > 0) echo "PUBLIC";
        else {
            mysqli_query( $link, "INSERT INTO `baza` ( `phone`, `pass`) VALUES ('".$phone."','".$pass."')");
            mysqli_close( $link );
            echo 'PRIVATE';
        }
    }
    else "Ошибка при запросе к БД, возможно вы не правильно составили запрос.";
}
1
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
11.03.2015, 01:29  [ТС]
Цитата Сообщение от UchihaSV Посмотреть сообщение
Значит ошибка у вас в запросе SQL и поэтому mysqli_query возвращает FALSE, чтобы учитывать и эту вашу ошибку используйте:
Спасибо большое за разбор полетов вместе со мной к 2 утра пришло прозрение в самом изначальном моём коде
после строки
PHP
1
 $row = mysqli_fetch_array($result);
искал в интернете как можно проверить результат запроса к базе данных. В результате нашел
PHP
1
2
if (!$result) {
    die(mysqli_error($link));
И о Боги


По идее дело было в том, что из-за того, что не было проверки на результат true,false оно и не могло без этого продолжить дальнейший код, то есть как бы не зная получен результат или нет еррор возникал. Потратил тупо целый день, блин на две строчки.
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
11.03.2015, 02:19
Нет, просто false в результат заносился из-за того что неправильно составлялся sql-запрос:
Цитата Сообщение от eastsida Посмотреть сообщение
$mail = mysqli_real_escape_string( $link, $_GET['phone'] );
У тебя phone заносится в переменную $mail, а ты в sql пытался засунуть $phone, который ты даже не определил.
0
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
11.03.2015, 13:23  [ТС]
Цитата Сообщение от UchihaSV Посмотреть сообщение
У тебя phone заносится в переменную $mail, а ты в sql пытался засунуть $phone, который ты даже не определил.
Не, имена я просто от фонаря написал я переделывал под те имена которые у меня в базе были. Хоть я и дно тотальное в пхп, но код понял, где какая функция и что она выполняет. Тут у меня всё верно было, просто в первом посте забыл поправить. Тут именно ошибка была в том, что не было проверки есть результат или нет и из-за этого код загибался.

Добавлено через 1 минуту
Цитата Сообщение от UchihaSV Посмотреть сообщение
Это значит что при выборке не нашлось записей, но вы все равно хотите превратить ресурс в массив через функцию mysqli_fetch_assoc(), чтобы такого не происходило, надо проверить нашлись ли какие-нибудь записи
Вот была изначально правильная мысль.

Добавлено через 10 часов 35 минут
Товарищи, а не подскажете
PHP
1
2
3
4
5
6
if ( !empty($_GET['phone'] ) )
{
        if (!empty($_GET['pass']))
        {
                $phone = mysqli_real_escape_string( $link, $_GET['phone'] );
                $pass = mysqli_real_escape_string( $link, $_GET['pass'] );
Можно ли в этом коде фильтровать запросы, то есть можно же ввести в этой строке любые данные просто набор букв или цифр и оно занесет эти данные в бд, а мне допустим нужно чтобы заносило только телефон:пароль, а всё остальное отсекало. Я просто сейчас на распутье сделать это через клиент или через серверную часть.
http://demo26.ru/check.php?pho... erty&add=1
0
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
11.03.2015, 15:10
На серверной части нужно делать проверку обязательно, а на клиенте по вашему усмотрению:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$link = mysqli_connect( '127.0.0.1', 'root', '', 'antipublic');
if (isset($_GET['phone'],$_GET['pass'])) {
$phone = $_GET['phone']; $pass = $_GET['pass'];
$phone = trim($phone);$pass= trim($pass); //убираем лишние пробелы
$phone = str_replace(array(' ','-','(',')'),'',$phone); //убираем из телефона лишние пробелы, тире, и скобки
if (strlen($phone > 20)) $phone = substr($phone,0,20); //если содержит более 20 символов, обрезаем до 20 символов
if (strlen($pass > 20)) $pass = substr($pass,0,20); //если содержит более 20 символов, обрезаем до 20 символов
if (preg_match('/[0-9]*/',$phone)) { //проверяем чтобы телефон содержал только арабские цифры
    if (preg_match('/[A-Za-z0-9]*/',$pass )) {//проверяем чтобы пароль содержал только латинские буквы и  арабские цифры, с учетом регистра
        //в принципе эти преобразования через mysqli_real_escape_string() уже необязательны после наших проверок, но можно и оставить
        $phone = mysqli_real_escape_string( $link, $phone);
        $pass = mysqli_real_escape_string( $link, $pass);
        if ($result = mysqli_query( $link, "SELECT * FROM `baza` WHERE phone='$phone' AND pass='$pass' ORDER BY id DESC LIMIT 1")) {
            if (mysqli_num_rows($result) > 0) echo "PUBLIC";
            else {
                mysqli_query( $link, "INSERT INTO `baza` ( `phone`, `pass`) VALUES ('".$phone."','".$pass."')");
                mysqli_close( $link );
                echo 'PRIVATE';
            }
        }
        else "Ошибка при запросе к БД, возможно вы не правильно составили запрос.";
    }
    else echo "Пароль должен содержать только латинские буквы и арабские цифры";
}
else echo "Телефон должен содержать только арабские цифры";
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.03.2015, 15:10
Помогаю со студенческими работами здесь

Проверка наличия на диске в указанном каталоге перечисленных в списке файлов и вывод имен отсутствующих
Проверка наличия на диске в каталоге, указанном первым параметром КФ файла FNames.txt, содержащего список имен файлов и подкаталогов. Если...

Проверка времени и вывод результата в лейбл
Вот кусок кода в котором по идее должно выполняться следующие, если время которое на ПК больше 10 00 и меньше 11 00 то выводить время в...

Проверка даты и вывод результата PHP
Ребят, есть вопрос. Провожу примитивную проверку даты, после ввода таковой. 1 - вводим две даты ...

Поиск строк, и вывод результата
Доброго времени суток, хотел бы у вас попросить направления что ли, в php, как можно реализовать поиск в файле? и получить результат...

Вывод результата сравнения введыных строк
Создал форму, где будут приниматься строки. &lt;form action=&quot;ss.php&quot; method=&quot;post&quot;&gt; Введите 1 строку &lt;input type=&quot;text&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru