За последние 24 часа нас посетили 16430 программистов и 1677 роботов. Сейчас ищут 835 программистов ...

Warning: mysql_num_rows() expects parameter 1 to be resource

Тема в разделе "MySQL", создана пользователем Kirito, 11 июл 2015.

  1. Kirito

    Kirito Новичок

    С нами с:
    11 июл 2015
    Сообщения:
    1
    Симпатии:
    0
    Помогите пожалуйста!
    У меня в коде пишет ошибку: "Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/u158035233/public_html/functions.php on line 104"

    Подскажите что можно исправить и в чём ошибка.
    Сам код:
    Код (PHP):
    1. <?php
    2.     require_once 'config.php';
    3.     function connect_to_db ($db_host, $db_user, $db_pass, $db_name, $db_charset)
    4.     {
    5.         $mysql_connect = mysql_connect($db_host, $db_user, $db_pass);
    6.         if ($mysql_connect) {
    7.             $select_db = mysql_select_db($db_name);
    8.             if ($select_db) {
    9.                 $q = "SET NAMES $db_charset";
    10.                 $set_names = mysql_query($q);
    11.                 return true;
    12.             } else {
    13.                 $mysql_error = "На сервере не найдено базы данных с именем ".$db_name;
    14.                 exit ($mysql_error());
    15.             }
    16.         } else {
    17.             $mysql_error = "Ошибка связи с сервером базы данных";
    18.             exit ($mysql_error());
    19.         }
    20.         return false;
    21.     }
    22.     $db = connect_to_db ($db_host, $db_user, $db_pass, $db_name, $db_charset);
    23.     header ('Content-Type: text/html; charset=UTF-8');
    24.     function post_data_is_valid ()
    25.     {
    26.         if (isset($_POST['from'])) {
    27.             $from = trim($_POST['from']);
    28.             $form = strtolower($from);
    29.             if (!preg_match('/^[a-z0-9_\.-]+@[a-z0-9_\.-]+\.[a-z\.]{2,6}$/', $from)) {
    30.                 return '<script>alert(\'Неправильно заполнено поле "E-mail отправителя"\')</script>';
    31.             }
    32.         } else
    33.             return false;
    34.  
    35.         if (isset($_POST['name'])) {
    36.             $name = trim($_POST['name']);
    37.             if (!preg_match('/^.{3,30}$/', $name)) {
    38.                 return '<script>alert(\'Неправильно заполнено поле "Имя отправителя"\')</script>';
    39.             }
    40.         } else
    41.             return false;
    42.  
    43.         if (isset($_POST['subject'])) {
    44.             $subject = trim($_POST['subject']);
    45.             if (!preg_match('/^.{3,128}$/', $subject)) {
    46.                 return '<script>alert(\'Неправильно заполнено поле "Тема письма"\')</script>';
    47.             }
    48.         } else
    49.             return false;
    50.  
    51.  
    52.         if (isset($_POST['to'])) {
    53.             $to = trim($_POST['to']);
    54.             $to = strtolower($to);
    55.             if (!preg_match_all('/ *[a-z0-9_\.-]{2,30}@[a-z0-9_\.-]{2,20}\.[a-z\.]{2,6} */', $to, $mail_list)) {
    56.                 return '<script>alert(\'В списке не найдено ни одного корректного адреса E-mail"\')</script>';
    57.             } else {
    58.                 $to = array();
    59.                 foreach ($mail_list[0] as $key => $value) {
    60.                     $to[$key] = $value;
    61.                     $to[$key] = trim($to[$key]);
    62.                 }
    63.             }
    64.         } else
    65.             return false;
    66.  
    67.         if (isset($_POST['message_type'])) {
    68.             $message_type = trim($_POST['message_type']);
    69.             if ($message_type == 'text')
    70.                 $content_type = 'Content-Type: text/plain; charset=UTF-8' . "\r\n";
    71.             else
    72.                 if ($message_type == 'html')
    73.                     $content_type = 'Content-Type: text/html; charset=UTF-8' . "\r\n";
    74.  
    75.         } else
    76.             return false;
    77.  
    78.         if (isset($_POST['message'])) {
    79.             $message = trim($_POST['message']);
    80.             $message = stripslashes($message);
    81.             if (strlen($message) < 3 || strlen($message) > 4096) {
    82.                 return '<script>alert(\'Неправильно заполнено поле "Текст письма"\')</script>';
    83.             }
    84.         } else
    85.             return false;
    86.     
    87.         return  array (
    88.  
    89.             'from' => $from,
    90.             'name' => $name,
    91.             'subject' => $subject,
    92.             'message' => $message,
    93.             'to' => $to,
    94.             'content_type' => $content_type
    95.         );
    96.     }
    97.     function add_mail_to_db ($email)
    98.     {
    99.         $email = trim($email);
    100.         $email = htmlspecialchars($email);
    101.         $email = mysql_real_escape_string($email);
    102.         $last_used = date("Y-m-d H:i:s");
    103.         $q = mysql_query ("SELECT `id` FROM `e-mails` WHERE `e-mail`='$email' LIMIT 1");
    104.         if (mysql_num_rows($q) > 0)                              // Здесь выдаёт ошибку!!!!!!
    105.             $q = "UPDATE `e-mails` SET `last_used`='$last_used' WHERE `e-mail`='$email' LIMIT 1";
    106.         else
    107.             $q = "INSERT INTO `e-mails` (`e-mail`, `last_used`) VALUES ('$email', '$last_used')";
    108.         $result = mysql_query($q);
    109.         if (!$result)
    110.             return false;
    111.         return true;
    112.     }
    113.     function sent_post_from_fake_mail ($from, $name, $subject, $message, $to, $content_type)
    114.     {
    115.         $sent_status = mail ($to, $subject, $message, $content_type . "From: $name <$from>\r\n");
    116.         if ($sent_status !== false)
    117.             return true;
    118.         else
    119.             return false;
    120.     }
    121.  
    122.     function input_value ($field_name)
    123.     {
    124.         if (isset($_POST[$field_name]))
    125.             return ' value="'.$_POST[$field_name].'"';
    126.     }
    127.  
    128.     function textarea_value ()
    129.     {
    130.         if (isset($_POST['message']))
    131.             return stripslashes($_POST['message']);
    132.     }
    133.     
    134.     function textarea_mail_values ()
    135.     {
    136.         if (isset($_POST['to']))
    137.             return trim($_POST['to']);
    138.     }    
    139.  
    140.     function radio_checked ($value)
    141.     {
    142.         if (isset($_POST['message_type']) && $_POST['message_type'] == $value)
    143.             return ' checked';
    144.         else
    145.             if ($value == 'text')
    146.                 return ' checked';
    147.     }
    148.     $alert = '';
    149.     $textarea_mail_list = '';
    150.     if (isset($_GET['do']) && $_GET['do'] == 'sent')
    151.         if (post_data_is_valid ()) {
    152.             if (isset($_COOKIE['sent']) && $_COOKIE['sent'] == 'true')
    153.                 $alert = '<script>alert(\'Рассылать письма можно только 1 раз в 5 минут\')</script>';
    154.             else {
    155.                 $sent_data = post_data_is_valid ();
    156.                 if (!is_array($sent_data) && $sent_data !== false)
    157.                     $alert = $sent_data;
    158.                 else {
    159.                     $success = 0;
    160.                     $failed = 0;
    161.                     $sent_data['to'] = array_unique($sent_data['to']);
    162.                     foreach ($sent_data['to'] as $to) {
    163.                             add_mail_to_db ($to);
    164.                         $sent_status = sent_post_from_fake_mail ($sent_data['from'], $sent_data['name'], $sent_data['subject'], $sent_data['message'], $to, $sent_data['content_type']);
    165.                                     
    166.                         if (!$sent_status)
    167.                             $failed++;
    168.                         else {
    169.                             $success++;
    170.                         }
    171.                     }
    172.                     if ($success === 0)
    173.                         $alert = '<script>alert(\'Рассылка завершилась неудачей. Попробуйте повторить попытку через 30 минут\')</script>';    
    174.                     else {
    175.                         setcookie('sent', 'true', time() + 300);
    176.                         $alert = '<script>alert(\'Рассылка законечена. Успешно отправлено: '.$success.' писем. Завершились неудачей: '.$failed.' рассылок\')</script>';
    177.                     }
    178.                 }
    179.             }
    180.         }
    181. ?>
    Спасибо за помощь!

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Re: Warning: mysql_num_rows() expects parameter 1 to be reso

    А зачем вам узнавать число рядов при помощи mysql_num_rows(), если вы сами установили LIMIT 1? Значит, 1 ряд.

    Узнайте, что вы подаёте на mysql_num_rows() в переменной $q. В ошибке сказано, что там булево значение, наверное, false. Может, запрос не удался. Откройте phpMyAdmin и попробуйте сначала там составить правильный запрос и получить правильный ответ.

    Добавлено спустя 2 минуты 41 секунду:
    Re: Warning: mysql_num_rows() expects parameter 1 to be resource
    Вообще, когда я не ленюсь разобрать скрипт по шагам, у меня всё работает правильно. У вас тоже получится! ;)
     
  3. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А как узнать mysql_query вернул набор полей или ничего не нашел?:(

    Лучше девушка, выскажите ваше мнение касательно регулярки '/^.{3,128}$/' и т.д. и на сколько целесообразно
    Код (PHP):
    1.       $email = htmlspecialchars($email);
    2.       $email = mysql_real_escape_string($email);
    3.  
    Интересно просто увидишь косяк или нет:)
     
  4. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Re: Warning: mysql_num_rows() expects parameter 1 to be reso

    '/^.{3,128}$/' От трёх до 128 любых символов, кроме перевода строки. В чём же косяк? :) strlen надо использовать?
     
  5. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Re: Warning: mysql_num_rows() expects parameter 1 to be reso

    Ну а htmlspecialchars не нужен, если есть mysql_real_escape_string. Вот :)
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Re: Warning: mysql_num_rows() expects parameter 1 to be reso

    ну хоть кто-то бы напомнил что mysql устарела и лучше использовать mysqli или PDO
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Re: Warning: mysql_num_rows() expects parameter 1 to be reso

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

    Это правильно:)

    Давно интересуешься php?