2017-10-19 11 views
1

J'essaie d'enregistrer des titres dans une base de données mysql dans wordpress en permettant des guillemets simples et doubles. Donc, je veux être en mesure d'insérer des chaînes telles que:Insérer des guillemets simples et doubles dans une base de données wordpress

A man's dog walked into the bar 
    The "main reason" it does not work 
    It's time to announce "The Show" in an hour 

Mon code ressemble par exemple:

$question_id = filter_var($_REQUEST['question_id'], FILTER_SANITIZE_NUMBER_INT); 
    $feedback_correct = preg_replace("/[^a-zA-Z0-9'\"?_\. !&-]+/","",sanitize_text_field($_REQUEST['feedback_correct'])); 
    $feedback_incorrect = preg_replace("/[^a-zA-Z0-9'\"?_\. !&-]+/","",sanitize_text_field($_REQUEST['feedback_incorrect'])); 
    //preg_replace is to strip out any characters we dont want in the title like "<>|}{[]/" 
    $data = array(
    'feedback_correct' => $feedback_correct, 
    'feedback_incorrect' => $feedback_incorrect 
    ); 

    $update_feedback = $eot_quiz->updateQuestion($data, $question_id); 

Et la fonction updateQuestion:

 public function updateQuestion($data = array(), $id = 0) 
     { 
     global $wpdb; 
     $result = $wpdb->update(TABLE_QUIZ_QUESTION, $data, array('ID' => $id)); 
      if ($result === false) 
      { 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 

Après le voyage à la base de données , mes cordes ressemblent à:

A man 

* chaîne est coupée après les guillemets simples

The "main reason" it does not work 

* regardez ok avec des guillemets doubles

It 

* chaîne est coupée après la citation unique

Comment puis-je obtenir ces chaînes inséré correctement dans le db? Merci d'avance.

code d'affichage:

 <?php 
     $quiz_question = $eot_quiz->get_question_by_id($question_id); 

     ?> 
     <div class="bs"> 
     <div class="panel panel-default"> 
      <form method="POST" action="#"> 
       <div class="panel-heading"> 
        <h3 class="panel-title"><?= $quiz_question['quiz_question']?></h3> 
       </div> 
       <div class="panel-body"> 

       <div class="form-group"> 
        <label for="feedback_correct">Feedback for correct answer</label> 
        <input type="text" class="form-control" name="feedback_correct" placeholder="Correct Feedback" value='<?= $quiz_question['feedback_correct']?>'> 
       </div> 
       <div class="form-group"> 
        <label for="feedback_incorrect">Feedback for incorrect answer</label> 
        <input type="text" class="form-control" name="feedback_incorrect" placeholder="Incorrect Feedback" value='<?= $quiz_question['feedback_incorrect']?>'> 
       </div> 
       <input type='hidden' name='question_id' value="<?= $question_id ?>" /> 
       <input type='hidden' name='quiz_id' value="<?= $quiz_id ?>" /> 
       <input type='hidden' name='subscription_id' value="<?= $subscription_id ?>" /> 
       <input type='hidden' name='feedback' value="true" /> 
       <button type="submit" class="btn btn-default">Update Feedback</button> 

     </div> 
     <div class="panel-footer"><a href="/dashboard/?part=update_quiz_questions&question_id=<?= $question_id?>&quiz_id=<?= $quiz_id?>&subscription_id=<?= $subscription_id ?>" class="btn btn-success pull-right">Take me back to the Question</a><div style="clear:both"></div></div> 
     </form> 
     </div> 
    </div> 
+1

[Bobby Tables] (http://bobby-tables.com/) – ctwheels

+0

Non, pas de tables de bobby ici. Le code 'wpdb' utilise les paramètres de liaison appropriés. –

+0

J'ai essayé les tables de bobby: $ result = $ wpdb-> mise à jour (TABLE_QUIZ_QUESTION, $ données, tableau ('ID' => $ id), tableau ('% s', '% s')); même résultat –

Répondre

1

Utilisez esc_attr chaque fois que vous voulez quelque chose dans un des éléments attributs:

<input type="text" class="form-control" name="feedback_correct" placeholder="Correct Feedback" value='<?php 
//Always escape before echoing to an html attribute 
esc_attr($quiz_question['feedback_correct']); 
?>'> 
0

Quelle est la classe de base de $wpdb? Découvrez son mécanisme d'échappement et utilisez-le

Ou, utilisez addslashes().

Veuillez ne pas essayer d'utiliser preg_replace, vous ne pouvez pas gérer tous les caractères qui doivent s'échapper. (Il est plus que juste une apostrophe et une citation.)