2017-02-01 1 views
2

Ich versuche, einen Wortfilter in meiner Magento Site zu erstellen, im Grunde habe ich ein Formular mit einem Textfeld und eine Schaltfläche wie folgt einreichen:Word-Filter mit PHP

<form id="answer_form_<?php echo $id;?>" class="form" method="post" 
action="<?php echo Mage::getUrl('productquestions/productquestions/saveanswers',array('product_questions_id'=>$id));?>"> 

<textarea id="txt_send" class="input-text required-entry " name="content" 
id="answer_content_<?php echo $id;?>" title="Content"></textarea> 

<button id="btn_send" style="float: left;" type="submit" class="button" 
title="Send Message"><span><span><?php echo $this->__('Send Message') ?></span></span></button> 

</form> 

Was ich tun muß, ist zu filter die worte aus dem textarea wenn das formular gesendet wird vor es ist auf der datenbank gespeichert, so dass ich einige php funktionen gegründet und angepasst habe. Der letzte Code ist:

function wordFilter($text) {  
    $filter_terms = array('\bass(es|holes?)?\b','\bshit(e|ted|ting|ty|head)\b'); 
    $filtered_text = $text; 

    foreach($filter_terms as $word) { 
     $match_count = preg_match_all('/' . $word . '/i', $text, $matches); 

     for($i = 0; $i < $match_count; $i++) { 
     $bwstr = trim($matches[0][$i]); 
     $filtered_text = preg_replace('/\b' . $bwstr . '\b/', str_repeat("*", strlen($bwstr)), $filtered_text); 
    } 

    } 
    return $filtered_text; 
} 

if(isset($_POST['btn_send'])) { 
    $text = htmlentities($_POST['txt_send']); 

    $text = wordFilter($text); 
} 

Habe ich nur zwei Worte für den Test so weit, und wenn ich den Text mit beiden Worten tun wird es gespeichert normalerweise ohne sie zu „*****“ zu ändern. Ich habe es vermieden, JS zu verwenden, da es sich um eine Client-Seite handelt.

Kann mir jemand sagen, was ich vermisse?

Danke!

EDITED:

Als Magento-Plugin. Die Aktion leitet das Formular um: productquestions/productquestions/saveanswers',array('product_questions_id'=>$id)); und je nach ID ändert es die URL. Als Beispiel: siteurl/index.php/productquestions/productquestions/saveanswers/product_questions_id/40 in dieser Controller Seite habe ich die Funktion:

public function saveanswersAction() 
    { 
     $answers = $this->getRequest()->getPost(); 
     $answerCollection = array(); 
     $model = Mage::getModel('productquestions/answers'); 
     $id = $this->getRequest()->getParam('product_questions_id'); 

     $model->setData('product_questions_id',$id); 
     $model->setData('answers',$answers['content']); 

     $model->save(); 
     $answerCollection[] = $model; 

    } 

Antwort

2

Es ist ein bisschen schwer, sicher zu sein, wie Sie den Code nicht enthalten, wenn dies das Speichern tut, aber es sieht aus wie Sie nicht sparen das Ergebnis Ihrer Filterfunktion zurück in die Variable, die gespeichert wird. Versuchen:

if(isset($_POST['btn_send'])) { 
    $text = htmlentities($_POST['txt_send']); 
    $text = wordFilter($text); 
    //Code to save $text here 
} 
+0

bearbeitet, danke! –

0

einfach den Code in die Steuerung bewegt und es hat funktioniert, danke für den Tipp.

$text = $this->getRequest()->getParam('content'); 
     $filter_terms = array('\bass(es|holes?)?\b','\bshit(e|ted|ting|ty|head)\b'); 
     $filtered_text = $text; 
     foreach($filter_terms as $word) 
     { 
      $match_count = preg_match_all('/' . $word . '/i', $text, $matches); 
      for($i = 0; $i < $match_count; $i++) 
      { 
        $bwstr = trim($matches[0][$i]); 
        $filtered_text = preg_replace('/\b' . $bwstr . '\b/', str_repeat("*", strlen($bwstr)), $filtered_text); 
      } 
     } 

$model->setData('answers',$filtered_text);