2016-12-10 7 views
0

ich ein Problem habe, während eine zu Datenbank aktualisiere, kommt es vor, den neuen Wert neben dem alten Wert in die Datenbank zum Beispiel hinzufügenUPDATE eine implodiert Mehrfachauswahl in der Datenbank

  • Aktuelle Datenbank Schlagwörter: tag1, tag2
  • Stichworte
  • Formular GET: [tag1] [tag2]
  • Formular Edited Tags: [tag1] [tag2] [tag3] [tag4]
  • Aktualisiert Datenbank Schlagwörter: tag1, tag2, tag1, tag2, tag3, tag4

    GET 
    $query = "SELECT * FROM data WHERE id = $id"; 
    $edit = mysqli_query($dbc, $query); 
    while($row = mysqli_fetch_assoc($edit)){$tags = $row['tags'];} 
    POST 
    $tags = implode(",",$_POST['tags']; 
    $query = "UPDATE data SET tags= '$tags' WHERE id = $id"; 
    
    <form method="post" action=""> 
         <select id="tags" name="tags[]" multiple="multiple"> 
          <?php foreach ($tags as $tag) {echo "<option value'$tag' selected>$tag</option>";} ?> 
          <option>tag1</option> 
          <option>tag2</option> 
          <option>tag3</option> 
          <option>tag4</option> 
         </select> 
         <button type="submit" name="update">Submit</button> 
        </form> 
    
+0

Was ist die Frage? – degers

Antwort

1

Es gibt einige Probleme mit Ihrem Code, wie zum Beispiel:

  • $tags kein Array ist. Siehe nachstehende Erklärung in Ihrer while() Schleife,

    $tags = $row['tags']; 
    

    So Sie es nicht in foreach Schleifen wie verwenden können, die. Verwenden Sie explode() Funktion die Zeichenfolge zu spalten und die Tags in einem Array zu erhalten, wie folgt aus:

    $tags = explode(",",$row['tags']); 
    

    Und dann verwenden Sie diese $tags Array in Ihrer Form, die weiter unten erläutert wird.

  • Syntaxfehler hier,

    $tags = implode(",",$_POST['tags']; 
               ^missing closing) 
    
  • Sie auch die Tags als Array erhalten (wie oben erwähnt), Sie haben nicht dassforeach Schleife entweder zu verwenden, ist es unnötig zusätzliche anhängt/redundante Tags in Ihrem <select> Element. verwenden besser in_array() Funktion der Variablenwert ist in $tags Array zu überprüfen oder nicht und machen es entsprechend ausgewählt

  • value Attribut wird von <option> Tags fehlt.

  • Setzen Sie den SELECT Betrieb unterhalb den UPDATE Betrieb, sonst werden Sie alte Variablenwerte aus dem SELECT Betrieb erhalten, auch wenn Sie die Tags aktualisieren Sie das Formular.

So sollte der Code wie folgt sein:

if(isset($_POST['update'])){ 
    $tags = implode(",",$_POST['tags']); 
    $query = "UPDATE data SET tags= '$tags' WHERE id = $id"; 
    mysqli_query($dbc, $query); 
} 

$query = "SELECT * FROM data WHERE id = $id"; 
$edit = mysqli_query($dbc, $query); 
while($row = mysqli_fetch_assoc($edit)){ 
    $tags = explode(",",$row['tags']); 
} 

<form method="post" action="index.php"> 
    <select id="tags" name="tags[]" multiple="multiple"> 
     <option value="tag1"<?php if(in_array('tag1', $tags)){ echo ' selected="selected"'; } ?>>tag1</option> 
     <option value="tag2"<?php if(in_array('tag2', $tags)){ echo ' selected="selected"'; } ?>>tag2</option> 
     <option value="tag3"<?php if(in_array('tag3', $tags)){ echo ' selected="selected"'; } ?>>tag3</option> 
     <option value="tag4"<?php if(in_array('tag4', $tags)){ echo ' selected="selected"'; } ?>>tag4</option> 
    </select> 
    <button type="submit" name="update">Submit</button> 
</form> 
Verwandte Themen