2012-06-28 4 views
3

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

<?php 
    require_once 'conf/conf.php'; 
    $text = " Poetry. Do you read poetry while flying? Many people find it relaxing to read on long flights. Poetry can be divided into several genres, or categories. "; 
    $sentences = explode(".", $text); 
    foreach ($sentences as $sentence) { 
     if (count(preg_split('/\s+/', $sentence)) > 6) { 
      $save = $sentence. "."; 
      $sql = mysql_query("INSERT INTO tb_name VALUES('','$save')"); 
     } 
    } 
?> 

Результатом является только второе предложение, которое вставлено в базу данных => «Вы читаете стихи во время полета? Многие люди считают, что это приятно читать на длинных рейсах ». в то время как третье предложение также должно быть вставлено. пожалуйста, помогите мне, спасибо:)

+0

В настоящее время [обе строки] (http://viper-7.com/oYvLsP) должны быть сохранены в базе данных. – nickb

+0

@nickb yep, но только тот, который сохраняется в базе данных. – bruine

+0

Ну, логика настроена так, что '$ save' правильно установлен, что должно означать, что вы запускаете проблему с базой данных вместо логической проблемы. После '$ sql = ....', поместите 'echo mysql_error();' для проверки и отправьте сообщение об ошибке, если оно создано. – nickb

ответ

3

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

$text = " Poetry. Do you read poetry while flying? Many people find it relaxing to read on long flights. Poetry can be divided into several genres, or categories. "; 
$sentences = explode(".", $text); $save = array(); 
foreach ($sentences as $sentence) { 
    if (count(preg_split('/\s+/', $sentence)) > 6) { 
     $save[] = $sentence. "."; 
    } 
} 
if(count($save) > 0) { 
    $sql = mysql_query("INSERT INTO tb_name VALUES('','" . implode(' ', $save) . "')"); 
} 

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

Запрос, который получает генерируемый это:

INSERT INTO tb_name VALUES('',' Do you read poetry while flying? Many people find it relaxing to read on long flights. Poetry can be divided into several genres, or categories.') 
+0

отлично! большое спасибо @nickb :) :) – bruine

1

Заменить:

$sentences = explode(".", $text);

с этим:

$newSentences = array(); 
$sentences = preg_split("/(\.|\?|\!)/", $text, -1, PREG_SPLIT_DELIM_CAPTURE); 

$odd = false; 
foreach($sentences as $sentence) { 
    $sentence = trim($sentence); 
    if($sentence != '') { 
     if(!$odd) { 
      $newSentences[] = $sentence; 
     } else { 
      $newSentences[count($newSentences) - 1] .= $sentence; 
     } 
     $odd = !$odd; 
    } 
} 

Он отделяет предложения, оканчивающиеся на с . или ? или !. В foreach только что собраны предложения.

Пример здесь: http://codepad.org/kk3PsVGP

+0

спасибо @ iDev247 :)! Я попробую ! – bruine

Смежные вопросы