Array nagaan en niet aanwezig dan maken
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)
1
2
2
$cleantags = trim(preg_replace('/ +/', '', $tags));
$explodedtags = explode(",", $cleantags);
$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
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:
Dat was ook mijn idee. Dus: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
fotos
------
id
naam
locatie
tags
-----
id
tag
foto_tag
----------
id
foto_id
tag_id
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:
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.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.
Mitchell schreef op 25.06.2009 12:05:
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.Tags heb ik momenteel op UNIQUE gezet, zal dit alleen niet een error geven als die dan wel al bestaat?
Dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
?>
// 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.
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:
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.1. SELECT alle tags
2. bij het invoeren ga de tags na (if !in_array()...
2. bij het invoeren ga de tags na (if !in_array()...
Zie mijn vorige post voor een stappenplan inclusief UNIQUE constraint.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 . "') ";
}
?>
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
En welke foutmelding krijg je?
Staat er nu bij, volgens mij haal ik de info verkeerd op.
Je Query is vast verkeerd ofzo
Hipska schreef op 25.06.2009 13:47:
Ik heb het even gechecked en daar krijg ik de volgende error bij.Blanche bedoelt natuurlijk de SQL foutmelding..
Je Query is vast verkeerd ofzo
Je Query is vast verkeerd ofzo
Unknown column 'tag6' in 'where clause'
Bedankt, dat was de oplossing. :)
@ Blanche
Bedankt voor al je hulp en je code.
Dit is het eind resultaat.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
}
?>
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);
}
?>