За последние 24 часа нас посетили 18249 программистов и 1642 робота. Сейчас ищут 1119 программистов ...

Не получается разобраться с массивом и условием.

Тема в разделе "PHP для новичков", создана пользователем Sofia, 3 апр 2019.

  1. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Доброго времени суток.
    Подскажите пожалуйста, как правильно вывести массив и вставить в условие:

    Имеется у меня статическое условие
    PHP:
    1. if($email == 'mail@box.ru'){}
    Дело в том, что записи хранятся в БД, и помимо mail@box.ru имеются и другие записи.
    Хочется все записи вставить в условие.

    Вывожу вот такой массив:
    PHP:
    1. $res = mysqli_query($db, "SELECT emailbox FROM emailbox");
    2. $arr = array();
    3. while($rows = mysqli_fetch_row($res)){
    4.     print_r($rows[0]);
    5. }
    и понимаю, что если и обозначить переменную $rows[0], то в условие не получится вставить, так как выводится не правильно.

    Подскажите пожалуйста, как правильно вывести массив, что-бы вставить в условие.
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. $res = mysqli_query($db, "SELECT `здесь укажи все поля которые хочешь вывеси` FROM `emailbox`");
    2. # или укажи вытащить все поля символом *
    3. $res = mysqli_query( $db, "SELECT * FROM `emailbox`" );
    4. $i = 0;
    5. $arr = [];
    6. while( $rows = mysqli_fetch_row( $res ) )
    7. {
    8.     $arr [$i]['id']  = $rows['id'];
    9.     $arr [$i]['email']  = $rows['email'];
    10.     $arr [$i]['login']  = $rows['login'];
    11.     $i++;
    12. }
    13. print_r ( $arr );
    Тебе хочется вывести все записи одной таблицы или все поля одного столбца, конкретней.
     
    #2 _ne_scaju_, 3 апр 2019
    Последнее редактирование: 3 апр 2019
  3. Babka_Gadalka

    Babka_Gadalka Активный пользователь

    С нами с:
    16 фев 2019
    Сообщения:
    162
    Симпатии:
    23
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
    Используй подготовленные запросы prepare и в запрос вставь данные. После используй num_rows для определения "нашлось ли в бд"
     
  4. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Повторюсь: мне надо в условие вставить все почтовые ящики, которые находятся в поле emailbox. К сожалению Ваш вариант совсем нерабочий.

    Не понятно, как это сделать.

    А разве этот запрос неверный?
    PHP:
    1. $res = mysqli_query($db, "SELECT emailbox FROM emailbox");
    2. $arr = array();
    3. while($rows = mysqli_fetch_row($res)){
    4.     print_r($rows[0]);
    5. }
    Выводит же как надо... В данном случае найдено 3 почтовых адреса... Только я не знаю как их правильно вставить в условие.

    Назначаю переменную:
    PHP:
    1. $bdmail = $rows[0];
    Если переменную вставляю в условие:
    PHP:
    1. if($email == $bdmail){}
    То соответственно не работает. Так пока и не разобралась, как это сделать.
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Вам говорят вставить условие прямо в запрос (WHERE `emailbox`=, IN() и т.п.). Не понятно, что значит «все записи вставить в условие». Для всех записей условие не требуется. Или вы все-таки хотите выделить какое-то подмножество записей, а не все? Короче непонятно.
     
  6. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    а... на просторах интернета нашла вроде как пример... Но всеравно не работает.
    Вставила:
    PHP:
    1. if(isset($_GET['email'])){
    2. $email = htmlspecialchars($_GET['email']);
    3. $query = "SELECT * FROM emailbox WHERE emailbox='$email';";
    4. $res=mysqli_query ($query);
    5. $allmail = mysqli_fetch_array ($res);
    6. if($email == $allmail['emailbox'])
    7. {
    8. echo "no";
    9. }
    10. else
    11. {
    12. echo"yes";
    13. }
    14. }
    Но по прежнему не работает. Что не так в запросе?
     
  7. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    МОжет понял может нет но вот.

    PHP:
    1. $arr = [
    2. 'test@test.ru',
    3. 'test2#test.ru'
    4. ];
    5. if(in_array($rows[0],$arr)){
    6. //твои действия
    7. }
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Может, вы все-таки сначала объясните, что вам в общем нужно сделать ;) А то Ща мы вам тут поможем сделать то, не зная что :)
     
  9. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Хорошо, попробую более подробнее.
    Искала решение по проверке занятости почтового ящика, нашла решение вот в этом примере (внимание, сторонний ресурс не для рекламмы)

    Но в примере данные хранятся в файле, а у меня в базе данных. Ниже пишут как сделать привязку к БД, но у меня никак не работает.
    Вот и сижу ломаю голову, как прикрутить БД, что-бы проверялась почта из БД.
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Да, при живом поиске SELECT(ы) по вводимому мылу. Когда уже ввод мыла будет подтвержден, вы без предварительного выбора делаете вставку, а потом анализируете результат на предмет дубль ключа (поле с мылом, естественно, должно быть первичным ключом или юником).

    HTML-кодирование в вашем послед. коде – бред (без обид). Нужно использовать подготовленный запрос (о чем выше писали) или экранирование. Валидация по составу тоже не помешает. Это в ряде случаев может заменить первое (если вы не склонны периодически менять правила валидации без оглядки на защиту).
    --- Добавлено ---
    PHP:
    1. if ($allmail = mysqli_fetch_array ($res)) {
    Результат выполнения запроса, естественно, тоже нужно проверять.
    --- Добавлено ---
    $num_rows тут тоже можно использовать, о чем выше писали.
     
    Babka_Gadalka нравится это.
  11. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    В том та и дело, даже так не работает...
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Как так? Я имел в виду, что вместо
    PHP:
    1. $res=mysqli_query ($query);
    нужно делать хотя бы
    PHP:
    1. $res=mysqli_query ($query) or die();
     
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    в запросе ты намутила невероятное)
    чтобы проверить почтовый ящик соответственно нужно ввести email в поле вода, и потом этот же email сравнивать с бд, существует ли такой email в бд.
    PHP:
    1. if( isset( $_POST['email'] ) )
    2. {
    3.    $email = htmlspecialchars($_POST['email']);
    4.    $query = " SELECT `emailbox` FROM `you_table_email` WHERE `emailbox` = '.$email.' ";
    5.    $res=mysqli_query ( $query );
    6.    $allmail = mysqli_fetch_array ($res);
    7.    if( $allmail['emailbox'] > 0 )
    8.    {
    9.       echo "no";
    10.    }else{
    11.       echo"yes";
    12.    }
    13. }
    и еще раз повторюсь используй подготовительные запросы: https://php.ru/manual/mysqli.prepare.html
    --- Добавлено ---
    с тебя чтобы информацию вытащить нужно постараться.
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    @_ne_scaju_, что за точки в тексте запроса? :)
    --- Добавлено ---
    О том, что есть бред, выше у меня прочитали?
    --- Добавлено ---
    ...Ну и проч. замечания, в частности пример условия посмотрите.
     
  15. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Проверяла. Ящик существует. Но скрипт не работает.
    PHP:
    1. if( isset( $_GET['email'] ) )
    2. {
    3.    $email = htmlspecialchars($_GET['email']);
    4.    $query = " SELECT `emailbox` FROM `emailbox` WHERE `emailbox` = '.$email.' ";
    5.    $res=mysqli_query ( $query );
    6.    $allmail = mysqli_fetch_array ($res);
    7.    if( $allmail['emailbox'] > 0 )
    8.    {
    9.       echo "no";
    10.    }else{
    11.       echo"yes";
    12.    }
    13. }
     
  16. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    @Sofia, я вам др. условие писал ;) Там даже присвоение лишнее:
    PHP:
    1. if (mysqli_fetch_array ($res)) {
    --- Добавлено ---
    Присвоение можно было так использовать:
    PHP:
    1. $allmail = mysqli_fetch_array ($res);
    2. if ($allmail) {
     
  17. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Бред не бред.... но я реально уже голову сломала... Примеров масса, но ниодин не работает.
    Вот так вот выглядит запись в БД:
    [​IMG]

    Сам скрипт index.php
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    3. <head>
    4. <title>Проверка формы</title>
    5. <meta http-equiv="content-type" content="application/xhtml+xml; charset=windows-1251" />
    6. <script type="text/javascript" src="jquery-1.5.1.min.js"></script>
    7. <style>
    8. .inputRed{
    9. border:1px solid #ff4040;
    10. background: #ffcece;
    11. }
    12. .inputGreen{
    13. border:1px solid #83c954;
    14. background: #e8ffce;
    15. }
    16.  
    17. </style>
    18.  
    19.  
    20. <script type="text/javascript">
    21.  
    22. var email,
    23.     password,
    24.     password2,
    25.     loginStat,
    26.     emailStat,
    27.     passwordStat,
    28.     password2Stat;
    29.  
    30. $(function() {
    31.     // Email
    32.     $("#email").change(function(){
    33.         email = $("#email").val();
    34.         var expEmail = /[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}/i;
    35.         var resEmail = email.search(expEmail);
    36.         if(resEmail == -1){
    37.             $("#email").next().hide().text("Неверный формат Email").css("color","red").fadeIn(400);
    38.             $("#email").removeClass().addClass("inputRed");
    39.             emailStat = 0;
    40.             buttonOnAndOff();
    41.         }else{
    42.            
    43.             $.ajax({
    44.             url: "testingLoginEmail.php",
    45.             type: "GET",
    46.             data: "email=" + email,
    47.             cache: false,          
    48.             success: function(response){
    49.                 if(response == "no"){
    50.                     $("#email").next().hide().text("Email Занят").css("color","red").fadeIn(400);
    51.                     $("#email").removeClass().addClass("inputRed");                  
    52.                 }else{                  
    53.                     $("#email").removeClass().addClass("inputGreen");
    54.                     $("#email").next().text("");
    55.                 }                  
    56.             }
    57.         });
    58.             emailStat = 1;
    59.             buttonOnAndOff();
    60.         }
    61.        
    62.     });  
    63.     $("#email").keyup(function(){
    64.         $("#email").removeClass();
    65.         $("#email").next().text("");
    66.     });  
    67.    
    68.    
    69.     //Пароль
    70.     $("#password").change(function(){
    71.         password = $("#password").val();
    72.         if(password.length < 6){
    73.             $("#password").next().hide().text("Слишком короткий пароль").css("color","red").fadeIn(400);
    74.             $("#password").removeClass().addClass("inputRed");
    75.             passwordStat = 0;
    76.             buttonOnAndOff();
    77.         }else{
    78.             $("#password").removeClass().addClass("inputGreen");
    79.             $("#password").next().text("");
    80.             passwordStat = 1;
    81.             buttonOnAndOff();
    82.         }      
    83.     });
    84.     $("#password").keyup(function(){
    85.         $("#password").removeClass();
    86.         $("#password").next().text("");
    87.     });
    88.    
    89.     //Проверка пароля
    90.     $("#password2").change(function(){
    91.         if(password2 != password){
    92.             $("#password2").next().hide().text("Пароли не совпадают").css("color","red").fadeIn(400);
    93.             $("#password2").removeClass().addClass("inputRed");
    94.             password2Stat = 0;
    95.             buttonOnAndOff();
    96.         }else{
    97.             $("#password2").removeClass().addClass("inputGreen");
    98.             $("#password2").next().text("");
    99.         }      
    100.     });
    101.     $("#password2").keyup(function(){
    102.         password2 = $("#password2").val();
    103.         if(password2 == password){
    104.             password2Stat = 1;
    105.             buttonOnAndOff();
    106.         }else{
    107.             password2Stat = 0;
    108.             buttonOnAndOff();
    109.         }
    110.     });
    111.    
    112.     function buttonOnAndOff(){
    113.         if(emailStat == 1 && passwordStat == 1 && password2Stat == 1 && loginStat == 1){
    114.             $("#submit").removeAttr("disabled");
    115.         }else{
    116.             $("#submit").attr("disabled","disabled");
    117.         }
    118.    
    119.     }
    120.    
    121. });
    122. </script>
    123. </head>
    124.  
    125. <body>
    126.  
    127.                
    128. <form action="#" method="post">
    129.    
    130.     <label><font color='red'>*</font> Ваш E-mail:<br></label>
    131.     <input name="email" type="text" size="50" id="email"> <span></span><br>  
    132.  
    133.  
    134.  
    135.     <label><font color='red'>*</font> Ваш пароль:<br></label>
    136.     <input name="password" type="password" size="50" id="password"> <span></span><br>
    137.     <small>Не менее 6 символов</small>
    138.  
    139.  
    140.     <label><font color='red'>*</font> Подтвердите пароль:<br></label>
    141.     <input name="password2" type="password" size="50" id="password2"> <span></span><br><br>
    142.  
    143.  
    144. <input type="submit" name="submit" value="Зарегистрироваться" id="submit" disabled><br><br>
    145. <font color='red'>*</font> поля, обязательные для заполнения.
    146.  
    147. </form>
    Вот файл testingLoginEmail.php
    PHP:
    1. // Соединение с базой данных
    2. $user = '***';
    3. $password = '***';
    4. $dbname = '***';
    5. $db = mysqli_connect('localhost', $user, $password, $dbname);
    6. mysqli_query($db, 'set names utf8');
    7. //
    8.  
    9. if( isset( $_GET['email'] ) )
    10. {
    11.    $email = htmlspecialchars($_GET['email']);
    12.    $query = " SELECT `emailbox` FROM `emailbox` WHERE `emailbox` = '.$email.' ";
    13.    $res=mysqli_query ( $query );
    14.    $allmail = mysqli_fetch_array ($res);
    15.    if( $allmail['emailbox'] > 0 )
    16.    {
    17.       echo "no";
    18.    }else{
    19.       echo"yes";
    20.    }
    21. }
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Я др. условие писал. Короче успехов. Заставлять слушать я не собираюсь.
    --- Добавлено ---
    И нефиг тупо копипастить чужой код с явными ошибками ;)
     
  19. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2
    Я же ответила, что твое условие тоже не работает.

    К сожалению с правильным кодом нет, и это уже исправленные варианты, которые указаны выше в данной теме. Получается что тоже с ошибками, раз не работает =(

    Очень надеюсь, что найдется знающий человек, который в итоге поможет код довести до рабочего состояния =(
     
  20. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    @Sofia, на программерском форуме слова «не работает» не катят. Расписывайте, что делали/меняли, как проверяли работоспособность.

    Я утверждаю, что предложенный мной вариант работает, причем не абы как.
     
    _ne_scaju_ нравится это.
  21. Babka_Gadalka

    Babka_Gadalka Активный пользователь

    С нами с:
    16 фев 2019
    Сообщения:
    162
    Симпатии:
    23
    Адрес:
    Москва, Пушкина, Избушкина, 2й этаж душечка.
  22. Sanya

    Sanya Новичок

    С нами с:
    3 апр 2019
    Сообщения:
    2
    Симпатии:
    1
    Я сам конечно ещё новичок, но первое что бросается в глаза, это 13 строчка в вашем файле testingLoginEmail.php. Попробуйте добавить в функцию mysqli_query($query); первым параметром $db - это ресурс соединения с БД, чтобы было вот так mysqli_query($db, $query);
     
    miketomlin нравится это.
  23. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    @Sanya, все верно в mysqli_-ф-циях это обязательный параметр (в отличии от mysql_-). Я этого не заметил и даже процитировал неверный вариант, но эта замыленность глаз объяснима: многие используют ООП-синтаксис mysqli, в котором у query только один обязательный параметр – текст запроса.
    --- Добавлено ---
    P.S. ТС так «скосячил» в посте #6. До этого тут все было норм.
     
  24. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.576
    Симпатии:
    1.759
    Не ресурс, а экземпляр класса mysqli, если быть точнее. Процедурный синтаксис mysqli реализован примерно так:
    PHP:
    1. function mysqli_query($db, $query) {
    2.    return $db->query($query);
    3. }
     
    miketomlin нравится это.
  25. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    963
    Симпатии:
    2