2009-09-22 6 views
0

Je veux que ce script vérifie si le même mot a été entré s'il doit donc l'ajouter au compte sans ajouter de balise en double.Comment vérifier si la même balise était déjà dans la base de données avec PHP et Mysql?

Et si la balise entrée est une nouvelle balise, laissez-la l'ajouter à la base de données.

Quelqu'un peut-il m'aider à résoudre ce problème?

$tag = mysql_real_escape_string($_POST['tag']); 
$query = "INSERT INTO tags (tag, count) VALUES ('$tag', 1) 
      ON DUPLICATE KEY UPDATE count = count+1"; 
if (!mysql_query($query, $dbc)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 record added"; 

mysql_close($dbc) 

MERCI TOUT LE MONDE JE LE TRAVAILLER MAIS OBTENU UN AUTRE PROBLEME CAME UP, mais il est une autre question

+0

Quelle erreur obtenez-vous? À quoi ressemble ta table? Qu'avez-vous essayé d'autre? –

+1

Voici à quoi ressemble essentiellement ma table: id \t tag \t count –

+0

la table ajoute une entrée duplicat au lieu de l'ajouter au nombre. –

Répondre

2

Bien sûr, il est facile. Ajouter un index unique sur la colonne 'tag' dans la base de données ou en faire une clé primaire.

+0

comment est-ce que je fais ceci? –

+0

Vous le feriez dans n'importe quel outil que vous utilisez pour gérer votre base de données, par exemple l'outil de commande MySQL http://dev.mysql.com/doc/refman/5.4/en/mysql.html ou phpMyAdmin http: // www .phpmyadmin.net/home_page/index.php –

0

votre problème est l'ID sera probablement la clé primaire, pas tag. comme je l'ai mentionné ci-dessus votre code ne fonctionnerait que si balise était la clé primaire sur la table

3

essayer cette requête pour ajouter une clé primaire à votre balises table de

ALTER TABLE tags ADD PRIMARY KEY (tag); 

MISE À JOUR

Il suffit de lancer dans phpmyadmin OU

faire ce

$sql = "ALTER TABLE tags ADD PRIMARY KEY (tag)"; 
$result = mysql_query($sql); 

dans un test.php

MISE À JOUR 2

OK cela signifie que vous avez déjà une clé primaire, vous pouvez ajouter un index unique pour marquer en utilisant maintenant cette requête ..

ALTER TABLE balises AJOUTER UNIQUE (tag);

Veuillez noter que si vous avez déjà des doublons, vous devrez d'abord les supprimer.

+0

où est-ce que je l'ajoute? –

+0

vérifier la mise à jour de ma réponse. – TigerTiger

+0

il me dit clé primaire multiple défini? –

0

Vous dites que la structure de votre table est la suivante:

 
id tag count 

Ce qui signifie que votre requête en cours ne fonctionnera pas à moins que vous avez tag comme la clé primaire. Si c'est le cas, vous utilisez probablement la colonne id comme clé primaire.

Alors, il suffit de vérifier si la balise est déjà là.

Si c'est le cas, mettez à jour le nombre. Sinon, ajoutez-le.

//--grab the tag 
$tag = mysql_real_escape_string($_POST['tag']); 

//--see if the tag already exists and potentially what the current count is 
$query = "SELECT id, count FROM tags WHERE tag='$tag'"; 
$result = mysql_query($query); 

//--if there is a row, that means the tag exists 
if(mysql_num_rows($result)) 
{ 
//--pull out the tag ID and the current count and increment by one. 
    $tag_info = mysql_fetch_array($result); 
    $tag_info_id = $tag_info["id"]; 
    $tag_info_count = $tag_info["count"] + 1; 

//--update the table with the new count 
    $sql_update_cnt = "UPDATE tags SET count='$tag_info_count' 
          WHERE id='$tag_info_id'"; 
    mysql_query($sql_update_cnt); 

    echo "$tag now with $tag_info_count instances"; 
} 
else 
{ 
//--tag is not there, so insert a new instance and 1 as the first count 
    $query = "INSERT INTO tags (tag, count) VALUES ('$tag', 1)"; 
    mysql_query($query); 

    echo "1 record added"; 
} 

mysql_close($dbc); 
+0

J'essaie votre solution est ce que ma base de données est mis en place:

 CREATE TABLE tags ( id int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), tag varchar(100) NOT NULL, count int(11) NOT NULL DEFAULT '0' ); 
pour une raison maintenant mon databse mettre à jour l'habitude maintenant :( –

+0

fixe l'erreur où la requête pour créer une nouvelle le tag a été omis. Essayez maintenant. – random

0

si vous utilisez mySQL, vous pouvez utiliser la syntaxe INSERT ON DUPLICATE KEY, à condition que votre tagname est la clé primaire (ou uniques)

INSERT INTO `tags` (`tag`, `count`) 
VALUES ($tag, 1) 
    ON DUPLICATE KEY UPDATE `count`=`count`+1; 

pour ajouter une clé primaire sur votre utilisation de table:

ALTER TABLE `tags` ADD PRIMARY KEY (`tag`) 

vous n'avez pas besoin d'une colonne id cependant, parce que vous pouvez utiliser votre tagname comme clé primaire

ALTER TABLE `tags` DROP COLUMN `id` 
Questions connexes