Hoi iedereen,

Ik ben momenteel bezig met een foto gallery script, alleen momenteel ben ik bezig met tags voor iedere foto.

Wat ik momenteel heb is een input waarin je de tags moet invullen met een komma als seperator. Deze post ik dan en doe er het volgende mee.
$cleantags = trim(preg_replace('/ +/', '', $tags));
	$explodedtags = explode(",", $cleantags);

Dit geeft me een array, nu wil ik met een query checken of die tags al bestaan en zo niet, dat ze dan worden gemaakt, maar ik heb geen idee hoe ik dit moet doen.

Vervolgens moeten deze tags ook nog gekoppeld worden aan de foto, maar ik ben ook radenloos hoe ik meerdere tags koppel aan 1 foto, ik heb hier wel een tabel voor die picture_id en tag_id bevat.

Hoop dat jullie me kunnen helpen met deze problemen.

Bedankt,
Mitchell
Controle of ze al bestaan doe je door een UNIQUE constraint aan te brengen in je tabel met tags. Op die manier kunnen er alleen maar unieke tags in die tabel staan en zal een INSERT query waarbij je een dubbele tag probeert in te voegen, mislukken.

Koppelen van tags aan een foto doe je door voor iedere tag die bij een foto hoort een nieuw record aan te maken in die tabel die je daarvoor hebt. Daarbij geef je in ieder record het id van de betreffende foto en tag op. Als er dus 4 tags aan een foto gekoppeld zijn, krijg je in die tabel dus 4 records voor die betreffende foto.
Mooier is nog met een koppeltabel zodat elke tag maar 1 keer in een tabel opgenomen hoeft te worden en je makkelijk een <select> kunt maken met tags
Klaasjan Boven schreef op 23.06.2009 17:43
Mooier is nog met een koppeltabel zodat elke tag maar 1 keer in een tabel opgenomen hoeft te worden en je makkelijk een <select> kunt maken met tags
Dat was ook mijn idee. Dus:

fotos
------
id
naam
locatie

tags
-----
id
tag

foto_tag
----------
id
foto_id
tag_id
Bedankt voor de reacties alvast.

Helaas gaat een <select> met daarin de opties niet, ze moeten namelijk gewoon ingevuld worden zoals dit, werkt ook het beste naar mijn idee. Word ook het meest gebruikt.

Tags heb ik momenteel op UNIQUE gezet, zal dit alleen niet een error geven als die dan wel al bestaat?
Blanche schreef op 23.06.2009 17:40

Koppelen van tags aan een foto doe je door voor iedere tag die bij een foto hoort een nieuw record aan te maken in die tabel die je daarvoor hebt. Daarbij geef je in ieder record het id van de betreffende foto en tag op. Als er dus 4 tags aan een foto gekoppeld zijn, krijg je in die tabel dus 4 records voor die betreffende foto.
Mijn vraag was dan dus ook, hoe pak ik dit aan, moet ik allemaal aparte queries maken hiervoor of kan ik dit allemaal in 1 plaatsen.
Mitchell schreef op 25.06.2009 12:05
Tags heb ik momenteel op UNIQUE gezet, zal dit alleen niet een error geven als die dan wel al bestaat?
Dat is juist de bedoeling. Die foutmelding kun je afvangen en vervolgens met mysql_errno() het errornummer opvragen. In het geval dat de tag al bestaat, zal dit gelijk zijn aan 1062.

Dus:
<?php
// INSERT query uitvoeren om tag in te voeren

if(!$result = mysql_query($sql)) {
if(mysql_errno() == 1062) {
// Tag bestaat al
// Voer SELECT query uit om id te bepalen
}
}
else {
// Bepaal het id van de tag met mysql_insert_id()
}

// INSERT query uitvoeren om tag_id aan foto_id te koppelen
?>
En dit stukje zou je dan voor elke tag uit kunnen voeren. Een alternatief is eerst voor elke tag het id te bepalen om vervolgens met 1 query alle records in te voegen voor het koppelen van de tags aan de foto.
Tags invoeren op een uniforme manier bijv


tag 1, tag 2, tag 3, tag 4 Als hij niet bestaat, aanmaken, als hij wel bestaat koppelen aan het artikel.

1. SELECT alle tags
2. bij het invoeren ga de tags na (if !in_array()...
3. voeg tag toe als hij niet bestaat + koppelen
4. koppel alleen als hij wel bestaat.
Jurgen schreef op 25.06.2009 12:23
1. SELECT alle tags
2. bij het invoeren ga de tags na (if !in_array()...
Deze stappen zijn overbodig zodra je een UNIQUE constraint aanbrengt in de tabel met tags. Bovendien leveren deze stappen altijd een 'oud' resultaat aangezien in de tussentijd de tag theoretisch toegevoegd zou kunnen zijn.

Zie mijn vorige post voor een stappenplan inclusief UNIQUE constraint.
Ik heb nu het volgende gemaakt, alleen ik krijg een error en weet niet zo zeker wat ik hiermee moet. (Ben nogal nieuw met sql.)


<?php
foreach($explodedtags as $qtag) {
          $query2 = "INSERT INTO ".TABLE_PREFIX."tags (tag) VALUES ('" . $qtag . "') ";
          if(!$result2 = mysql_query($query2)) {
            if(mysql_errno() == 1062) {
              $query3 = "SELECT id FROM ".TABLE_PREFIX."tags WHERE tag = " . $qtag . " ";
              $result3 = mysql_query($query3);
              $row = mysql_fetch_assoc($result3);
              $tagid = $row['id'];
            }
          } else {
            $tagid = mysql_insert_id();
          }
          $query4 = "INSERT INTO ".TABLE_PREFIX."tags (tag_id, picture_id) VALUES ('" . $tagid . "','" . $id . "') ";
        }
?>


Edit: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/admin/domains/pixami.nl/public_html/pixlogger/admin/plog-admin-functions.php on line 183
En welke foutmelding krijg je?
Staat er nu bij, volgens mij haal ik de info verkeerd op.

Reageren