PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (3): « 1 [2] 3 »

> Найдено сообщений: 40
p33t Отправлено: 12 Июня, 2015 - 14:56:39 • Тема: Итератор в Замыкании (не срабатывает) ??? • Форум: Вопросы новичков

Ответов: 2
Просмотров: 188
Всем привет.
Может тут все и просто, но мне не понятно почему, в безымянной функции не срабатывает выражение for().
Вот кусочек кода:

PHP:
скопировать код в буфер обмена
  1. $result = mysql_fetch_array($row, MYSQL_NUM);
  2.  
  3.         $final = preg_replace_callback('/value=\"\"|<\/textarea>/',
  4.         function($matches) use ($result){
  5.                 for ($i=0; $i<count($matches); $i++){
  6.                         echo $i;
  7.                         $matches[$i] = str_replace('value=""', 'value="'.$result[$i].'"',
  8.                         $matches[$i]);
  9.                 }
  10.         }, $fields);


Дело в том, что где я вызываю $i - на экране выводит 0000000.
Правда for() считает их правильно - выдает соответствующее число нолей.
Но почему ноль ???

Подскажите кто знает, пожалуйста.

Заранее спасибо.

А вообще это я пытаюсь сделать динамическую форму, которая будет заполняться в зависимости существует запись или нет. Это лишь кусочек того кода. Может эта инфа пригодиться при решении вопроса...
p33t Отправлено: 06 Января, 2015 - 13:44:03 • Тема: mysql_query не работает с переменными. • Форум: Вопросы новичков

Ответов: 5
Просмотров: 225
Все, разобрался...

Мелкий пишет:
Во-первых, вторым аргументом указывается список символов. У вас символы явно упорядочены, что похоже на логическую ошибку.
Во-вторых, вот этот вот &nbsp наводит на мысль, что и в запросе написана какая-то глупость в том же духе.

Дело в том, что когда я вставлял вторым аргументом "," ни чего не менялось. А мне надо было убрать последнюю запятую из строки. Вот так я и выкрутился. С &nbsp все сработало.

Но пытался с помощью конкатенации составить строку запроса из элементов массива.
Да, звучит как то глупо Хм
Но все работало когда в массиве был один элемент.
И сама строка вроде как OK. В браузере строка выглядела как надо. Но вот в запросе выдает ошибку.
Я взял все запихал в массив, implode'нуллл его и все заработало.

Всем спасибо за помощь.
Вопрос исчерпан. Радость
p33t Отправлено: 06 Января, 2015 - 12:35:28 • Тема: mysql_query не работает с переменными. • Форум: Вопросы новичков

Ответов: 5
Просмотров: 225
esterio пишет:
а это уже не подходит

Я пробовал и без `` то есть и экранировать там было не чего. Но все равно не работает.

DelphinPRO пишет:
Добавь строчку, чтобы увидеть сообщение ошибки, которое выдает база.

Вставил и вот что выдает:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' `isbn-sn`, `issue_date`, `author`, `publisher`, `descriptio' at line 1

Но где там ошибка синтекса .???

Еще один вопрос!!!
Где то прочитал, что просто вставлять переменные в sql запрос, не рекомендуют. На сколько я понял, дело лишь в БЕЗОПАСНОСТЬ.
Так ли это ???
(Добавление)
Не работает.... Нахмурился
Пробовал скопировать var_dump($select) с браузера, вставить в консоль phpMyAdmin, и все работает...

А из файла - ошибит...
p33t Отправлено: 06 Января, 2015 - 11:45:35 • Тема: mysql_query не работает с переменными. • Форум: Вопросы новичков

Ответов: 5
Просмотров: 225
Привет всем обитателям этого умного места.

Вопрос в том, что если вставляю переменную в строку запроса - выкидывает FALSE
Вот код для наглядности:

PHP:
скопировать код в буфер обмена
  1. $get = rtrim($get, ",&nbsp");
  2.  
  3. $select = "SELECT $get FROM store WHERE id=6";
  4. //var_dump($select) - SELECT `title`, `isbn-sn`, `issue_date`, `author`, `publisher`, `description`, `content`, `price` FROM store WHERE id=6
  5.  
  6. $row = mysql_query($select, $this->connect);
  7. $result = mysql_fetch_array($row, MYSQL_NUM);


Строка запроса собирается несколькими методами, но в итоге, содержание вроде бы в порядке...???
Пробовал подставить $get = "title, isbn-sn,........";
И все работает.
Так же пробовал экранировать вот так:

Но без результата.

Что не так, Подскажите пожалста...
Спасибо.
p33t Отправлено: 29 Декабря, 2014 - 18:04:26 • Тема: Не Деструктируется Родитель !!! • Форум: Вопросы новичков

Ответов: 6
Просмотров: 227
Ок.
Как было выше, огромное спасибо за помощь и ваше время.

Проведу рисер4, а там будет видно...

Все, тема закрыта.
p33t Отправлено: 29 Декабря, 2014 - 16:55:30 • Тема: Не Деструктируется Родитель !!! • Форум: Вопросы новичков

Ответов: 6
Просмотров: 227
То есть если грамотно, то мне надо все методы связанные с работой в БД (и подключением конечно же) запихать в один класс ?????
Ну а дальше ?
Сделать производные от него и юзать те, что надо ???

Ну а что до конструктора и деструктора, я все понял...
(Добавление)
Уже который раз убеждаюсь, в том, что все дело либо в мелочах либо в НЕВНИМАТЕЛЬНОСТИ Радость

esterio спасибо здоровенное вам за помощь...

Все разобрался, просто невнимательность, из за которой я потратил 2 дня...
Это мне присуще

Единственно если бы вы могли мне подсказать что может означать эта цифра в скобках:


Это var_dump(); дескриптора подключения.

Неужели у меня 8 подключений одновременно ????
Или это #... , чего ээто # ???)))
p33t Отправлено: 29 Декабря, 2014 - 09:30:28 • Тема: Не Деструктируется Родитель !!! • Форум: Вопросы новичков

Ответов: 6
Просмотров: 227
esterio пишет:
конуструктор Main ничего не возвращает (он и не должен) что вы хотите присвоить в $this->db_connect?


Ну,, в конструкторе Main класса, в $this->db_connect я запихиваю дескриптор подключения. А возвращает его - стат метод connect.

esterio пишет:
если вы про синглтон, то у вас никогда не будет екземпляров Admin и Login

Ну вот это я и не понял...
Я ведь могу создавать объекты этих классов и один из них работает даже очинь успешно. Растерялся

esterio пишет:
плюс включение ошибок вам выведет ошибку при переопределении методов дочерних классов

В этом случае так у меня и получается. Тоже самое, когда обращаюсь к методу который находится в Main

esterio пишет:
ну и на последок, при создании каждого обьекта у вас будет создаваться коннект с базой а это плохая архитектура

Наверно вся идея синглтона в том, чтобы соединение открывалось только один раз...
А в этом случае, при попытке создать еще одно подключение, мне выдает, что "не может переопределить..." Поэтому хотя бы это работает Радость
И вот изза чего я пытаюсь закрыть конект, чтобы открыть его во втором классе.


Ну и вообще, большое спасибо за помощь и ссылку на инфу. Буду изучать, если что вернусь с наболевшим )))

Буду всем признателен за комментарии к этому сообщению...
Еще раз спасибо
p33t Отправлено: 29 Декабря, 2014 - 00:31:13 • Тема: Не Деструктируется Родитель !!! • Форум: Вопросы новичков

Ответов: 6
Просмотров: 227
Всем привет !!!

Вот вопрос:
Есть класс с подключением, Родитель.
PHP:
скопировать код в буфер обмена
  1.         class Main{
  2.  
  3.                 private static $obj;
  4.                 protected $db_connect;
  5.                
  6.                 private function __construct (){
  7.                                 $link = mysql_connect ('localhost','root','3141592653');
  8.                                 mysql_query("SET NAMES utf8");
  9.                                 mysql_select_db ('test_db', $link) or die ('Can\'t connect:' .mysql_error().'</br>Error #:'. mysql_errno());
  10.                                 $this -> db_connect = $link;
  11.                 }
  12.                
  13.                 protected static function connect(){
  14.                         if (self::$obj === NULL){
  15.                                 self::$obj = new Main();
  16.                                 return self::$obj->db_connect;
  17.                         }
  18.                 }
  19.                 protected function test_method(){
  20.                         echo "test ok";
  21.                 }
  22.                 public function __destruct (){
  23.                                 echo "main destruct";
  24.                 }
  25.         }


К нему подключены два класса
Один дочерний:

PHP:
скопировать код в буфер обмена
  1.  
  2.         class Login extends Main{
  3.        
  4. protected $db_connect;
  5.  
  6.                 public function __construct(){
  7.                         $this->db_connect = parent::connect();
  8.                 }
  9.  
  10. тра-ля-ля методы...
  11.  
  12.                 public function __destruct (){
  13.                         parent::__destruct();
  14.                         echo "child destruct";
  15.                 }
  16.          }
  17.  


и второй дочерний:

PHP:
скопировать код в буфер обмена
  1.  
  2. class Admin extends Main{
  3.        
  4.                 protected $db_connect;
  5.                
  6.                 public function __construct(){
  7.                         $this->db_connect = parent::connect();
  8.                 }
  9.  
  10. Тра-ля-ля методы...
  11. Ну и остальная лабуда...      
  12.  


Функционал - подключение происходит через клсаа Main. Создается обьект статической функцией->конструктором и тд. Если объект создан, то второй не создается.
В конструкторе, подключение используется сначала классом Login, а затем Admin.
В первом из них, все ок.
А вот во второй никак не могу провести коннект.
Я понимаю, что в моем случае, надо unset обьект подключения. Но и это не выходит. Т.к. не могу обратиться ни к одному методу в классе Main. Даже через дочерние классы. Пробовал в test_method - не обращается. Пишет, что не определен Main::test_method.
А деструктор вообще не запускается...

Подскажите что делаю не так ???
p33t Отправлено: 25 Декабря, 2014 - 19:06:03 • Тема: Вопрос по поводу Экономии Ресурсов... • Форум: Работа с СУБД

Ответов: 2
Просмотров: 803
Понял. Спасибо большое за помощь.

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

Еще раз спасибо.
p33t Отправлено: 21 Декабря, 2014 - 19:26:44 • Тема: Вопрос по поводу Экономии Ресурсов... • Форум: Работа с СУБД

Ответов: 2
Просмотров: 803
Всем привет

Вот есть у меня этот косячный код ниже:

PHP:
скопировать код в буфер обмена
  1.         class Main{
  2.        
  3.                 private static $chk;
  4.                 protected $db_connect;
  5.                
  6.                 public function __construct (){
  7.                         if (!isset(self::$chk)){
  8.                                 $link = mysql_connect ('localhost','root','3141592653');
  9.                                 mysql_query("SET NAMES utf8");
  10.                                 mysql_select_db ('test_db', $link) or die ('Can\'t connect:' .mysql_error().'</br>Error #:'. mysql_errno());
  11.                                 $this -> db_connect = $link;
  12.                                 self::$chk = TRUE;
  13.                         }
  14.                         else {
  15.                                 echo "Close existing con";
  16.                         }
  17.                 }
  18.  
  19.                 public function __destruct (){
  20.                         if ($this ->$chk===TRUE){
  21.                                 mysql_close ($this -> db_connect);
  22.                                 unset ($this -> db_connect);
  23.                                 unset ($chk);
  24.                         }
  25.                 }
  26.         }


Есть пару производных классов от этого, которые используют этот Main, для подключения к базе данных и дальнейшей абра-кадабры с ней.

ВОПРОС:
Если у меня есть 3 метода которые используют Main для подключения к БД, то к концу моего скрипта, у меня будет 3 открытых подключения или 1 ????
Если учесть, что подключаемся все время к одной и той же базе с тем же паролем и логином и хостом.
p33t Отправлено: 18 Декабря, 2014 - 11:01:34 • Тема: foreach шфлит !!! • Форум: Вопросы новичков

Ответов: 2
Просмотров: 96
Файра-баг показывает:

PHP:
скопировать код в буфер обмена
  1. <option selected="selected" value="title ASC">Order A-Z</option>
  2. <option></option>
  3. <option value="title DESC">Order Z-A</option>
  4. <option></option>
  5. <option value="issue_date ASC">Order 0-9</option>
  6. <option></option>
  7. <option value="issue_date DESC">Order 9-0</option>
  8. <option></option>
  9.  

(Добавление)
Ай блил...
Простите дурня за невнимательность...))))
(Добавление)
Все работает...
Спасибо

Радость

второй день голову ломаю )))
p33t Отправлено: 18 Декабря, 2014 - 10:49:44 • Тема: foreach шфлит !!! • Форум: Вопросы новичков

Ответов: 2
Просмотров: 96
Всем привет.
Обращаюсь к мудрым людям етого сайта, так как не разу еще не подвели и в помощи не отказали. Не смотря на то какие глупые вопросы бы тут задавали )))

Есть метод:

PHP:
скопировать код в буфер обмена
  1. public function filter($ord){
  2.                 $options="";
  3.                         foreach ($this->ord_opt as $key=>$value){
  4.                         if (preg_match("/^$value$/", $ord)){   
  5.                                         $options .= "<option value=\"$value\" selected=\"selected\">$key<option/>";
  6.                                 }
  7.                                 else{
  8.                                         $options .= "<option value=\"$value\">$key<option/>";
  9.                                 }
  10.                         }
  11.                         return $options;
  12.                 }


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

Дело наверно в самой строке <optio... Которая передается при удовлетворении условия if или else. Так как я вставлял просто echo $value; и все выводилось без проблем и лишних пустых строк.

Подскажите, в чем может быть проблема ?
p33t Отправлено: 18 Декабря, 2014 - 10:04:58 • Тема: Как запретить возврат на предыдущую страницу ???? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 1218
Ok. Понял, буду искать. Спасибо.

И еще раз всем большое спасибо за помощь.
p33t Отправлено: 17 Декабря, 2014 - 13:12:27 • Тема: Как запретить возврат на предыдущую страницу ???? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 1218
Радость

Прописал value=""
И все равно не работает ....
При нажатии кнопки назад, форма все равно заполнена )))))

Может дело в каких нить локальных настройках.

Ну блин, я не знаю что еще предложить Не понял
(Добавление)
Все !!!
Прокатило.
)))))

Я просто хреново обновлял все дело, когда вносил какие либо изменения )))))
Дурачино.


Кстати работает и без value=""

Просто прилепил к форме autocomplete="off" и пджфнг !!!
ВсеОК !!!


Всем - Всем Здоровенное спасибо за помощь...!!!!
(Добавление)
Вот только вопрос...
Sail говорил про роботов и т.д.
Как от этого дела можно защитить совю форму ???
p33t Отправлено: 16 Декабря, 2014 - 10:42:53 • Тема: Как запретить возврат на предыдущую страницу ???? • Форум: Вопросы новичков

Ответов: 11
Просмотров: 1218
Щас сделал эксперимент. Зарегился на mail.ru после создания аккаунта, нажал кнопку "предыдущая страница". Меня вернуло на страницу с чистой регистрационной формой.

Спасибо за совет с JS. Но пока этой технологией еще не пользовался...

Цитата:
Пользователь (или бот) может бесконечно заполнять предоставленную ему форму одними и теми-же данными.
Или даже подменять данные в форме перед отправкой.


Как в таком случае предотвратить такую ситуацию?

У меня приложение - интернет витрина. Есть кнопка заказать, которая перекидывает на страницу с формой которую я выложил выше. После отправки формы, высылается письмо и редирект на главную.

Вопрос в том, можно ли сделать поведение такое как в mail.ru ?
Если нет, так как предотвратить отправку тех же данных в форме ?

Страниц (3): « 1 [2] 3 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB