Помогите с поиском.

Фанат

oncle terrible
Команда форума
в слове "критиковать" нет буквы "е". будь это программа - она бы вылетела с ошибкой.
"как правильно", я уже писал в этом топике.
и меня ужасает молодое поколение, которое не умеет ни ни писать, ни даже читать.
 

Zzepish

Новичок
Фанат
Может пролистал! Но я никогда не считал, что не знание грамматики- показатель ума. Ибо это сугубо личное
 

Zzepish

Новичок
Фанат
Так?
PHP:
$mk=mysql_real_escape_string($sting);

$result = mysql_query("SELECT * FROM num WHERE invite LIKE '$mk%'");
      
         if(mysql_num_rows($result)>0){

while($row = mysql_fetch_assoc($result)){

     

     $row[]= $row['invite'];

}

тут нужная проверка каждого $row и вывод!

 }

else echo 'Нету ничего';
 

Redjik

Джедай-мастер
Фанат
вон до чего человека довел =)))

Zzepish
1) юзай mysqli
2) делай подстановки (я не про prepared, если интересно прочитай статью фаната на хабре)
3) ненужный цикл, есть функции, которые кладут все данные в массив сразу
 

Фанат

oncle terrible
Команда форума
Zzepish
Не согласен.
На самом деле корреляция очень большая.
Грамматика "начитывается" из книжек. Из них же, традиционно, берутся знания и, в том числе - какие-никакие представления об окружающем мире, ппаттерны поведения - в общем, всякий чужой опыт, который, до известной степени, может заменить сообразительность и личный опыт. Т.е. - сделать человека умным в общепринятом смысле этого слова.
И наоборот - если грамматики нету - читал мало - пищи для ума не было - он и не рос.
 

Фанат

oncle terrible
Команда форума
проверка на mysql_num_rows не имеет смысла.

Как бы делал я.

PHP:
<?
include 'bootstrap.php';
$pagetitle = "Инвайты";
$DATA = dbget(3,"SELECT * FROM num WHERE category=%s",$_GET['category']);

$tpl = "tpl_links.php";
include "tpl_main.php";
Вот весь код.
Как можно заметить, практически весь он здесь значимый, имеющий смысл только в контексте данной страницы. Никаких повторяющихся из кода в код, не несущих никакой полезной нагрузки функций типа prepare или fetch_array.


Весь вывод делается в tpl_links.php:
PHP:
<h2><?=$pagetitle?></h2>
<? if ($DATA): ?>
<ul>
<? foreach($DATA as $row): ?>
  <li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>
<? elseif: ?>
Пока ничего нет
<? endif ?>
В файле bootstrap.php подключаются настройки, часто используемые функции, происходит коннект к БД.
В частности, функция dbget, которая, хоть и неказиста с виду, но даст сто очков вперёд голой PDO.
PHP:
function dbget() {
  /*
  usage: dbget($mode, $query, $param1, $param2,...);
  $mode - "dimension" of result:
  0 - resource
  1 - scalar
  2 - row
  3 - array of rows
  */
  $args = func_get_args();
  if (count($args) < 2) {
    trigger_error("dbget: too few arguments");
    return false;
  }
  $mode  = array_shift($args);
  $query = array_shift($args);
  $query = str_replace("%s","'%s'",$query); 

  foreach ($args as $key => $val) {
    $args[$key] = mysql_real_escape_string($val);
  }

  $query = vsprintf($query, $args);
  if (!$query) return false;

  $res = mysql_query($query);
  if (!$res) {
    trigger_error("dbget: ".mysql_error()." in ".$query);
    return false;
  }

  if ($mode === 0) return $res;

  if ($mode === 1) {
    if ($row = mysql_fetch_row($res)) return $row[0];
    else return NULL;
  }

  $a = array();
  if ($mode === 2) {
    if ($row = mysql_fetch_assoc($res)) return $row;
  }
  if ($mode === 3) {
    while($row = mysql_fetch_assoc($res)) $a[]=$row;
  }
  return $a;
При этом если делать её классом, то получится в сто раз удобнее и мощнее.
К вопросу о том, зачем писать "классами".

Как можно увидеть, весь код очень простой, никаких супер-наворотов. Всё довольно логично и привычно.
Но при этом соблюдаются все базовые принципы постройки приложения.

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

Redjik

Джедай-мастер
Вот начало
PHP:
class PdoWrap extends PDO
{


    public function __construct($dsn,$username = null,$password = null,$options = array())
    {
        try {
            $options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
            parent::__construct($dsn,$username,$password,$options);
            $this->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);
            $this->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo 'Подключение не удалось: ' . $e->getMessage();
        }
    }

}
Думаю завтра допишу, если не очень уж лень будет... может как раз оберну dbget =))
 

Фанат

oncle terrible
Команда форума
у написанного на коленке на форум есть один недостаток - куча косяков.
Только постоянное практическое использование может сделать из абстрактных мечтаний что-то полезное и юзабельное.

здесь кодировка должна передаваться через опции, а не хардкодом. ну или хотя бы хардкодиться только как дефолтное значение
echo 'Подключение не удалось: ' вообще за гранью добра и зла
 

WMix

герр M:)ller
Партнер клуба
в слове "критиковать" нет буквы "е". будь это программа - она бы вылетела с ошибкой.
хорошо когда есть компилер или хотяб интерпретер, который скажет ошибку и место,...

другая мысль... мы люди нам свойственно ошибаться,....


но а вообще ты прав!
 

С.

Продвинутый новичок
хорошо когда есть компилер или хотяб интерпретер, который скажет ошибку и место,...

другая мысль... мы люди нам свойственно ошибаться,....


но а вообще ты прав!
Еще хорошо, когда есть препроцессор, который бессмысленные комментарии из кода убирает.
 

Фанат

oncle terrible
Команда форума
нет, меня не смущают.
но если кто-то хочет повышенной совместимости, то для управляющих структур можно писать длинные.

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

в этом коде очень много плюсов, неочевидных при поверхностном осмотре.
также есть и немало минусов и недостатков.
всё это должно бы вызывать вопросы.
 

Zzepish

Новичок
Фанат
чес слово- я думал, что достаточно mysql_real_escape_string для безопасности базы
 

Фанат

oncle terrible
Команда форума
Это одно из самых фатальных заблуждений среди похапе-сообщества.
при том что на самом деле mysql_real_escape_string не имеет к безопасности вообще никакого отношения.

ну и плюс к тому, писать её всё время руками - это одна из вещей, о которых я говорил. это ужас. это против самого смысла программирования, которое призвано бороться с монотонным повторением. а здесь оно цветёт во всей красе махровым цветом
 
Сверху