Eerst even een tip van mij: om een database van Excel of Access zeer eenvoudig over te zetten naar MySQL gebruik ik nu Navicat. Zeer handig programmaatje:)

Om mijzelf php en MySQL eigen te maken probeer ik een voorbeeld-internetshop in elkaar te knutselen. Ik heb nu een test-MySQL-database van 8 kolommen en 4 rijen. De eerste kolom betreft product IDs, de tweede de titel van een boek, de derde de schrijver, etc.

Mijn php-code print de rijen afzonderlijk op het scherm. Is het ook mogelijk om iedere 'cel' apart op het scherm te printen? Ik wil nl. een href-link maken op een van de cellen van de kolom die correspondeert met het ID (kolom 1) en dit ID in meestuurt naar een volgende pagina. Misschien is dit wel voor super-gevorderden, maar is over dit onderwerp (MySQL database-gebruik voor shops) misschien een goed boek geschreven?? Misschien kan een van jullie mij een klein zetje in de goede richting geven....

Hier is mijn code tot nu toe (opmaak van de website met menu's etc. in html, javascript laat ik achterwege)

<html>
<head></head>
<body>

<?php

// open connection to MySQL server
$dbcnx = @mysql_connect('localhost', 'root', '#');
if (!$dbcnx) { echo( '<P>Unable to connect to the database server at this time!</P>' ); exit();}

// select database
mysql_select_db('book') or die ('Unable to select database!');

// create and execute query
$query = 'SELECT * FROM data';
$result = mysql_query($query)
or die ('Error in query: ' . mysql_error());

// check if records were returned
if (mysql_num_rows($result) > 0)
{
// print HTML table
echo '<table width=100% cellpadding=10 cellspacing=0 border=1>';
echo
'<tr><td><b>ID</b></td><td><b>Title</b></td><td><b>Author</b></td><td><b>Publisher</b></td><td><b>Year</b></td><td><b>Pages</b></td><td><b>Price</b></td><td><b>Comment</b></td>';

while($row = mysql_fetch_row($result))
{
echo '<tr>';
echo '<td>' . $row[0] . '</td>';
echo '<td>' . $row[1] . '</td>';
echo '<td>' . $row[2] . '</td>';
echo '<td>' . $row[3] . '</td>';
echo '<td>' . $row[4] . '</td>';
echo '<td>' . $row[5] . '</td>';
echo '<td>' . $row[6] . '</td>';
echo '<td>' . $row[7] . '</td>';
echo '</tr>';
}
echo '</table>';
}
else
{
echo 'No rows found!';
}

// processing complete; free result set
mysql_free_result($result);

// close connection
if ($connection)
{
mysql_close($connection);
}


?>



</body>
</html>
Voordat je verder gaat, ga je eens verdiepen in normalisatie. De schrijver van een boek, staat niet in dezelfde tabel als de titel van het boek. 1 schrijver kan namelijk meerdere boeken hebben geschreven en in een goed opgestelde database sla je data slechts 1x op. Je kunt dus niet bij ieder boek wéér de naam van de schrijver opslaan.

Zie http://www.phphulp.nl/php/tutorials/3/150/

Tabel boeken:
id
titel

Tabel schrijvers:
id
naam

Koppeltabel:
id_boeken (foreign key met 'boeken')
id_schrijvers (foreign key met 'schrijvers')

En gebruik zo veel mogelijk de innoDB-engine van MySQL en dus niet de MyISAM-engine die default in PHPmyAdmin wordt gekozen. Anders kun je geen foreign keys gebruiken en hangen de tabellen als los zand aan elkaar.

Edit: Of gebruik PostgreSQL wanneer je met een 'echte' database wilt leren werken... (Kom maar op met het commentaar!)
Goed, ik kan 1 willekeurige cel in mijn query stoppen met:

<?php
$query = 'SELECT Title FROM data WHERE id=3';
?>

En stel ik wil er twee uit 1 rij, dan doe ik gewoon:

<?php
$query = 'SELECT Title, Author FROM data WHERE id=3';
?>

Piece of cake, maar ik wil graag een query waarbij kolom 1 en kolom 2 naast elkaar komt, maar waarbij ik bij kolom 2 nog een href-je kan plaatsen. Eigenlijk een query in twee delen dus... Is dat mogelijk??

Reageren