Videre med PHP/mySQL

Tags:    php
Skrevet af Bruger #1 @ 16.06.2001
Mere om PHP og mySQL

I min artikel omkring PHP og mySQL, sluttede jeg af med at nævne nogen ting, som kunne have været bedre. Datoen var ikke så pæn, fordi vi bare lod mySQL autogenerere den. Vi kunne også godt bruge en slags admin del, hvor de forskellige numre kan slettes. Men det mest væsentlige er nok muligheden for at sortere de forskellige numre alt efter titel, kunster eller bare dato. De 3 ting vil jeg nu gennemgå.

Pænere dato

Det er faktisk ganske simpelt. Vi lader bare mySQL generere datoen som før, og så bruger vi en lille smart funktion som Carsten har skrevet (påstår han) til at ændre lidt på den, så den kommer til at stå i normalt dansk dato format. Funktionen ser således ud:

<?
function reverse_date($a)

{

	$b = substr($a,6);

	$d = substr($a,0,4);

	$e = substr($a,-4,-2);

	echo ("$b-$e-$d");

}
?>
Personligt synes jeg at funktionen er lidt kryptisk. Jeg har siddet og luret en del på den, og er kommet til den konklusion, at den går ind og henter de forskellige dele af mySQL datoen og derefter placerer dem så det ser ordentligt ud. Ganske smart. Nu skal vi så bare vise datoen. Det kunne gøres sådan her:
<?
	$nicedate = reverse_date($dato);
	echo "$nicedate";
?>
Her tager vi så $dato (som er hentet ud fra databasen ligesom i forrige artikel), og kører den igennem reverse_date funktionen. Derefter udskriver vi den bare som vi plejer med et echo. Ganske simpelt, og så alligevel så smart :-).

Admin del

Man kan lave utroligt avancerede admin funktioner, men det tror jeg nu ikke jeg vil vise her. Det er jo et ganske simpelt eksempel, og derfor laver vi også bare en ganske simpel admin del, der bare sørger for en hurtig og enkel metode at slette et nummer på. admin.php ser således ud:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Mine MP3 numre</title>
</head>

<body>
<h3 align="center">Mine mp3 numre - Admin del</h3><br>
<br>

<?
mysql_connect("localhost","root");
mysql_select_db("mp3");
$query = mysql_query("SELECT * FROM mp3numre ORDER BY id");
echo "<font color="red"><ol>";
while($r = mysql_fetch_array($query)) {
$kunstner = $r["kunstner"];
$titel = $r["titel"];
$dato = $r["dato"];
$id = $r["id"];
echo "<li>$kunstner - $titel blev tilføjet $dato og har ID nr. <b>$id</b>";
}
echo "</ol></font>";
echo "<br><br>";
echo "<form action="slet.php">";
echo "Skrev det ID du vil slette og tryk på "Slet"<br>";
echo "<input type="text" name="id">
<input type="submit" name="slet" value=" - Slet - ">";
echo "</form>";
?>

</body>
</html>
Som du måske kan se, genbruger vi meget af koden fra mp3er.php. Vi skal jo bare vise numrene og derefter give muligheden for at slette. Derfor skriver vi også et ID på, så der ikke er nogen tvivl om hvilket nummer der skal væk. Derefter har vi en form, der peger på slet.php. Den fil bruges til at slette nummeret, og derefter gå tilbage til siden. slet.php ser således ud:
<?if($slet) {
mysql_connect("localhost","root");
mysql_select_db("mp3");
$sletquery = mysql_query("delete from mp3numre where id='$id'");
}
Header("Location: admin.php");?>
Her er det meget vigtigt at du skriver det nøjagtigt ind. Når der skal sendes en header, må der nemlig ikke være sendt noget til browseren, hvilket vil sige at der ikke må være nogen mellemrum (det er derfor alt koden er så klistret sammen). Får du en eller anden fejl hvor der står noget med header, så se lige om du har nogen mellemrum. Selve koden er i øvrigt rimelig simpel. Først tjekker vi om værdien $slet er med. Den værdi giver vi jo med i admin.php, ved hjælp af knappen. Derefter connecter vi som vi plejer, og fortæller så at mySQL skal slette der hovr id er lig med det ID vi sendte fra admin.php. Til sidst beder vi så browseren om at hoppe tilbage til admin.php. Ganske simpelt.
Sortering

Så mangler vi vist bare muligheden for at sortere lidt i vores liste. Vi gør det på den mest brugervenlige måde, nemlig med en dropdown box, hvor de forskellige sorterings metoder er listet i. Jeg viser lige lidt kode, og forklarer bagefter. Her ser i den nye mp3er.php:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Mine MP3 numre</title>
</head>

<body>
<h3 align="center">Mine mp3 numre</h3><br>
<br>
<?
if($order == "") {
$order = "dato";
}
?> 

<form action="<? echo $php_self ?>">
<select name="order">
	<option value="kunstner">Sorter efter kunstner</option>
	<option value="titel">Sorter efter titel</option>
	<option value="dato" selected>Sorter efter dato</option></select>
	<input type="submit" name="Sorter" value="Sorter">
</form>
<?
mysql_connect("localhost","root");
mysql_select_db("mp3");
$query = mysql_query("SELECT * FROM mp3numre ORDER BY $order");
echo "<font color="red"><ol>";
while($r = mysql_fetch_array($query)) {
$kunstner = $r["kunstner"];
$titel = $r["titel"];
$dato = $r["dato"];
echo "<li>$kunstner - $titel blev tilføjet $dato";
}
echo "</ol></font>";
?>

</body>
</html>
Vi starter lige med at tjekke, om $order har en værdi. Han den ikke det, vil der opstå fejl, da vi lidt længere nede sorterer efter $order. Derfor, hvis $order ikke har en værdi, sætter vi den lige til dato. Derefter har jeg opstillet en dropdown box, hvor en sorteringsmåde kan vælges. Lidt længere nede har vi den gode gamle kode, med kun en lille modifikation. Hvor vi før sorterede efter ID, sorterer vi nu som sagt efter $order, altså en variabel. Nu kan du så bare vælge fra boksen, trykke på sorter, og så har du det sådan som du vil have det. Vildt smart, synes jeg selv.

Og det var så det. Nu kan din MP3 database sorteres, administreres, samt vise en pæn dansk dato. Det var da ikke så svært, vel?


Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (5)

User
Bruger #3530 @ 02.06.03 19:54
Flot flot
User
Bruger #4003 @ 11.11.03 16:01
Et lille tip... (jeg har altid været modstander af, at oprette functions, som udfører noget standardfunktionalitet af den ene eller anden slags ;-)

Mit bud: Lad MySQL formattere din dato allerede når du trækker den ud, i stedet for at trække ud i standard format, og SÅ vende den rundt.

Eks.
SELECT DATE_FORMAT( dato, '%d-%m-%Y' ) AS dk_dato
User
Bruger #3470 @ 25.01.04 00:12
din artikel er god nok, men desværre laver du hele tiden fejl i dine echo's, fx
echo "<li>$kunstner - $titel blev tilføjet $dato";
skal ændres til
echo "<li>".$kunstner." - ".$titel." blev tilføjet ".$dato";
og da jeg ikke bare laver copy-paste, så ændrer jeg det automatisk når jeg skriver det ind, men din kode burde stadig være skrevet så godt at man kunne copy-paste det ind i sit php-dokument, og så ville det virke...
User
Bruger #8355 @ 19.11.05 00:16
God skrevet! Synes bare ik jeg kunne få det dato halløj til at virke.. er lidt i tvivl om hvor det skal sættes ind :)
User
Bruger #8985 @ 04.11.06 18:16
Nicolai > Mener du fejl fordi han bruger variabler i sine echo's? Det kan man godt hvis de står med dobbel-quote, altså " hvorimod man ikke kan bruge dem i '
Du skal være logget ind for at skrive en kommentar.
t