Tag-systeem - tags koppelen aan een artikel & in de database steken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Victor-Jan Goemans

Victor-Jan Goemans

26/01/2010 22:44:00
Quote Anchor link
De volgende code is die van een tagsysteem - bij het invoeren van een review in de database is er een input 'tags' waarbij tags moeten worden ingegeven met een ";" tussen (bv.tag1;tag2;tag3). Dit is dus $_POST['tags']. Voor de tags heb ik een aparte table, waarin de naam van de tag komt te staan (field 'tag') en de ID van de review die getagd wordt (field 'articles'). Nu kan het dus zijn dat bij het invoeren van zo'n tag, de tag al bestaat. Of niet. Dat moet dus nagegaan worden voor elke tag apart, die uiteraard eerst moeten gescheiden worden door de explode() functie. Met de for loop wordt door de hele array geloopd, en met mysql_num_row() wordt gecontroleerd of de tag al dan niet bestaat. Zo ja, dan wordt de bestaande ID van de artikel(s) uit de database gehaald ($output['articles']), en met een tussenvoegsel ";" samen met het nieuwe artikel/review in de database gestoken. Als het nog niet bestaat, wordt simpelweg een nieuw record aangeboord. Het probleem is nu dsat het niet werkt: geen foutmelding of error, het artikel gaat integraal de database in - alleen in de tags table verandert niets. Hopenlijk kunnen jullie me helpen.
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?
                    $tags
= explode(";",$_POST['tags']);
                    $count = count($tags);
                    for ($i=0; $i<=$count; $i++)
                    {

                        $check = mysql_query("SELECT `tag` FROM `tags` WHERE `tag` = '".$tags[$i]."'") or die(mysql_error);
                        echo $tags[$i];
                        while($output = mysql_fetch_assoc($check))
                        {

                        $tel = mysql_real_escape_string(mysql_num_rows($check));
                            if ($tel > 0)
                            {

                                $articles = $output['articles'] . ";" . $_POST['ID'];
                                mysql_query("UPDATE `tags` SET articles='".$articles."' WHERE `tag` = '".mysql_real_escape_string($_POST['tags'])."'") or die(mysql_error);
                            }

                            else
                            {
                                $id = mysql_query("SELECT `ID` FROM `album` WHERE `album` = '".mysql_real_escape_string($_POST['album'])."' AND `band` = '".mysql_real_escape_string($_POST['album'])."' AND `auteur` = '".mysql_real_escape_string($_POST['auteur'])."'") or die(mysql_error);
                                while ($output = mysql_fetch_assoc($id))
                                {

                                    $idoutput = $output['ID'];
                                    echo $idoutput;
                                    $tags = explode(";",$_POST['tags']);
                                    $count = count($tags);
                                    for ($i=0; $i<=$count; $i++)
                                    {

                                        mysql_query("INSERT INTO `tags` (tag,type,articles) VALUES ('".mysql_real_escape_string($tags[$i])."','".$type."','".$idoutput."')") or die(mysql_error());
                                    }
        
                                }
                            }

?>
Gewijzigd op 01/01/1970 01:00:00 door Victor-Jan Goemans
 
PHP hulp

PHP hulp

26/12/2024 15:48:23
 
Davy Jansen

Davy Jansen

27/01/2010 08:29:00
Quote Anchor link
@Goemans, alvast 2 dingen voor ik ben gaan lezen.

1. Gebruik eens een keer een komma. Het is nu 1 grote lap tekst, en niet iedereen zoekt daar aan te beginnen met lezen. Wat dus minder hulp voor jou betekend.

2. Zet even
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php ?>
php tags om je code heen. Dan krijg je color coding, wat een stuk gemakkelijker leest.

edit: Antwoorden op jou vraag

1. Je wilt hier $output['articles'] kolom articles op halen, terwijl je in je sql hier SELECT `tag` FROM `tags` alleen maar tag toestaat om op te halen.

2. Verder zet je in de variable $articles het volgende (er even vanuit gaande dat er in $output['articles'] de naam en $_POST['id'] het tagid zitten).

Dan krijg je dit: tagnaam;1tagnaam;2tagnaam3, terwijl je in je bovenstaande post dit wil: tagnaam1;tagnaam2;tagnaam3;

Je moet dus dit: $articles = $output['articles'] . ";" . $_POST['ID'];
vervangen door: $articles = $output['articles'] . $_POST['ID'] . ";";

3. Je gebruikt bij de insert wel de $_POST['tags'] var, en bij de update helemaal niet. Dan gebruik je weer de $output[''articles']. Foutje?

4. Verder hoeft mysql_real_escape_string niet om mysql_num_rows aangezien deze data al veilig is. (Dit doordat dit getal door het database wordt genereerd).

Nou ja, ik hoop dat het iets duidelijker is nu! :)
Gewijzigd op 01/01/1970 01:00:00 door Davy Jansen
 
Victor-Jan Goemans

Victor-Jan Goemans

27/01/2010 17:56:00
Quote Anchor link
Alvast bedankt voor je antwoord.
Even over dat eerste:
1. Bedoel je misschien alinea's? Het is inderdaad een hele hoop tekst onder mekaar, maar komma's staan er toch wel in.
2. Done, zal er aan denken in het vervolg.

On topic:
1. Juist, bedankt!
2. Nope, in $output['articles'] zitten alleen ID's.
3. Bij de UPDATE gebruik ik niet de $output['articles'], maar de var $articles ($articles = $output['articles'] . ";" . $_POST['ID'];). Ik wil de gegevens namelijk niet overschrijven, maar ik wil de nieuwe gegevens erbij voegen. $output['articles'] zijn de oude gegevens, met een ";" tussen worden de nieuwe er achtergevoegd.
4. Klopt.

Erg bedankt, ik zal even kijken of het nu werkt. :)


Edit: toch nog niet helemaal. Hier is een screenshot van phpMyAdmin.
Afbeelding
1. Tussen elke tag wordt een lege tag ge-insert?
2. De UPDATE werkt blijkbaar niet, als de tag al in de database staat moet in de row van die tag het veld 'articles' veranderd worden van bv. 1 naar 1;2. In plaats van een nieuwe row te starten met dezelfde tag.

P.S.: de records in de database zijn allemaal tests, de namen etc. slaan dus meestal op niets.
Gewijzigd op 01/01/1970 01:00:00 door Victor-Jan Goemans
 



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.