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

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

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

    Gervorovski Banned

    Joined:
    28 Sep 2010
    Messages:
    159
    Likes Received:
    12
    Reputations:
    0
    Иногда нужно вывести текст не полностью, а – только заданной длинны.
    Например, нужно вывести первые 200 символов текста без разрыва слов.
    Решение такое:

    PHP:
    $n =  strpos ($text.' '' '200)-1;
    $text substr ($text1,  0, (strlen($n) < 200 200 $n));
    или так:

    PHP:
      if (strlen($text)>200)
      {
          
    $text substr ($text0,strpos ($text" "200)); echo $text;
      }
      else echo 
    $text;
    А есть ли ещё способы?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Gervorovski Ваш вариант работает? Попробуйте это:
    PHP:
    $len 200;
    $text substr($text0strrpos(substr$text0$len ), ' ')));  
     
    _________________________
  3. geforse

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

    Joined:
    2 Mar 2008
    Messages:
    617
    Likes Received:
    290
    Reputations:
    1
    Как реализовать JS escape() на php ?
     
  4. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    geforse http://php.net/urlencode http://php.net/rawurlencode
     
    _________________________
    1 person likes this.
  5. Dimaus

    Dimaus Banned

    Joined:
    7 Nov 2008
    Messages:
    30
    Likes Received:
    1
    Reputations:
    0
    Так вопрос такой.
    Имею index.php?k=next&id=5
    на этой странице есть 2 формы
    1 инпут текстовый. пока ее не введу 2я форма скрыта
    туда ввожу любое натур. число
    2 появляется новые инпуты в количестве введенном в предыдущей форме. Каждая форма имеет name=\"cname".$i"\" . Где $i число 1 до введенного числа.

    Нужно записать поочередно каждый инпут в бд mysql. Как с помощью цикла это можно автоматизировать.
    у каждой формы новый $_POST['cname1'] $_POST['cname2'] и тд
    В этом у меня и загвоздка, есть варианты? как по конкретному запросу, так и по его логике
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Dimaus Сперва прочитайте это - https://forum.antichat.ru/thread30641.html

    Потом замените name=\"cname".$i"\" на name=\"cname[".$i"]\"

    Тогда в коде:
    PHP:
    $tabellenname="category";
    foreach(
    $_POST['cname'] as $cname)
    {
    $sql="INSERT INTO $tabellenname(`rest`, `cname`, `date`) VALUES('".$id."', '".$cname."', now())";
    mysql_query($sql) or die(mysql_error());
    }
    Плюс придется проверять, что вам передали массив
     
    _________________________
  7. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    Так не пойдёт.
    Давайте сделаем сравнение:

    PHP:
    <?php
    $str
    =" *фs@*/+"// исходная строка для наглядности - utf8
    // в начале строки не видно первые 2 символа:
    // 1. chr(32) или 0x20 2. chr(160) или 0xA0
    // для сохранности работоспособности скрипта при копировании:
    $str=base64_decode('IMKg0YRzQCovKw==');
    echo 
    urlencode($str).'<BR>';
    echo 
    rawurlencode($str).'<BR>';
    echo 
    '<script>document.write(escape("'.addslashes($str).'"));</script>';
    ?>
    вывод строки после urlencode, rawurlencode, escape соответственно:

    +%C2%A0%D1%84s%40%2A%2F%2B
    %20%C2%A0%D1%84s%40%2A%2F%2B
    %20%u0412%A0%u0421%u201Es@*/+

    зелёный - идентичное преобразование :D

    для cp1251

    +%A0%F4s%40%2A%2F%2B
    %20%A0%F4s%40%2A%2F%2B
    %20%A0%u0444s@*/+
     
    #18547 roxblnfk, 29 May 2011
    Last edited: 29 May 2011
  8. Nek1t

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

    Joined:
    7 Mar 2008
    Messages:
    181
    Likes Received:
    16
    Reputations:
    1
    http://ru.php.net/urldecode
    Посмотрите в комментариях функции unicode_urldecode() и подобные.
     
  9. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    всем привет,как делаються гет запрос вида
    index.php?k=next&id=5 ?
    покажите пример и где можно прочитат про это?
     
  10. Andres

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

    Joined:
    4 Apr 2008
    Messages:
    320
    Likes Received:
    119
    Reputations:
    0
    так и делается, а что собственно не понятно?
    ставим ссылочку, в нее подставляем параметры через амперсант, принимаем, обрабатываем, выводим

    index.php?k=$next&amp;id=$id
    принимаем $k = $_GET['next'] так же и с ид;
    обрабатывем функциями
    и выводим
     
  11. Dimasof

    Dimasof New Member

    Joined:
    24 May 2011
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Ребята подскажите как убрать позицию в модуле adsmanager advanced search

    Вот сам код поиска:
    PHP:
    <div class="adsmanager_inner_box">
                <div align="left">
                <table id="adsmanager_fieldset_s">
                <form action="<?php echo sefRelToAbs("index.php");?>" method="get">
                <tr><td><?php echo ADSMANAGER_FORM_CATEGORY?></td>
                <td><select name="catid" >            
                <option value="0" <?php if ($catid == 0) echo 'selected="selected"'?>><?php echo ADSMANAGER_MENU_ALL_ADS?></option>
                <?php mods_selectCategories(0,"",$cats,$catid,1,0); ?>
                </select></td></tr>
                <input type="hidden" name="option" value="<?php echo $option?>" />
                <input type="hidden" name="page" value="show_result" />
                <?php 
                
    foreach($fields_searchable as $fsearch) {
                    if ((
    $catid == 0)||(strpos($fsearch->catsid",$catid,") !== false)||(strpos($fsearch->catsid",-1,") !== false))
                    {
                        echo 
    "<tr><td>".mods_getLangDefinition($fsearch->title)."</td><td>";
                        switch(
    $fsearch->type)
                        {
                            case 
    'checkbox':
                                if(
    mosGetParam$_GET$fsearch->name)=='1'){
                                    echo 
    "<input class='inputbox' type='checkbox' name='$fsearch->name' value='1' checked/>\n";
                                }else{
                                    echo 
    "<input class='inputbox' type='checkbox' name='$fsearch->name' value='1' />\n";
                                }
                                break;
                            case 
    'multicheckboximage':
                                echo 
    "<table class='cbMulti'>\n";
                                
    $k 0;
                                
    $ng 0;
                                for (
    $i=$i $fsearch->rows;$i++)
                                {
                                    echo 
    "<tr>\n";
                                    for (
    $j=$j $fsearch->cols;$j++)
                                    {
                                        
    $fieldvalue = @$field_values[$fsearch->fieldid][$k]->fieldvalue;
                                        
    $fieldtitle = @$field_values[$fsearch->fieldid][$k]->fieldtitle;

                                        
    $fieldtitle "<img src='$mosConfig_live_site/images/$option/fields/$fieldtitle' alt='$fieldtitle' />";

                                        echo 
    "<td>\n";
                                        if (isset(
    $field_values[$fsearch->fieldid][$k]->fieldtitle))
                                        {        
                                            if(
    $fieldvalue==$_GET[$fsearch->name][$ng]){
                                                echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."[]' value='$fieldvalue' checked/>&nbsp;$fieldtitle&nbsp;\n";
                                                
    $ng++;
                                            }else{
                                                echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."[]' value='$fieldvalue'/>&nbsp;$fieldtitle&nbsp;\n";
                                            }
                                        }
                                        echo 
    "</td>\n";
                                        
    $k++;
                                    }
                                    echo 
    "</tr>\n";
                                }
                                echo 
    "</table>\n";
                                break;
                            case 
    'multicheckbox':
                                echo 
    "<table class='cbMulti'>\n";
                                
    $k 0;
                                
    $ng 0;
                                for (
    $i=$i $fsearch->rows;$i++)
                                {
                                    echo 
    "<tr>\n";
                                    for (
    $j=$j $fsearch->cols;$j++)
                                    {
                                        
    $fieldvalue = @$field_values[$fsearch->fieldid][$k]->fieldvalue;
                                        
    $fieldtitle = @$field_values[$fsearch->fieldid][$k]->fieldtitle;
                                        if (isset(
    $fieldtitle))
                                            
    $fieldtitle=mods_getLangDefinition($fieldtitle);
                                        echo 
    "<td>\n";
                                        if (isset(
    $field_values[$fsearch->fieldid][$k]->fieldtitle))
                                        {        
                                            if(
    $fieldvalue==$_GET[$fsearch->name][$ng]){
                                                echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."[]' value='$fieldvalue' checked/>&nbsp;$fieldtitle&nbsp;\n";
                                                
    $ng++;
                                            }else{
                                                echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."[]' value='$fieldvalue'/>&nbsp;$fieldtitle&nbsp;\n";
                                            }
                                        }
                                        echo 
    "</td>\n";
                                        
    $k++;
                                    }
                                    echo 
    "</tr>\n";
                                }
                                echo 
    "</table>\n";
                                break;
        
                            case 
    'radio':
                            case 
    'select':
                                echo 
    "<select id='".$fsearch->name."' name='".$fsearch->name."'>\n";
                                echo 
    "<option value='' >&nbsp;</option>\n";    
                                if (isset(
    $field_values[$fsearch->fieldid])) {
                                foreach(
    $field_values[$fsearch->fieldid] as $v)
                                {
                                    
    $ftitle mods_getLangDefinition($v->fieldtitle);
                                    if(
    mosGetParam$_GET$fsearch->name,'')==$v->fieldvalue){
                                        echo 
    "<option value='$v->fieldvalue' selected>$ftitle</option>\n";
                                    }else{
                                        echo 
    "<option value='$v->fieldvalue' >$ftitle</option>\n";
                                    }
                                }
                                }
                                
                                echo 
    "</select>\n";
                                break;
                            case 
    'file':
                                if(
    mosGetParam$_GET$fsearch->name,'')==1){
                                    echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."' value='1' checked/>&nbsp;$fsearch->fieldtitle&nbsp;\n";
                                }else{
                                     echo 
    "<input class='inputbox' type='checkbox' name='".$fsearch->name."' value='1'/>&nbsp;$fsearch->fieldtitle&nbsp;\n";
                                }
                                break;
                            case 
    'multiselect':
                            
                                echo 
    "<select name=\"".$fsearch->name."[]\" multiple='multiple' size='$fsearch->size'>\n";    
                                if (isset(
    $field_values[$fsearch->fieldid])) {
                                
    $ng 0;
                                foreach(
    $field_values[$fsearch->fieldid] as $v)
                                {
                                    
    $ftitle mods_getLangDefinition($v->fieldtitle);
                                    if(
    $v->fieldvalue==$_GET[$fsearch->name][$ng]){    
                                        echo 
    "<option value='$v->fieldvalue' selected>$ftitle</option>\n";
                                        
    $ng++;
                                    }else{
                                        echo 
    "<option value='$v->fieldvalue' >$ftitle</option>\n";
                                    }
                                }
                                }
                                
                                echo 
    "</select>\n";
                                break;
                                
                             case 
    'price':  //ЦЕНА ОТ И ДО
                        
                            
    ?>    
                                <input class="inputbox" type="text" VALUE="1" size="3" maxlength="20" class="inputbox" name="pr_ot" /> до <input class="inputbox" type="text" size="3" maxlength="20" name="pr_do" />
                                
                                <?php
                                
    break;    
                        
                            break;    
                        
                            break;
                                
                            case 
    'textarea':
                            case 
    'number':
                            
                            case 
    'emailaddress':
                            case 
    'url':
                            case 
    'text':
                        }
                        echo 
    "</td>";
                    
                  }
                }
    ?>
                </table></div>
                <script>
                function raskr(containerid){var gg=document.getElementById(containerid);if(gg.style.display=="block"){gg.style.display="none";}else{gg.style.display="block";}}
                function wwwt(){raskr('pppt');raskr('pppt2');}
                </script>
                <center><input type="submit" id="pppt" style="display:block;" onClick="wwwt();" value="Показать" <?php echo ADSMANAGER_SUBMIT_BUTTON?>" /></center>
                <center><span id="pppt2"  style="display:none;" ><?php echo ADSMANAGER_WAIT?></span></center>
                <input type="hidden" name="Itemid" value="<?php echo $itemid;?>" />
                </form>             
            </div>
    Нужно убрать одну позицию, вот к примеру на сайте: http://krascapital.ru

    Убираем поле "Тип", и нужно чтоб это поле не отображалось только на главной странице.

    Бился-бился, так и не понял(

    Решение:
    В админке добавить полю "описание" которое нужно убрать, напрмер 123. В запросе модуля поиска подправить запрос с:
    PHP:
    $database->setQuery"SELECT f.* FROM #__".$dboption."_fields AS f ".
                       
    "WHERE f.searchable = 1 AND f.published = 1 ORDER by f.ordering" );
    на:
    PHP:
    $database->setQuery"SELECT f.* FROM #__".$dboption."_fields AS f ".
                       
    "WHERE f.searchable = 1 AND f.published = 1 AND f.description <> 123 ORDER by f.ordering" );
    т.е. показаны будут все поля кроме тех у которых описание равно 123
     
    #18551 Dimasof, 30 May 2011
    Last edited: 4 Jun 2011
  12. lex(SL)

    lex(SL) New Member

    Joined:
    21 Nov 2010
    Messages:
    1
    Likes Received:
    1
    Reputations:
    0
    Dimasof

    Это раздел для новичков,а не "пишем/редактируем программы на халяву" думаю к сообщению выше приемлема цена вопроса, думаю мало у кого возникнет желание твой скрипт изучать.

    Nelz

    Добавлю к сообщению Andres что отправлять значения можно не только по ссылке, но через форму как в случае с POST запросом, только форма будет выглядеть примерно:
    <form action="index.php" method="GET">
    Ну а как подхватывать переменную уже написано, вообще GET используется в основном для удобной выборки из БД и проставлению ссылок под каждое выбраное значение, как вариант id таблицы равно переменной GET, ну или там для реф системы, для всего остального есть POST.
     
    #18552 lex(SL), 31 May 2011
    Last edited: 31 May 2011
  13. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    del////
     
    #18553 Nelz., 31 May 2011
    Last edited: 31 May 2011
  14. Nek1t

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

    Joined:
    7 Mar 2008
    Messages:
    181
    Likes Received:
    16
    Reputations:
    1
    Nelz.
    Точку с запятой после строки с foreach зачем поставил? Убери ее.
     
  15. Nelz.

    Nelz. Member

    Joined:
    2 Aug 2010
    Messages:
    151
    Likes Received:
    7
    Reputations:
    0
    пнятно,а что пхп не собщает об этом :confused:
     
  16. Nek1t

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

    Joined:
    7 Mar 2008
    Messages:
    181
    Likes Received:
    16
    Reputations:
    1
    Потому, что с точки зрения PHP (и не только) некорректного здесь ничего нет. Просто цикл без тела.
    В итоге весь ассоциативный массив вхолостую обходится в цикле, а в $field_name остается значение последней ячейки.
    Подробнее здесь.
     
    1 person likes this.
  17. dokwill

    dokwill New Member

    Joined:
    25 Jun 2007
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    <?
    $b=array();
    $m=file('in.txt');
    foreach($m as $k => $e)
    {
    if (($e>=0) and ($e<=500)) {$b[$k]=15000;}
    if (($e>=500) and ($e<=700)) {$b[$k]=18000;}
    if (($e>=700) and ($e<=1000)) {$b[$k]=23000;}
    if (($e>=1000) and ($e<=1300)) {$b[$k]=26000;}
    if (($e>=1300) and ($e<=1600)) {$b[$k]=29000;}
    if (($e>=1600) and ($e<=1900)) {$b[$k]=34000;}
    if (($e>=1900) and ($e<=2100)) {$b[$k]=38000;}
    if (($e>=2100) and ($e<=2400)) {$b[$k]=42000;}
    if (($e>=2100) and ($e<=2400)) {$b[$k]=44000;}
    if (($e>=2400) and ($e<=2700)) {$b[$k]=46000;}
    if (($e>=2700) and ($e<=3000)) {$b[$k]=48000;}
    if (($e>=3000) and ($e<=3300)) {$b[$k]=53000;}
    if (($e>=3300) and ($e<=3600)) {$b[$k]=56000;}
    if (($e>=3600) and ($e<=3900)) {$b[$k]=60000;}
    if (($e>=3900) and ($e<=4200)) {$b[$k]=65000;}
    if (($e>=4200) and ($e<=4500)) {$b[$k]=70000;}
    if (($e>=4500) and ($e<=4800)) {$b[$k]=75000;}
    if (($e>=4800) and ($e<=5100)) {$b[$k]=80000;}
    if (($e>=5100) and ($e<=5400)) {$b[$k]=85000;}
    if (($e>=5400) and ($e<=5700)) {$b[$k]=90000;}
    if (($e>=5700) and ($e<=6000)) {$b[$k]=95000;}

    }

    touch('result.txt'); //создал файл
    $res = fopen ('result.txt',"r+"); //отркыл на запись
    fputs ($res,"$b[$k]"); // записал в файл
    fclose($res);

    print $b[$k]


    ?>

    скрипт пересчета - берет данные из файла in.txt
    там около 1000 числовых значений в столбик.
    должен пересчитать и записать в файл

    проблема в том - что сейчас он пересчитывает последнюю строку файла

    а нужно чтобы каждую строку массива пересчитал и записал

    подкиньте идею
    спасибо
     
  18. Nek1t

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

    Joined:
    7 Mar 2008
    Messages:
    181
    Likes Received:
    16
    Reputations:
    1
    Какой-то статистический скрипт? Опиши словами, что ты пытаешься "пересчитать".
    Вроде у тебя между числами в скрипте прослеживается некая зависимость. Не проще ли было оформить не десяток ветвлений, а один цикл?
    И у тебя каждое число входит в два интервала. Т.е. должно быть либо так:
    PHP:
    if (($e >= 0) and ($e <= 500)) {$b[$k]=15000;}
    if ((
    $e 500) and ($e <= 700)) {$b[$k]=18000;}
    if ((
    $e 700) and ($e <= 1000)) {$b[$k]=23000;}
    Либо тебе нужно if менять на elseif.

    А записывается только последняя строчка потому, что ты запись в файл делаешь уже вне цикла.

    Зачем touch() используешь? Создание файла перед записью решается флагом "w" у fopen().
     
    #18558 Nek1t, 1 Jun 2011
    Last edited: 1 Jun 2011
  19. dokwill

    dokwill New Member

    Joined:
    25 Jun 2007
    Messages:
    21
    Likes Received:
    1
    Reputations:
    0
    интервалов много - и число как раз должно сравниться с подходящим интервалом - и ему присвоят значение этого интервала

    числа в файле in и их около 1000
     
  20. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    dokwill сформулируйте конечную цель, складывается ощущение, что вы пошли не тем путем изначально.

    В принципе, то что вы сейчас хотите - можно решать так:
    PHP:
    $diap = array(array(050015000),
    array(
    50070018000),
    array(
    700100023000),
    array(
    1000130026000),
    array(
    1300160029000),
    array(
    1600190034000));
    $default_value 100500;
    function 
    check($in)
    {
        global 
    $diap$default_value;
        
    $in intval(trim($in));
        foreach(
    $diap as $val) {
            if ((
    $val[0]<=$in) and ($val[1]>=$in)) return $val[2];
        }
        return 
    $default_value;
    }
    $m=file('in.txt');
    $res fopen ('result.txt',"wb");
    foreach(
    $m as $k => $e)
    {
       
    fwrite($rescheck($e)."\r\n");
    }
    fclose($res);
    Это топорное решение в лоб, если вычислять нужно не очень много и не очень часто. Оно позволяет упростить ввод диапазонов, и если диапазоны не подчиняются никакой зависимости.

    Если диапазонов очень много (больще 100) и вычислять нужно часто, то лучше использовать не перебор, а дихотомию отрезков.

    Или же, если диапазоны подчиняются некоторому закону, например в вашем примере от 2100 до 6000 - разбиваются на отрезки длиной 300, а результат изменяется постоянно на 5000, то можно сделать все еще быстрее
     
    _________________________
Thread Status:
Not open for further replies.