Seo unieke titels
Ik wil unieke url's creeeren in mijn database mbt SEO.
Als ik een nieuwe topic aanmaak wil ik controleren of de titel al in de database bestaat en als deze bestaat, uniek maken met een getal, eigenlijk alla wordpress.
Voorbeeld wat ik op wil slaan:
"dit-is-een-titel"
Wanneer deze titel bestaat wil ik van deze titel maken:
"dit-is-een-titel-1"
En wanneer deze al bestaat:
"dit-is-een-titel-2"
Kan iemand mij een voorbeeld geven hoe ik zoiets in elkaar programmeer?
Als ik een nieuwe topic aanmaak wil ik controleren of de titel al in de database bestaat en als deze bestaat, uniek maken met een getal, eigenlijk alla wordpress.
Voorbeeld wat ik op wil slaan:
"dit-is-een-titel"
Wanneer deze titel bestaat wil ik van deze titel maken:
"dit-is-een-titel-1"
En wanneer deze al bestaat:
"dit-is-een-titel-2"
Kan iemand mij een voorbeeld geven hoe ik zoiets in elkaar programmeer?
Je kan toch bij het aanmaken bij een nieuw menu item controleren of de naam al bestaat en dan vragen of de gebruiker een andere naam in wilt voeren omdat deze al bestaat?!
Ik zou een COUNT query uitvoeren voordat de titel geinsert wordt. Het resultaat van die query is het nummer dat je toevoegt achter de titel. Tenzij het er 0 zijn uiteraard ;)
En volgens mij heeft SQL ook nog UNIQUE en DISINCT (?) om te zorgen dat iets uniek is.
Een UNIQUE constraint zorgt ervoor dat een waarde maar eenmalig mag voorkomen binnen die kolom(men). DISTINCT laat alleen unieke resultaten zien bij een SELECT binnen die kolom(men).
Wat Arjen wil is titels nummeren zodat ze uniek blijven als ze al eerder zijn ingevoerd. Dat kan je niet met UNIQUE/DISTINCT.
Wat Arjen wil is titels nummeren zodat ze uniek blijven als ze al eerder zijn ingevoerd. Dat kan je niet met UNIQUE/DISTINCT.
Gewijzigd op 10/05/2012 23:42:08 door Jurgen B
@ Jurgen: helemaal goed, denk niet zo makkelijk:
De optie van een count is een goeie, wat denk ik wel werk.
Heb je een script voorbeeld?
Marco PHPJunky op 10/05/2012 23:31:44:
De optie van een count is een goeie, wat denk ik wel werk.
Heb je een script voorbeeld?
Gewijzigd op 10/05/2012 23:58:55 door Arjen Steensma
Terwijl ik het voorbeeld maakte bedacht ik me dat je ook gewoon een SELECT title kan doen en mysql_num_rows kan gebruiken in plaats van de COUNT() methode.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$result = mysql_query('
SELECT id
FROM articles
WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);
if ($result === false) {
echo 'De query is mislukt: ' . mysql_error();
} elseif (mysql_num_rows($result) > 0) {
/* De titel komt al voor, voeg het nummer toe
Ik ga er vanuit dat je een functie hebt die
dashed dus ik voeg alleen een spatie in voor het nummer */
$_POST['title'] .= ' ' . $mysql_num_rows($result);
}
/* Query die $_POST['title'] in database invoert */
?>
$result = mysql_query('
SELECT id
FROM articles
WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);
if ($result === false) {
echo 'De query is mislukt: ' . mysql_error();
} elseif (mysql_num_rows($result) > 0) {
/* De titel komt al voor, voeg het nummer toe
Ik ga er vanuit dat je een functie hebt die
dashed dus ik voeg alleen een spatie in voor het nummer */
$_POST['title'] .= ' ' . $mysql_num_rows($result);
}
/* Query die $_POST['title'] in database invoert */
?>
Gewijzigd op 11/05/2012 00:19:07 door Jurgen B
COUNT is sneller
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$result = mysql_query('
SELECT COUNT(id) AS aantal
FROM articles
WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);
if ($result === false) {
echo 'De query is mislukt: ' . mysql_error();
} elseif ($aantal = mysql_fetch_assoc($result)['aantal'] != 0) {
/* De titel komt al voor, voeg het nummer toe
Ik ga er vanuit dat je een functie hebt die
dashed dus ik voeg alleen een spatie in voor het nummer */
$_POST['title'] .= ' ' . $aantal++;
}
/* Query die $_POST['title'] in database invoert */
?>
$result = mysql_query('
SELECT COUNT(id) AS aantal
FROM articles
WHERE title = "' . mysql_real_escape_string($_POST['title']) . '"'
);
if ($result === false) {
echo 'De query is mislukt: ' . mysql_error();
} elseif ($aantal = mysql_fetch_assoc($result)['aantal'] != 0) {
/* De titel komt al voor, voeg het nummer toe
Ik ga er vanuit dat je een functie hebt die
dashed dus ik voeg alleen een spatie in voor het nummer */
$_POST['title'] .= ' ' . $aantal++;
}
/* Query die $_POST['title'] in database invoert */
?>
Je kan ook altijd nog je id en titel in de url zetten zoals hier :
http://www.phphulp.nl/php/forum/topic/seo-unieke-titels/84552/last/
Zoals je hier kan zien staat hier dan de ^Titel^ en hier het ^id^
http://www.phphulp.nl/php/forum/topic/seo-unieke-titels/84552/last/
Zoals je hier kan zien staat hier dan de ^Titel^ en hier het ^id^
Gewijzigd op 11/05/2012 10:19:18 door Bas van de Steeg
Over snelheid had ik nog niet echt nagedacht. In dat geval COUNT() gebruiken, maar dan niet $aantal++ want als er bijv. al een rij bestaat returned hij een 1. Dat is ook het nummer dat je wilt toevoegen achter de titel in dat geval.




