Koppla php-formulär med MySQL

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2004-09-15 18:54

Hej!

Jag har gjort ett formulär i php. Vissa av uppgifterna där vill jag lägga in i en databas mha MySQL. Problemet är att jag inte kan MySQL - är helt nybörjare och blir lite lätt gråhårig när jag försöker läsa mig till information.
Är det någon av här på 99Mac som är kan MySQL och som kan tänka sig att "handleda" mig lite i processen?

/Johanna

Det finns nog ett gäng som kan det. Själv har jag haft stor nytta av enkla guider ("tutorials") på nätet, men du har redan försökte med sådana eller?

Några frågor för veta mera exakt vad det är du behöver hjälp med: Vill du lära dig att sätta upp en MySQL-databas eller har du redan en sådan igång? Gäller det hur du skriver PHP-kod för att skriva ner i databasen? Vet du hur du ska göra för att "fånga upp" informationen som skickas med formulären? Ställer jag för knepiga frågor?

  • Oregistrerad
  • 2004-09-23 16:45
Ursprungligen av Adrian B:

Det finns nog ett gäng som kan det. Själv har jag haft stor nytta av enkla guider ("tutorials") på nätet, men du har redan försökte med sådana eller?

Några frågor för veta mera exakt vad det är du behöver hjälp med: Vill du lära dig att sätta upp en MySQL-databas eller har du redan en sådan igång? Gäller det hur du skriver PHP-kod för att skriva ner i databasen? Vet du hur du ska göra för att "fånga upp" informationen som skickas med formulären? Ställer jag för knepiga frågor?

Tack för svar! Det tog några dagar innan jag själv kunde svara - var tvungen att kolla upp några saker först...
Jag har alltså redan ett formulär (skickar med det här). Det är inget jättesnyggt eller avancerat, men det är i alla fall en början...
Ja, det är alltså detta formulär som jag vill koppla till en databas. Jag vill att tex namn, skola, e-postadress, ikryssande intresseområden ska lagras i en databas där jag kan gå in och titta på detta. Hänger ni med?

Jag har inte skapat någon databas än utan behöver dels hjälp med det, dels med hur informationen fångas upp.

Mvh Johanna

Senast redigerat 2004-09-23 21:19

Processen är ungefär såhär:

Se till att du har tillgång till MySQL och alla de uppgifter man behöver för att ansluta till MySQL-servern via PHP dvs. adressen till servern, eventuellt porten man ska ansluta till, användarnamn + lösenord till databasen, namnet på databasen (de flesta webbhotell har hjälpsidor där dessa uppgifter står och du brukar kunna få reda på ditt användarnamn /lösenord genom att logga in på dina administrationssidor hos webbhotellet).

Andra steget är att skapa en tabell i din databas där all information sedan ska ligga. Det är ganska enkelt att göra eftersom de allra flesta webbhotell tillhandahåller ett grafiskt administrationsgränssnitt för MySQL. Det absolut vanligaste är att de använder sig av phpMyAdmin och hur du loggar in brukar webhotellen göra tämligen tydligt på sina hjälpsidor. Väl inne i phpMyAdmin väljer du att skapa en ny tabell med det antalet kolumner du vill ha. Tänk på när du skapar en tabell att det kan vara en bra idé att använda en kolumn för ett unikt identifikationsnummer. Det gör det lätt att från en hemsida visa en viss post, en viss rad, från databasen.

Nu har du en tabell skapad och det är dags att börja koda PHP. Detta gör du genom att använda en uppsättning funktioner som alla börjar med mysql_ De finns dokumenterade på följande sida: http://se.php.net/manual/en/ref.mysql.php. De funktioner du använder är i enkla fall dessa:

mysql_connect("serveradress", "användarnamn", "lösenord");
$result = mysql_query("skriv din SQL-sats här");

//Om det rör sig om en sats som hämtar data
while($row = mysql_fetch_assoc($result))
{
  //Nu innehåller $row en rad ur resultatet som du kan
  //komma åt på följande vis
  echo $row['kolumn-namn'];
}

//Om det rör sig om en sats där du lägger till eller tar bort information 
//kan du kolla om $result är sant eller inte
if($result)
  echo 'det gick bra att lägga till/ta bort från databasen';
else
  echo 'något blev fel';

Du måste alltså för att göra en sådan sida du vill ha ett hum om följande:

SQL - hur skapar man tabeller, skriver satser
PHP - hur kommunicerar man med SQL-databasen och hur sköter man formulär i PHP
Annat - vad har ditt webhotell för verktyg för databas-administration och vilka är just dina login-uppgifter

Bra sidor:
http://se.php.net/ - bra php-sida
http://dev.mysql.com/doc/mysql/en/index.html - bra mysql-sida

Det finns flera sätt att utforma den databastabell som du sparar inskickade fomulär i. Egentligen vore det bäst att dela upp formuläret i två tabeller, ett för alla intressen och ett för resten. De två formulären skulle vara sammankopplade med id-nummer så att man vet vilket intresse som hör till vilken person. Jag tycker dock att du ska spara hela formuläret i en enda tabell då du är ganska ny på området, det är lite mindre kraftfullt men desto enklare. Tabellen kan se ut såhär:

CREATE TABLE `formular` (
	`id` INT NOT NULL AUTO_INCREMENT ,
	`kontaktamig` TINYINT( 1 ) NOT NULL ,
	`skola` VARCHAR( 100 ) NOT NULL ,
	`adress` VARCHAR( 255 ) NOT NULL ,
	`postnummer` VARCHAR( 10 ) NOT NULL ,
	`kontaktperson` VARCHAR( 100 ) NOT NULL ,
	`telefonnummer` VARCHAR( 50 ) NOT NULL ,
	`faxnummer` VARCHAR( 50 ) NOT NULL ,
	`epost` VARCHAR( 150 ) NOT NULL ,
	`intressen1` VARCHAR( 255 ) NOT NULL ,
	`intressen2` VARCHAR( 255 ) NOT NULL ,
	`meddelande` TEXT NOT NULL ,
	PRIMARY KEY ( `id` )
);

Det betyder i korthet: Skapa en tabell med namnet formular. Tabellen ska ha kolumnerna id (som är ett heltal som räknas upp ett för varje rad du lägger i tabellen), kontaktamig (som är en siffra), skola, adress, ... meddelande (som är text av olika längd).

Som du ser har jag en siffra för kontakta mig. Den kommer att vara 1 om personen vill bli kontaktad och 0 i annat fall. Intressena är uppdelade i två kolumner efter den gruppering du har gjort. Om en användare kryssar i att de är intresserade av IT och er vision kommer det tex. stå i intressen2. Om du undrar betyder varchar betyder variable character (string) alltså en sträng/text av varierande längd, siffran inom parenteser är denna texts maximala längd. Att meddelande-kolumnen är av typen text betyder att den kan bestå av mycket fler tecken än 255 som är en varchars maximala längd.

Som jag nämnde tidigare har de flesta webbhotell något som heter phpMyAdmin för att administrera mysql-databaser. Om du har det går du in på fliken SQL och klistrar in koden ovan och trycker på 'Go' för att skapa tabellen. Om du inte har tillgång till phpMyAdmin får du säga vad det är du faktiskt har tillgång till så kan jag hjälpa dig.

Så, nu har du skapat tabellen och det är dags att börja fylla den med data. Det gör du från din formulärsida. Där du nu mailar informationen lägger du till följande kod:

//Anslut till databasen
mysql_connect('databasserver', 'användarnamn', 'lösenord');
mysql_select_db('databasnamn');

//Koda all data så att inte konstiga tecken som \ och ' påverkar din SQL
//Görs inte detta finns det en chans att någon sabbar din databas antingen av misstag eller med flit
$kontaktamig = mysql_escape_string($kontaktme == '' ? 0 : 1);
$skola = mysql_escape_string(htmlspecialchars($_POST['skola']));
$adress = mysql_escape_string(htmlspecialchars($_POST['adress']));
$postnummer = mysql_escape_string(htmlspecialchars($_POST['post']));
$kontaktperson = mysql_escape_string(htmlspecialchars($_POST['kontaktperson']));
$telefonnummer = mysql_escape_string(htmlspecialchars($_POST['telefonnummer']));
$faxnummer = mysql_escape_string(htmlspecialchars($_POST['faxnummer']));
$epost = mysql_escape_string(htmlspecialchars($_POST['from']));
$intressen1 = mysql_escape_string(htmlspecialchars($specialintresse1.', '.$specialintresse2.', '.$specialintresse3));
$intressen2 = mysql_escape_string(htmlspecialchars($specialintresse4.', '.$specialintresse5.', '.$specialintresse6.', '.$specialintresse7.', '.$specialintresse8));
$meddelande = mysql_escape_string(htmlspecialchars($_POST['mailet']));

//Lägg till datan i databasen

//Detta är själva SQL-koden
$sql = "INSERT INTO formular (kontaktamig, skola, adress, postnummer, kontaktperson, telefonnummer, faxnummer, epost, intressen1, intressen2, meddelande) VALUES('$kontaktamig', '$skola', '$adress', '$postnummer', '$kontaktperson', '$telefonnummer', '$faxnummer', '$epost', '$intressen1', '$intressen2', '$meddelande')";

//Här utförs SQL-koden
if(mysql_query($sql))
	echo "Tack för anmälan!";
else
	echo "Något blev visst fel: ".$sql.'<br>'.mysql_error();

Ovanstående kod gör följande: Först ansluter den till databasservern (observera att du ska byta ut databasserver, användarnamn och lösenord mot de anslutningsinställningar du får från ditt webbhotell) och väljer vilken databas den ska arbeta med (databasnamnet ska du också byta ut mot ett värde du får från ditt webbhotell).

Det andra stycket kod ser till att det som användare fyller i formuläret inte påverkar din databas eller dina hemsidor. Föreställ dig tex. att någon fyller i <h1>Trollskolan</h1> i fältet för skola. Det kommer att göra så att datan ser konstig ut på sidan där alla formulär listas men tänk vad som händer om någon skriver in </html> eller </body> då vet man inte riktigt vad som händer. funktionen htmlspecialchars() ser till att special-tecken som < och & kodas och därmed oskadliggörs. Liknande behövs för att skydda mysql. I mysql är ' ett specialtecken och en elak användare kan använda det för att radera saker i din databas. mysql_escape_string ser till att detta inte kan ske.

Stycke tre är det verkligt intressanta eftersom det är koden som faktiskt utför lite SQL (structured query language, strukturerat fråge-språk, du frågar databasen om olika saker med det). Det sql-koden betyder är: Lägg till följande i tabellen formulär (i dessa kolumner) värden ('här', 'kommer', 'värdena'). mysql_query() utför sql-koden och skriver ut "Tack för anmälan" om det gick bra och ett felmeddelande om något blev fel. Just nu skriver den ut det felmeddelande som mysql ger ifrån sig samt den sql-kod du försökte utföra. Det är bra att göra så när du testar din kod men se till att ersätta det med ett mer begripligt felmeddelande innan du utsätter normala användare för ditt formulär. Det är varken användarvänligt eller ur säkerhetssynpunkt en bra idé att skriva ut "#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'bla bla bla' at line 1".

Om allt gick bra så ska du nu ha ett formulär som lagrar inskickade formulär i en tabell i en databas. Det som är kvar nu är att göra en sida där informationen visas. Här är koden för en sådan sida:

<table border="1">
<tr>
<th>Kontakta mig</th>
<th>Skola</th>
<th>Adress</th>
<th>Postnr</th>
<th>Kontaktperson</th>
<th>Telefon</th>
<th>Fax</th>
<th>E-post</th>
<th>Intressen 1</th>
<th>Intressen 2</th>
<th>Meddelande</th>
</tr>
<?

//Anslut till databasen
mysql_connect('databasserver', 'användarnamn', 'lösenord');
mysql_select_db('databasnamn');


//Hämta det som finns i databasen
$result = mysql_query("SELECT * FROM formular");

//För varje rad
while($row = mysql_fetch_assoc($result)): ?>
<tr>
<td><?=$row['kontaktamig'] ? '<b>ja</b>' : 'nej';?></td>
<td><?=$row['skola'];?></td>
<td><?=$row['adress'];?></td>
<td><?=$row['postnummer'];?></td>
<td><?=$row['kontaktperson'];?></td>
<td><?=$row['telefonnummer'];?></td>
<td><?=$row['faxnummer'];?></td>
<td><a href="mailto:<?=$row['epost'];?>"><?=$row['epost'];?></a></td>
<td><?=$row['intressen1'];?></td>
<td><?=$row['intressen2'];?></td>
<td><?=$row['meddelande'];?></td>
</tr>
<? endwhile ?>
</table>

Du får givetvis omge koden ovan med <html> <head> osv.

Som du ser har jag gjort en tabell som överst har en rad med rubriker. Tabellens övriga rader kommer att hämtas från databasen. Liksom när du lade in data börjar du med att ansluta till databasen på samma sätt som förut (glöm inte att göra samma inställningar som ovan). Sedan hämtas alla rader från databasen. SELECT * FROM formular bytyder: hämta alla kolumner (* = alla kolumner) från tabellen formular.

Sedan har du en while-loop som för varje rad skriver ut densamma. Som du ser använder jag mig av <?=$variabel;?> det är en kort-version av att skriva <?php echo $variabel; ?>. $result innehåller alla hämtade rader från tabellen dvs hela tabellen. mysql_fetch_assoc() hämtar en rad ur tabellen och returnerar den som en associativ array dvs en array du kan komma åt med text-nycklar. Du kan alltså komma åt postnummret genom att skriva $row['postnummer'] istället för att veta att postnummer-kolumnen är kolumn nummer 4 och skriva $row[4]. Observera att den text du kommer åt en viss kolumn med är samma som namnet du gav kolumnen då du skapade tabellen. kontaktamig är en etta eller en nolla vilket på dataspråk också kan betyda sant eller falskt. Jag har använt mig av en kort-version av en if-sats för att omvandla detta till ja och nej. Epost-adressen skriver jag ut som en länk så att det är lätt att skicka epost till personen ifråga.

Så, det var en liten guide till hur du lägger till inskickade formulär i en databas och hur du får ut datan igen. Det finns givetvis mängder av funktionalitet man kan lägga till detta som tex. att ta bort rader, ändra i inlagda poster, göra så att tabellen går att sortera på en massa sätt och mer men börja med att göra och förstå ovanstående så är resten relativt enkelt.

Lycka till!

Ursprungligen av Gabriel Falkenberg:

Som jag nämnde tidigare har de flesta webbhotell något som heter phpMyAdmin för att administrera mysql-databaser. Om du har det går du in på fliken SQL och klistrar in koden ovan och trycker på 'Go' för att skapa tabellen. Om du inte har tillgång till phpMyAdmin får du säga vad det är du faktiskt har tillgång till så kan jag hjälpa dig.

Johanna är en kollega till mig och det är jag som har installerat PHP och MySQL på våran OS X 10.3.5 server.

Det som är installerat på servern är:

CompleteApache2-2.0.48
CompletePHP4-4.3.4R2
CompleteMySQL-4.0.15

Det kanske kan hjälpa lite på vägen, det enda jag har gjort efter dessa installtioner är att aktivera PHP i OS X serverns inställningar. Ni får gärna förklara om det behövs något förutom ovanstående, jag kan inte ett skvatt om PHP och MySQL.

1
Bevaka tråden