Array nagaan en niet aanwezig dan maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mitchell

Mitchell

23/06/2009 16:29:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$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
 
PHP hulp

PHP hulp

08/09/2024 02:03:03
 
Joren de Wit

Joren de Wit

23/06/2009 17:40:00
Quote Anchor link
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.
 
Klaasjan Boven

Klaasjan Boven

23/06/2009 17:43:00
Quote Anchor link
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
 
Joren de Wit

Joren de Wit

23/06/2009 17:45:00
Quote Anchor link
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
 
Mitchell

Mitchell

25/06/2009 12:05:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

25/06/2009 12:18:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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.
 
Jurgen assaasas

Jurgen assaasas

25/06/2009 12:23:00
Quote Anchor link
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.
 
Joren de Wit

Joren de Wit

25/06/2009 12:27:00
Quote Anchor link
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.
 
Mitchell

Mitchell

25/06/2009 13:15:00
Quote Anchor link
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.)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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
Gewijzigd op 01/01/1970 01:00:00 door Mitchell
 
Joren de Wit

Joren de Wit

25/06/2009 13:16:00
Quote Anchor link
En welke foutmelding krijg je?
 
Mitchell

Mitchell

25/06/2009 13:44:00
Quote Anchor link
Staat er nu bij, volgens mij haal ik de info verkeerd op.
 
Hipska BE

Hipska BE

25/06/2009 13:47:00
Quote Anchor link
Blanche bedoelt natuurlijk de SQL foutmelding..

Je Query is vast verkeerd ofzo
 
Mitchell

Mitchell

25/06/2009 14:17:00
Quote Anchor link
Hipska schreef op 25.06.2009 13:47:
Blanche bedoelt natuurlijk de SQL foutmelding..

Je Query is vast verkeerd ofzo
Ik heb het even gechecked en daar krijg ik de volgende error bij.

Unknown column 'tag6' in 'where clause'
 
Erwin Geen

Erwin Geen

25/06/2009 14:24:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query3
= "SELECT id FROM ".TABLE_PREFIX."tags WHERE tag = " . $qtag . " ";
?>

Volgens mij moeten er nog quotes om.
Dus zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
"tags WHERE tag = '" . $qtag . "' ";
?>
Gewijzigd op 01/01/1970 01:00:00 door Erwin Geen
 
Mitchell

Mitchell

25/06/2009 14:45:00
Quote Anchor link
@ Warchief
Bedankt, dat was de oplossing. :)

@ Blanche
Bedankt voor al je hulp en je code.

Dit is het eind resultaat.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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 * 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."tag2picture (tag_id, picture_id) VALUES ('" .$tagid . "','" . $id . "')";
          mysql_query($query4);
        }

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.