Fouten in nieuwsscript
Als ik dat wil wijzigen krijg ik de volgende melding:
Even een aantal dingen voor jou om te onthouden:
Vervolgens is het aan te raden om ook nadat je verbinding hebt gemaakt met de mysql server de character-set in te stellen op utf-8:
En natuurlijk doe je hetzelfde in je HTML:
Gooi die tabel news maar weg en maak een nieuwe aan met onderstaande query.
Aangezien je meestal een beperkt aantal recente berichten wilt tonen, zou ik hieraan nog een index toevoegen, die je met DESC sorteert in omgekeerde volgorde (van nieuw naar oud):
Aan de datumkolom kun je nog DEFAULT CURRENT_TIMESTAMP toevoegen, zodat een nieuw record automatisch de huidige datum en tijd meekrijgt.
EDIT: Afhankelijk van hoe lang je nieuwsartikelen worden kan het wellicht de moeite lonen om hier een LONGTEXT van te maken, ik zat zelf al snel aan de limiet van TEXT bij het schrijven van artikelen (vooral als hier opmaak etc. bij zit). Maak van je id ook een UNSIGNED INT(eger), anders gooi je op voorhand de helft van het potentiële waardenbereik al weg, negatieve keys worden niet zo vaak gebruikt bij mijn weten :s.
Dat is waar: anders kun je maar 2,1 miljard in plaats van ruim 4,2 miljard berichten kwijt ;-) >> Maak van je id ook een UNSIGNED INT(eger), anders gooi je op voorhand de helft van het potentiële waardenbereik al weg, negatieve keys worden niet zo vaak gebruikt bij mijn weten :s.
Verspilling op microschaal = doodzonde
Verspilling op macroschaal = rechtvaardigbaar?
Dit doet mij denken aan een quote van een zeker historisch figuur.
Je moet ID op auto_increment zetten, dan ben je van je probleem af
BIGINT(255) lijkt me daarvoor wel iets overdreven, maar een INT(4) met auto_increment, zou dan perfect zijn.
Uh.. bij datetime hoef je geen value in te vullen. Die kan je leeg laten
Even een aantal dingen voor jou om te onthouden:
- Type varchar kan 1 tot en met 255 tekens bevatten en niet meer.
- Voor tekstblokken die groter moeten kunnen zijn dan die 255 tekens zou je een type 'text' voor kunnen gebruiken.
- Het beste is in het algemeen de character-set op utf8 te zetten. Hierdoor worden bijna alle leestekens ondersteund inclusief á, à etc.
- De naam 'date' is een gereserveerd woord in SQL, daarom heb ik de kolom 'created' genoemd.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE TABLE `news` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR(255) NOT NULL ,
`body` TEXT NOT NULL ,
`created` DATETIME NOT NULL , PRIMARY KEY (`id`))
ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR(255) NOT NULL ,
`body` TEXT NOT NULL ,
`created` DATETIME NOT NULL , PRIMARY KEY (`id`))
ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Vervolgens is het aan te raden om ook nadat je verbinding hebt gemaakt met de mysql server de character-set in te stellen op utf-8:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
//verbinding maken met database
$con = mysqli_connect("****", "***", "***", "hsv_de_zwervers");
mysqli_set_charset($con, 'utf8');
?>
//verbinding maken met database
$con = mysqli_connect("****", "***", "***", "hsv_de_zwervers");
mysqli_set_charset($con, 'utf8');
?>
En natuurlijk doe je hetzelfde in je HTML:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Nieuws</title>
</head>
<body>
whatever
</body>
</html>
<html>
<head>
<meta charset="utf-8">
<title>Nieuws</title>
</head>
<body>
whatever
</body>
</html>
Gewijzigd op 12/10/2015 09:14:43 door Frank Nietbelangrijk
Aangezien je meestal een beperkt aantal recente berichten wilt tonen, zou ik hieraan nog een index toevoegen, die je met DESC sorteert in omgekeerde volgorde (van nieuw naar oud):
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
CREATE TABLE news (
id INT(11) NOT NULL AUTO_INCREMENT ,
created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
title VARCHAR(255) NOT NULL ,
body TEXT NOT NULL ,
PRIMARY KEY pk_id (id) ,
INDEX ix_created (created DESC)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;
id INT(11) NOT NULL AUTO_INCREMENT ,
created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
title VARCHAR(255) NOT NULL ,
body TEXT NOT NULL ,
PRIMARY KEY pk_id (id) ,
INDEX ix_created (created DESC)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;
Inderdaad een goede aanvulling Ward.
EDIT: Afhankelijk van hoe lang je nieuwsartikelen worden kan het wellicht de moeite lonen om hier een LONGTEXT van te maken, ik zat zelf al snel aan de limiet van TEXT bij het schrijven van artikelen (vooral als hier opmaak etc. bij zit).
Gewijzigd op 12/10/2015 11:41:19 door Thomas van den Heuvel
Dat is waar: anders kun je maar 2,1 miljard in plaats van ruim 4,2 miljard berichten kwijt ;-)
Ward van der Put op 12/10/2015 11:56:02:
Dat is waar: anders kun je maar 2,1 miljard in plaats van ruim 4,2 miljard berichten kwijt ;-)
Verspilling op microschaal = doodzonde
Verspilling op macroschaal = rechtvaardigbaar?
Dit doet mij denken aan een quote van een zeker historisch figuur.