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

Обсуждение в разделе «PHP», начал(-а) _Great_, 26.05.2007.

Статус темы:
Тема закрыта для ответов.
  1. roxblnfk

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

    Регистрация:
    6.02.2010
    Сообщения:
    189
    Одобрения:
    42
    Репутация:
    19
    да, он вечный, потому $text за каждую итерацию увеличивается на символ, продлевая цикл :)
    тут всё проще, разве что надо задаться условием переноса/разделения слов, символы будут распологаться по решетке (по клеткам) или по порядку в зависимости от длины символов. Т.е. рисовать по букве или вставлять сразу блок текста, попутно меряя его высоту.
    по сабжу посмотри функцию imagettfbbox
     
    #15981 roxblnfk, 29.07.2010
    В последний раз редактировалось: 29.07.2010
  2. programming

    programming New Member

    Регистрация:
    26.08.2009
    Сообщения:
    190
    Одобрения:
    3
    Репутация:
    0
    Ещё момент. А как определить ещё когда нужно напечатать слово, место, допустим, для 4 букв ещё есть на строке, а слово следующее из 6 букв. Как понять, что нужно перенести?

    В общем нужно тупо вставить текст на картинку с фиксированной шириной. Неужели нет готовой функции, по-моему это распространённая задача.
     
    #15982 programming, 29.07.2010
    В последний раз редактировалось: 29.07.2010
  3. roxblnfk

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

    Регистрация:
    6.02.2010
    Сообщения:
    189
    Одобрения:
    42
    Репутация:
    19
    ах почему же в GD нет функции imagecaptcha(), которая отргенерирует готовую капчу ;) задача то распространённая как бы
     
  4. SHiNiGaMi

    SHiNiGaMi Banned

    Регистрация:
    3.01.2010
    Сообщения:
    382
    Одобрения:
    55
    Репутация:
    15
    Короче идея была такая чтобы в нужном месте вставить переносы и рассчитать высоту.
     
  5. Ponchik

    Ponchik Хлебо-булочное изделие

    Регистрация:
    30.08.2005
    Сообщения:
    687
    Одобрения:
    807
    Репутация:
    311
    php.net/wordwrap
     
    Это одобряют 2 пользоветелей.
  6. Rastamanka

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

    Регистрация:
    26.11.2008
    Сообщения:
    429
    Одобрения:
    11
    Репутация:
    7
    В общем имею код
    PHP:
    // подключение к чату
    $ch2 curl_init('http://'.$hostname.'/srv/chat/chat_proc?lChannel=15&xml=1');
    // берем куки из файла
     
    curl_setopt($ch2CURLOPT_COOKIEFILE"cookie.txt");
    // выполняем запрос
    curl_exec ($ch2);
    //закрываем
    curl_close ($ch2);
    В итоге надо из страницы которая открывается после запроса вытащить нужные мне данные.
    Подскажите как это сделать?
    Знаю что функцией preg_match но как именно не знаю т.к. тока начала работать с cURL.
     
  7. Compton

    Compton Member

    Регистрация:
    31.01.2010
    Сообщения:
    290
    Одобрения:
    25
    Репутация:
    0
    ну да,сначала надо выучить синтаксис регулярок
     
  8. Axel G

    Axel G New Member

    Регистрация:
    28.01.2009
    Сообщения:
    86
    Одобрения:
    3
    Репутация:
    3
    С праздником коллеги!

    Как организовать вывод массовых кодов на залитые изображения?? Спрашивал 5-ью днями ранее, поэтому приведу ссылки, более чем уверен, что реализуется это проще чем кажется, понять бы только как = (

    https://forum.antichat.ru/showpost.php?p=2266619&postcount=16162
    https://forum.antichat.ru/showpost.php?p=2266630&postcount=16163
    https://forum.antichat.ru/showpost.php?p=2266849&postcount=16166

    Спасибо вам большое, работает! Но только для массовых ссылок. Не считает $i теперь, точнее выводит ссылки для заполненных инпутов (картинок), а вот загружает так только одну:
    PHP:
    $alllink = array();
    $alltlink = array();
    $alldlink = array();
    $fcount count($_FILES['userfile']['tmp_name']) or $fcount count($_POST['linkfile']);

    for (
    $i=0$i<$fcount$i++) {

    $image $_FILES['userfile']['tmp_name'][$i] or $image $_POST['linkfile'][$i];

    $alllink[] = 'ilink';
    $alltlink[] = 'tlink';
    $alldlink[] = 'dlink';

    }

    if (
    $fcount>1) {
        echo 
    implode(" "$alllink);
        echo 
    implode("<br />\r\n"$alltlink);
        echo 
    implode("<br />\r\n"$alldlink);
    }
    Ай забыл, надо еще $_POST['linkfile'] как то подсчитать. Там таже лабудень, выводит 10* ссылок, хотя загружаю только 3 фотки = (

    * - в формочке 10 инпутов для загрузки по файлам, и 10 инпутов - по ссылке.
     
    #15988 Axel G, 30.07.2010
    В последний раз редактировалось: 30.07.2010
  9. Rastamanka

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

    Регистрация:
    26.11.2008
    Сообщения:
    429
    Одобрения:
    11
    Репутация:
    7
    Я вроде спрашивала не про синтаксис...
    С синтаксисом как нить сама разберусь.
     
  10. SHiNiGaMi

    SHiNiGaMi Banned

    Регистрация:
    3.01.2010
    Сообщения:
    382
    Одобрения:
    55
    Репутация:
    15
    установите опцию CURLOPT_RETURNTRANSFER на 1 и делайте запрос вот так:
    PHP:
    $result curl_exec($ch);
    и парсите $result
     
  11. Gifts

    Gifts Green member

    Регистрация:
    25.04.2008
    Сообщения:
    2 494
    Одобрения:
    807
    Репутация:
    614
    Axel G php это, к сожалению, не питон и такая строчка
    PHP:
    $fcount count($_FILES['userfile']['tmp_name']) or $fcount count($_POST['linkfile']);  
    Не имеет права на существование, так как будет возвращать неожидаемый результат. По большому счету стоит проверять на пустоту все записи с помощью цикла http://php.net/foreach и http://php.net/empty. А если требуется искусственно ограничить количество пришедших записей, то сделать обычный цикл на N записей
     
    _________________________
    Это одобряет 1 пользователь.
  12. astrologer

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

    Регистрация:
    30.08.2007
    Сообщения:
    837
    Одобрения:
    267
    Репутация:
    59
    Code:
    $fcount = count($_FILES['userfile']['tmp_name']) or $fcount = count($_POST['linkfile']);
    Любопытно, что такая конструкция работает как ожидается в php и не работает в питоне.
    Code:
    php -r '$a = 1 or $a = 2; print($a . "\n");'
    1
    php -r '$a = 0 or $a = 2; print($a . "\n");'
    2
    Code:
    python -c 'a = 1 or a = 2; print(a)'
      File "<string>", line 1
    SyntaxError: can't assign to operator
    
    python -c '(a = 1) or (a = 2); print(a)'
      File "<string>", line 1
        (a = 1) or (a = 2); print(a)
           ^
    SyntaxError: invalid syntax
    
     
    #15992 astrologer, 30.07.2010
    В последний раз редактировалось: 30.07.2010
  13. Gifts

    Gifts Green member

    Регистрация:
    25.04.2008
    Сообщения:
    2 494
    Одобрения:
    807
    Репутация:
    614
    astrologer да, пожалуй, здесь не прав. Мной имелась ввиду конструкция:
    PHP:
    $a 0;
    $b 5;
    $c $a or $b
    echo 
    $c."\n";
    и
    Code:
    a = 0
    b = 5
    c = a or b
    print c
    В первом случае я ожидал бы 5, ну хотя бы 1 (или True), а получаю то что получаю
     
    _________________________
  14. astrologer

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

    Регистрация:
    30.08.2007
    Сообщения:
    837
    Одобрения:
    267
    Репутация:
    59
    С php всё понятно - он унаследовал ещё от перла набор логических операторов - буквенные (and, or, xor) обладают более низким приоритетом, чем присваивание. В php это менее полезно. Такая строчка:
    Code:
    $c = $a || $b;
    присвоит $с истину.

    С питоном тоже всё понятно - "or" обладает большим приоритетом, чем присваивание. А вот что присваивание не является выражением меня удивляет.

    Dense is often more readable.

    // Gifts: еще бы возвращал этот ваш ПХП последнее значение, а не только результат логической операции.
    Присваивание не является выражением - это конечно спорный момент в питоне, но лучше уж так, чем позним вечером искать ошибку типа if ($a = 2), а если еще "Dense is often more readable." задействован, то можно вешаться. На этом закончим оффтоп, пожалуй


    Обсуждаем приоритеты операторов - самые что ни на есть вопросы новичков, никакого оффтопа - строго по теме.

    Если бы. Вообще-то как язык php во многом отстает. Тут в какой-то теме приводили аргумент в защиту php вроде "это логические операторы, поэтому должно быть логическое значение"

    Если компактная запись убирает ненужную тавтологию (которая иногда преподносится как более читаемый код), вешаться не придётся.
    Code:
    $isSecure = validate();
    if ($isSecure)
    {
      $results = compute();
      print $results;
    }
    Code:
    if (validate())
    {
      print compute();
    }
    Code:
    print compute() if validate();
     
    #15994 astrologer, 30.07.2010
    В последний раз редактировалось: 30.07.2010
    Это одобряет 1 пользователь.
  15. Axel G

    Axel G New Member

    Регистрация:
    28.01.2009
    Сообщения:
    86
    Одобрения:
    3
    Репутация:
    3
    Gifts, хмм,
    Нее, как раз требуется подсчитать кол-во заполненных инпутов, говоря простым языком. Форич до этого не юзал, обходился фором, бум пробовать.

    astrologer, а можно с этого момента поподробнее, насчет приоритетов. || !== or ??

    И что лучше использовать буквенное или символьное, для 'и' использую && - привык уже, а вот этот символ ||, на клаве найти трудновато, хз есть ли он, а постоянное в пуск лазеть не айс, потому юзаю or.
     
  16. astrologer

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

    Регистрация:
    30.08.2007
    Сообщения:
    837
    Одобрения:
    267
    Репутация:
    59
    http://php.net/operators.precedence

    Выбирать в зависимости от того, какой нужен приоритет.
     
  17. programming

    programming New Member

    Регистрация:
    26.08.2009
    Сообщения:
    190
    Одобрения:
    3
    Репутация:
    0
    Это то, что нужно.
    Только теперь другая как-бы проблема.
    Получился вот такой код:
    PHP:
    <?php
    $text 
    "I have a page with an image floating on the right, and text printed out beside the image (to the left). I used wordwrap  to wrap the text so that it doesn't go over the image, but sometimes the text would go down beyond the image (vertically beyond the image, where the height of the text was more than the height of the image), resulting in wrapped text that doesn't need to be wrapped. So I came up with this method that takes a number max-lines to wordwrap, and then the rest either no wrapping, or wordwrapping at a different number of characters:";
    $text=wordwrap($text100"\r\n"true);
    $width 500;
    $col=explode("\n"$text);
    $n=count($col)+1;
    $im=imagecreate($width$n*13); 
    $background_color imagecolorallocate($im255255255); 
    $text_color imagecolorallocate($im2331491);
    imagettftext($im701015$text_color'arial.ttf'$text);
    imagepng($im're.png');
    ?>
    Всё отлично работает. Но есть маленькая проблема, как я понимаю, с wordwrap. С аглийскими буквами - 100 - это действительно 100 символов, а вот когда я загоняю русский текст - получаю переносы, через каждые 50 символов. Можно это как-нибудь поправить?
     
  18. Gifts

    Gifts Green member

    Регистрация:
    25.04.2008
    Сообщения:
    2 494
    Одобрения:
    807
    Репутация:
    614
    programming перевести текст в 8 битную кодировку (например windows-1251), разбить, и вернуть обратно UTF-8. http://php.net/iconv
     
    _________________________
    Это одобряет 1 пользователь.
  19. Andres

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

    Регистрация:
    4.04.2008
    Сообщения:
    320
    Одобрения:
    119
    Репутация:
    0
    Как можно удалить последнее поле из таблицы, если результат ложь

    if (...){
    ...
    }
    else{
    DELETE самое последнее поле из таблицы
    }
    думал может так
    DELETE MAX(id) FROM table

    но не катит(
    и то, я же говорю ему удалить макс ид а не всё поле
     
    #15999 Andres, 30.07.2010
    В последний раз редактировалось: 30.07.2010
  20. SHiNiGaMi

    SHiNiGaMi Banned

    Регистрация:
    3.01.2010
    Сообщения:
    382
    Одобрения:
    55
    Репутация:
    15
    примени ту штуку max(id), сохрани в переменную, а потом сделай DELETE * from `table` WHERE id= $maxid
     
    Это одобряет 1 пользователь.
Статус темы:
Тема закрыта для ответов.