Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по printf
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Вопрос по printf

Страниц (1): [1]
 

1. Egorov - 28 Января, 2016 - 09:38:11 - перейти к сообщению
Warning: printf() [function.printf]: Too few arguments in C:\***\articles.php on line ***

Такой вопрос...при выборке данных(включает в себя текст и теги) из бд. Выдаёт такую ошибку, при определённом размере данных. Я делаю так:

CODE (htmlphp):
скопировать код в буфер обмена
  1.   printf("
  2.     <div class='blocks'><a href='/somedelete.php?table=articles&id=$id' class='deletelink round'>Удалить</a>
  3.     <center><h3 class='headers'>Статья №$i</h3></center>
  4.         <form action='/update.php' method='POST'' ENCTYPE='multipart/form-data'>
  5.         <input type='text' name='title' value='$title' class='faqanswer area' required/><br>
  6.         <input type='hidden' name='id' value='$id'/>
  7.         <textarea name='text' class='faqarea area'>$text</textarea><br><br>
  8.         //...
  9.         //...
  10.         <input type='submit' name='submit' value='Сохранить' class='faqbutton button'>
  11.         </form>
  12.         </div>
  13.         ");


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

Если переделать на printf + эхом выводить только текстареа, то всё в порядке. С чем это связано?

Изначально была проблема, что записи из бд выводились не все. На printf даже не подумал вначале. Т.е где меньший объём данных, то можно выводить, как я написал.
2. Viper - 28 Января, 2016 - 10:45:36 - перейти к сообщению
Вам четко написали что вы забыли про аргументы функции.
3. Egorov - 28 Января, 2016 - 14:27:54 - перейти к сообщению
Viper пишет:
Вам четко написали что вы забыли про аргументы функции.

ок, а почему я "забываю аргументы", если данных несколько больше чем в других случаях? но при этом я ничего не меняю в самом коде?
4. Viper - 28 Января, 2016 - 15:14:49 - перейти к сообщению
Egorov причем тут больше/меньше данных? То что вы не видите ошибки, отнюдь не означает что её там нет. В вашем случае это будут "Notice: Undefined variable: ..."
5. Egorov - 28 Января, 2016 - 15:32:29 - перейти к сообщению
Viper пишет:
Egorov причем тут больше/меньше данных? То что вы не видите ошибки, отнюдь не означает что её там нет. В вашем случае это будут "Notice: Undefined variable: ..."

Переменная не предопределена ..извиняюсь, но я совсем не понимаю, где она у меня не определена. Вот целый код...получается не определена $text..т.к если её убрать, то выводит нормально. Но я же её определяю в bindcolumn?

CODE (htmlphp):
скопировать код в буфер обмена
  1.   $res = DB::get()->prepare( "SELECT `id`,`title`,`text`,`img`,`date` FROM `articles` ORDER BY `id` DESC");
  2.   $res->execute();
  3.   $res->bindColumn('id',$id);
  4.   $res->bindColumn('title',$title);
  5.   $res->bindColumn('text', $text);
  6.   $res->bindColumn('img', $image);
  7.   $res->bindColumn('date',$date);
  8.   $i=1;
  9.  
  10.   $res->fetch();
  11.  
  12.     printf("
  13.     <div class='blocks'><a href='somedelete.php?table=articles&id=$id' class='deletelink round'>Удалить</a>
  14.     <center><h3 class='headers'>Статья №$i</h3></center>
  15.         <form action='updatearticles.php' method='post' 'ENCTYPE='multipart/form-data'>
  16.         <input type='text' name='title' value='$title' class='faqanswer area' required/><br>
  17.         <input type='hidden' name='id' value='$id'/>
  18.         <textarea name='text' class='faqarea area'>$text</textarea><br><br>
  19.         <span>Можете изменить изображение, а можете оставить.</span><br><br><span>   <a href='../art_images/$image' target='_blank'>Просмотреть</a></span><br><br>
  20.         <input type='file' class='file-upload' name='img'/>
  21.         <input type='submit' name='submit' value='Сохранить' class='faqbutton button'>
  22.         </form>
  23.         </div>
  24.         ");
  25. $i++;


while не скопировал, но не суть..
6. Viper - 28 Января, 2016 - 23:03:57 - перейти к сообщению
Egorov пишет:
но я совсем не понимаю, где она у меня не определена
http://php.net/manual/ru/function.printf.php ВНЕЗАПНО
7. Panoptik - 29 Января, 2016 - 01:15:25 - перейти к сообщению
значит так. идем в мануал и читаем внимательно описание функций и операторов
print
echo
printf \ sprintf и тд
семейство функций printf предназначено для подстановки переменных с определенными типами в строки по плейсхолдеру

пример выведет фразу "Привет, друг"

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

пример
PHP:
скопировать код в буфер обмена
  1. printf('Привет, %s. Я вчера видел %s, в городе %s', 'друг', 'Васю', 'баре');


ваша проблема заключается в том что вы в строку шаблона подставляете переменные и понятия не имеете какой паттерн генерируется из-за вхождений переменных.
предположительно в переменной $text имеются спец последовательности %s %d %f, поэтому функция ищет для них аргументы, которые вы не передаете

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

решение: используйте echo или print

дополнительно: учимся дебажить и читаем [url]phpfaq.ru/debug[/url] [url]phpfaq.ru/na_tanke[/url]
8. Egorov - 29 Января, 2016 - 12:09:50 - перейти к сообщению
Спасибо за ответы, я про placeholder'ы знал, но думал, что так тоже можно..а про принт просто и вовсе не знал) еще раз спасибо.

 

Powered by ExBB FM 1.0 RC1