Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помоигите решить
 
 автор: TavRoX   (06.11.2010 в 17:36)   письмо автору
 
 

помогите решить пожалуйста

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

         <?php 
if (isset($title) && isset($meta_d) && isset($meta_k) && isset($img) && isset($albom))
{
    
        
$patt 'src';
$pos1 strpos($img$patt) + strlen($patt) + 2;
$pos2 strpos($img"\""$pos1);

 
$img2 trim(substr($img$pos1$pos2 $pos1));    
        
        
        
        
    
$title stripslashes($title);

$title htmlspecialchars($title);
/* Здесь пишем что можно заносить информацию в базу */
$result mysql_query ("INSERT INTO photo (title,meta_d,meta_k,albom,img) VALUES ('$title','$meta_d','$meta_k','$albom','$img2')");

  Ответить  
 
 автор: TavRoX   (06.11.2010 в 19:39)   письмо автору
 
   для: TavRoX   (06.11.2010 в 17:36)
 

в другом месте код отлично работает а тут нехочет
может просто потому что там идет чисто вывод инфы а тут внесение? хотя

  Ответить  
 
 автор: Trianon   (06.11.2010 в 19:52)   письмо автору
 
   для: TavRoX   (06.11.2010 в 17:36)
 

 <?php 
if (isset($title) && isset($meta_d) && isset($meta_k) && isset($img) && isset($albom))


Где определены все эти переменные?
Где определены переменные вроде $meta_k?
Почему у Вас отключен вывод диагностики?
Почему Вы сперва спрашиваете, а только потом начинаете разглядывать то, что написали?

  Ответить  
 
 автор: TavRoX   (06.11.2010 в 19:55)   письмо автору
 
   для: Trianon   (06.11.2010 в 19:52)
 

ладно так и быть вывожу всю страницу

просто все работает если не вставлять ету функцию

<?php 
session_start
();

include (
"bd.php");
if (isset(
$_POST['title']))       
{
$title $_POST['title']; 

if (
$title == ''
{
unset(
$title);
}  

}


if (isset(
$_POST['meta_d']))      {$meta_d $_POST['meta_d']; if ($meta_d == '') {unset($meta_d);}}
if (isset(
$_POST['meta_k']))      {$meta_k $_POST['meta_k']; if ($meta_k == '') {unset($meta_k);}}

if (isset(
$_POST['img']))      {$img $_POST['img']; if ($img == '') {unset($img);}}

if (isset(
$_POST['albom'])) {$albom $_POST['albom']; if ($albom == '') {unset($albom);}}


?>

         <?php 
if (isset($title) && isset($meta_d) && isset($meta_k) && isset($img) && isset($albom))
{
    
        
$patt 'src';
$pos1 strpos($img$patt) + strlen($patt) + 2;
$pos2 strpos($img"\""$pos1);

 
$img trim(substr($img$pos1$pos2 $pos1));    
  
     
        
        
        
    
$title stripslashes($title);

$title htmlspecialchars($title);
/* Здесь пишем что можно заносить информацию в базу */
$result mysql_query ("INSERT INTO photo (title,meta_d,meta_k,albom,img) VALUES ('$title','$meta_d','$meta_k','$albom','$img')");

if (
$result == 'true') {echo "<p>Ваша фотка успешно добалена!</p><p><a href='../add/new_photo.php'>Добавить еще фотографию</a></p><p><a href='../admin.php'>Вернутся в админку</a></p><p><a href='../index.php'>вернутся на главную</a></p>";}
else {echo 
"<p>Ваша заметка не добалена!</p>";}


}         
else 

{
echo 
"<p>Вы ввели не всю информацию, поэтому заметка в базу не может быть добалена.</p>";
}
         
         
         
         
?>
         
         


  Ответить  
 
 автор: neadekvat   (06.11.2010 в 20:18)   письмо автору
 
   для: TavRoX   (06.11.2010 в 19:55)
 

<?php
if (isset($_POST['title'])) {
  
$title $_POST['title'];
  
  if (
$title == '')
    unset(
$title); 
}

*вытирает слезы* жеесть..

А дальше уже в строчку вытянули.. хоть бы стиль соблюдали.

if (isset($title) && isset($meta_d) && isset($meta_k) && isset($img) && isset($albom))

ппц..
Читайте мануал:
if (isset($title, $meta_d, $meta_k, $img, $albom))


Не понял, кстати, что вы спрашиваете.

  Ответить  
 
 автор: TavRoX   (06.11.2010 в 20:25)   письмо автору
 
   для: neadekvat   (06.11.2010 в 20:18)
 

в данном случае стиль роли не играет!
и рядок где if (isset(.... чем плохо как у меня написано?
оно работает работает?
а спрашивал я о вітаскивании из переменной информации через регулярные выражения так как в переменной есть лишние символы
п.с. прописывает пустую переменную img!

  Ответить  
 
 автор: neadekvat   (06.11.2010 в 20:34)   письмо автору
 
   для: TavRoX   (06.11.2010 в 20:25)
 

1. Стиль надо выработать и соблюдать его всегда. Уважайте программистов, которым ваше.. ваш код придется сопровождать.

2. Вы не понимаете, чем лучше вызвать функцию один раз, а не пять? Быстрее и читабельнее.

3.1. Я там регулярных выражений не увидил.
3.1. Чтобы спросить о регулярном выражении, не надо было вытаскивать такую кучу го.. кода, надо было просто показать пример строки, что надо получить на выходе, и как сейчас вы это делаете с объяснениями. Сейчас же ничего не понятно. Куча строковых функций без пояснений.

  Ответить  
 
 автор: TavRoX   (06.11.2010 в 21:05)   письмо автору
 
   для: neadekvat   (06.11.2010 в 20:34)
 

вообщем в переменной $img введено такое вот значение:
<p><img src="../tiny/upload-files/igroki/pato/Pato.jpg" alt="" width="200" height="150" /></p>

из етой переменной надо вытащить только путь к картинке тоисть то что в src="это"
эта переменная получается после внесение в поле картинки. но нужно оставить только ссылку
ето я пытался делат ьрядками:

        $patt = 'src';
$pos1 = strpos($img, $patt) + strlen($patt) + 2;
$pos2 = strpos($img, "\"", $pos1);

 $img = trim(substr($img, $pos1, $pos2 - $pos1)); 



а насчет стиля ну да согласен вам читать то тоже приходится.

  Ответить  
 
 автор: neadekvat   (06.11.2010 в 21:09)   письмо автору
 
   для: TavRoX   (06.11.2010 в 21:05)
 

<?php
preg_match_all
("/src=\"([^"]+)/", $img$out);
print_r(
$out);

посмотрите, что выйдет.

  Ответить  
 
 автор: TavRoX   (06.11.2010 в 21:33)   письмо автору
 
   для: neadekvat   (06.11.2010 в 21:09)
 

а там слеш случайно не нужен? перед двойными скобками где квадратная скоба
поставил я там слеш выводит вот такое
Array ( [0] => Array ( ) [1] => Array ( ) )

при етом внес переменную в базу и туда передалось Array

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 16:09)   письмо автору
 
   для: TavRoX   (06.11.2010 в 21:33)
 

блин что делать(
ета фишка работает когда выносятся из базы данные а когда вношу не работает(

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 17:08)   письмо автору
 
   для: TavRoX   (07.11.2010 в 16:09)
 

Какой-то вы беспомощный, я поражаюсь.

<?php
$text 
'<p><img src="../tiny/upload-files/igroki/pato/Pato.jpg" alt="" width="200" height="150" /></p>';
preg_match_all('/src=\"([^"]+)/'$text$out); 
print_r($out);

Выводит
Array
(
    [0] => Array
        (
            [0] => src="../tiny/upload-files/igroki/pato/Pato.jpg
        )

    [1] => Array
        (
            [0] => ../tiny/upload-files/igroki/pato/Pato.jpg
        )

)

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 17:23)   письмо автору
 
   для: neadekvat   (07.11.2010 в 17:08)
 

ну вот вы из рядка вывели
а если через переменную то фиг
$text = $img;
preg_match_all('/src=\"([^"]+)/', $text, $out);

вносит из переменной out слово Array

  Ответить  
 
 автор: Trianon   (07.11.2010 в 17:40)   письмо автору
 
   для: TavRoX   (07.11.2010 в 17:23)
 

а до внесения в переменной что?

  Ответить  
 
 автор: neadekvat   (07.11.2010 в 17:45)   письмо автору
 
   для: TavRoX   (07.11.2010 в 17:23)
 

А ничего, что $out - это массив? Я же не просто так вам написал print_r($out). Если вы не понимаете, что это..

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 18:02)   письмо автору
 
   для: neadekvat   (07.11.2010 в 17:45)
 

пробовал передать значение массива в переменную но чет нефига не получается

  Ответить  
 
 автор: Trianon   (07.11.2010 в 18:14)   письмо автору
 
   для: TavRoX   (07.11.2010 в 18:02)
 

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

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 18:20)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:14)
 

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

  Ответить  
 
 автор: Trianon   (07.11.2010 в 18:32)   письмо автору
 
   для: TavRoX   (07.11.2010 в 18:20)
 

ОК.
Поясняю.
Следует обратиться к элементу массива.

Остальное в отдельной теме.

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 18:33)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:32)
 

вот смотрите как я делаю
пробовал и $out[0] и $out[1] всеравно аррей вносит

$text = '$img';
preg_match_all('/src=\"([^"]+)/', $text, $out); 
$img2 = $out[0]; 

  Ответить  
 
 автор: Trianon   (07.11.2010 в 18:41)   письмо автору
 
   для: TavRoX   (07.11.2010 в 18:33)
 

я неясно написал?

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 18:46)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:41)
 

неочень если чесно
пробую искать в инете

  Ответить  
 
 автор: Trianon   (07.11.2010 в 18:51)   письмо автору
 
   для: TavRoX   (07.11.2010 в 18:46)
 

еще раз.
Ваша проблема не в операторе INSERT и не в preg_match_all
Ваша проблема в том, что Вы не отличаете массивы от их элементов.
Если echo выдает array, значит это всё еще массив.
А Вам нужен некоторый конкретный элемент этого массива.

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

Учитесь. Тогда и поиск в интернете смысл обретет.

Впрочем, Вы же все равно считаете себя самым умным...

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 18:56)   письмо автору
 
   для: Trianon   (07.11.2010 в 18:51)
 

та я вот об етом думаю
щас голову ламаю как бы ето сделать правильнее
вроде бы $img2 = $out[0]; ето и есть выборка из массива елемента под номером 0
но чет не пашет всеравно.

  Ответить  
 
 автор: Trianon   (07.11.2010 в 19:21)   письмо автору
 
   для: TavRoX   (07.11.2010 в 18:56)
 

ну сделайте же Вы var_dump($img2);

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 19:27)   письмо автору
 
   для: Trianon   (07.11.2010 в 19:21)
 

array(0) { }
вот что выводит.
значит то что я написал не передает в переменную значения
такс теперь вообще запутался

  Ответить  
 
 автор: Trianon   (07.11.2010 в 19:32)   письмо автору
 
   для: TavRoX   (07.11.2010 в 19:27)
 

ну и кто, скажите на милость, должен был здесь догадаться, что массив у Вас пустой?

  Ответить  
 
 автор: TavRoX   (07.11.2010 в 19:36)   письмо автору
 
   для: Trianon   (07.11.2010 в 19:32)
 

та я догадывался но почему пустой. что не так дделаю

  Ответить  
 
 автор: kosta_in_net   (05.12.2010 в 08:40)   письмо автору
 
   для: TavRoX   (07.11.2010 в 19:36)
 

1) для массива, вместо echo $ar, юзай print_r($ar);
2) пару лет назад нужно было парсить что-то... возмождно рсс-ленту... В парсере вот такой код безупречно работат:
preg_match('/src="([^"]*)/', $string,$matches);
if(!@$matches[1]){
    preg_match("/src='([^']*)/", $string,$matches);
}

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования