2016-12-10 3 views
1

Ich habe diese Form, die Tags in meiner Datenbank mit comas getrennt senden, wenn i POST $query = "INSERT INTO data(tags) VALUES ('$tags')";Stichworte Werte in der Datenbank aktualisiert (es dupliziert wird)

erstellen klicken und sie erhalten, wenn ich klicken bearbeiten

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"; 

Und hier ist das Problem, wenn ich auf Update-Taste klicke ich beide vorherigen ausgewählten Tags mit neuen ausgewählten Tags und fügen Sie sie auf den vorherigen Tags ein Beispiel zu verstehen, was ich tippte:

  • Database Schlagwörter: tag1, tag2
  • Formular bearbeiten Tags: [tag1] [tag2]
  • bilden neue Tags: [tag1] [tag2] [tag3] [tag4]
  • Datenbank aktualisiert Stichworte : tag1, tag2, tag1, tag2, tag3, tag4

    <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

'$ tags = implode (", ", $ _ POST ['tags']' Problem ist dieser Abschnitt, da Sie '$ _POST' verwenden, also senden Sie was immer in' $ _POST' kurz in Ihrem Formular ist das Problem, können Sie Ihren Formularcode auch –

+0

@ arif_suhail_123 putted nur das Formular –

Antwort

1

Fix Ihre Datenstruktur!

Tags nicht als Liste mehrerer Werte in einer einzelnen Spalte speichern. Sie wollen eine Tabelle, die für jedes Element und jeden Tag eine einzelne Zeile hat:

create table ItemTags (
    ItemTagId int auto_increment primary key, 
    ItemId int not null, 
    Tag varchar(255) not null, 
    constraint fk_ItemTags_ItemId foreign key (ItemId) references Items(Item) 
); 

Dann, wenn Sie einen Tag eingefügt werden sollen, nur einen Tag in diese Tabelle einfügen.

Warum ist die Speicherung mehrerer Tags in einer einzelnen Spalte eine schlechte Idee?

  • Sie können nicht (einfach) überprüfen, ob die Tags für ein bestimmtes Objekt eindeutig sind.
  • Sie können nicht (einfach) alle Tags auflisten, die verwendet werden.
  • MySQL hat schlechte Funktionen zur Zeichenfolgenmanipulation.
  • MySQL kann Abfragen, die nach Elementen mit einem einzelnen Tag suchen, nicht (einfach) optimieren.
  • +0

    Ich weiß immer noch nicht, wie man Beziehung zu Datenbank diesen Typ in meine Formulare (zwei Datenbanken in Einzelform) machen Und ich wollte nur Denken Sie über eine Möglichkeit nach, jedes Tag zu trennen und einen Link darin einzufügen –

    0

    Sie müssen eine Funktion erstellen, um zu überprüfen, ob Tag 1 dem Form Tag 1 entspricht. Wiederholen Sie dies für alle Tags, die Sie im DB finden (foreach). Dann Update im laufenden Betrieb mit der Update-Funktion, falls erforderlich.

    Eine bessere Methode ist die Verwendung des Array $ -Tags und das Löschen aller darin enthaltenen Duplikate.

    Beispiel:

    $ tagArrayUni = array_unique ($ tag);

    +0

    Können Sie mir bitte diese Funktion zur Verfügung stellen? Und wo genau in meinem Code? –

    +0

    Erstellen Sie es mit einem IF in PHP.Versuchen Sie, es für jede Funktion auf Ihr zu übertragen. Eine andere Möglichkeit besteht darin, die Tags in ein Array zu schreiben und Duplikate zu löschen. Zeige die Ergebnisse danach. Ich bin auf deinen Anwendungsfall angewiesen. –

    +0

    Es tut mir wirklich leid, aber ich verstehe immer noch nicht, können Sie bitte meinen Code als Beispiel verwenden? –

    Verwandte Themen