Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.
Gabriel Falkenberg
  • Plats Stockholm
  • Registrerad 2001-05-17
  • Senast aktiv 2013-03-27
  • Antal inlägg 559

Foruminlägg

De senaste inläggen Gabriel Falkenberg har skrivit i forumet.

Hej, kan man inte få rader i en tabell att komma in i omvänd ordning dvs. den längst ned kommer först?

Hej

Jag håller på att utveckla ett program till OS X vars målgrupp är företag som använder OS X i någon form av nätverk. Jag har ingen erfarenhet av att administrera ett nätverk av Macar och undrar vad jag ska tänka på för att göra jobbet så smidigt som möjligt för en administratör. Är det att leverera programmet på en dmg-fil (som är enklast för en vanlig användare) eller är det enklare att fjärrinstallera ett program som använder Apples installerar-program (.pkg)?

När programmet väl finns på klienterna behöver det vissa uppgifter (adress/ip till server, portnummer etc), finns det standardiserade sätt att sprida dessa med installationen (och nu tänker jag inte på alternativa lösningar som Bonjour för det skulle inte fungera för alla inställningar)? Likaså licensinformationen, hur vill man som admin att den ska hanteras?

Till sist har vi uppdateringar. Jag har tänkt använda mig av Sparkle (http://andymatuschak.org/pages/sparkle), är det ok även i en nätverksmiljö? Jag vet inte om det är vanligt att man är administratör över sin egen dator, jag antar inte och i så fall kanske Sparkle bara är till besvär men vad finns det för alternativ? Finns det mjukvara för att via en appcast uppdatera program i ett nätverk och om inte, är det kanske något jag själv borde utveckla

Det jag vill veta är alltså hur jag ska göra mitt program för att det ska vara så enkelt som det bara går för den som administrerar nätverket att installera och underhålla mitt program. Mi n tanke är att om det är busenkelt att installera och sköta kommer fler våga pröva det.

När det gäller PHP + MySQL och unicode så verkar det fungera ganska bra trots att man har en gammal version av MySQL. Sparar du en unicode-sträng från PHP och sedan kollar på den i tex. phpMyAdmin kommer det se konstigt ut eftersom kodningen skiljer sig åt men om du från php plockar ut samma sträng och presenterar den på din UTF-8-kodade sida så märker du inte av vad MySQL har för format.

Det är i alla fall erfarenheten jag har. Problemet är att det blir svårt att exportera databasen och importera den någon annanstans såvida man inte har en väldigt ny version av phpMyAdmin där man kan välja vilken teckenkodning man vill exportera/importera till/från.

Kanske inte helt ortodoxt men det kan fungera ganska bra. Själv tycker jag det jobbigaste med UTF-8 är att de allra flesta funktioner inte fungerar med dessa strängar så man får bestämma sig noga för var och hur konverteringat skall ske, det blir ju inte helt effektivt om varje metod inleder med att koda varje sträng till ISO för att sedan konvertera tillbaka innan den returnerar.

Tiger lär förövrigt innehålla en hel del nya unix-verktyg som fungerar med unicode man kan bara hoppas att sådant blir vanligare framöver.

Jag anade att det var något sådant, skumt att det inte står på kodskivan... Tack för hjälpen!

Då jag sorterade gamla spel hittade jag en kodnyckel som jag inte vet vart den hör. Någon som känner igen den? Den borde höra till något av de spel jag skänker bort (se länken ovan).

På Statens strålskyddsinstitut finns följande rapport att ladda ned om mobiltelefoners strålning. I den finns en tabell över hur mycket strålning olika apparater avger. De skriver att en GSM-telefon har ett SAR-värde på 0,3-2 W/kg medan WLAN har 0,01-0,1. Rapporten finns att hämta på:

http://www.ssi.se/ickejoniserande_stralning/mobiltele/UppdrMobil2004.pdf

WLAN nämns dock bara i förbifarten.

Om du skickar formuläret med POST så kommer variablerna hamna i arrayen $_POST['fältnamn'] alltså <input type="text" name="epost"> kommer hamna i $_POST['epost']

Det kan du använda för att fylla i det som just skickades på följande vis:

<input type="text" name="epost" value="<? if(!empty($_POST['epost'])) echo $_POST['epost']; ">

Du får dock tänka på att man aldrig ska använda användar-input direkt som i exemplet ovan utan snarare göra såhär:

//Detta placeras överst på sidan

$epost = ''; //Sätter standardvärden

//Har någon redan postat formuläret fylls detta i men först oskadliggörs all html i det postade
//så att användaren inte kan "förstöra" sidan genom att skriva saker som </html> eller liknande
if(!empty($_POST['epost']))
$epost = htmlspecialchars($_POST['epost']);

//och sedan i html-koden skriver du bara
<input type="text" name="epost" value="<?=$epost;?>">

Om du inte redan visste det så är <?=$variabel;?> bara ett kortare sätt att skriva <? echo $variabel; ?> på

Ursprungligen av tjompa:

När du inte pluppar reklam kanske det finns tid att lägga upp lite skärmdumpar på er webbsida?

Man kan ladda ner demo-version av programmet gratis. Det verkar vara ett program gjort i 4D och jag skulle gissa att anledningen till att det inte finns några skärmdumpar uppe är att det är... inte särkilt snyggt. Men om du gillar turkos färg, understrukna menyval och mycket VERSALER så är det bara att köra hårt. Observera att jag inte testat programmet, det är säkert väldigt bra och enkelt men jag får kväljningar bara jag ser det...

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!

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

Sedan jag installerade den nya versionen av Firefox har "type ahead find" slutat fungera som det ska. Jag har ställt in att den bara ska söka länkar och dessutom bara början av länkar men den ignorerar den senare inställningen, någon som kan kolla om de är drabbade av samma sak?

En bra grej om man vill ställa in sådana inställningar som det inte finns något grafiskt gränssnitt för är att skriva about:config i adressfältet och trycka enter. Då tas man till en sida där man kan göra alla dessa inställningar tex. ändra hur "type ahead find" skall bete sig.

Tack för svaren, tyvärr verkar inget hjälpa. Det ska vara onLoad, med "url" menade jag att det spelar ingen roll om jag skriver en relativ sökväg "images/myimage.jpg" eller en exakt sökväg "http://server.com/images/myimage.jpg" och det spelar heller ingen roll vilken level jag laddar bilden i. Däremot verkar det som om det inte är loadMovie som är problemet utan _root.onLoad. I Firefox, Safari etc. så kallas inte den funktionen...

Ska göra ett nytt försök i eftermiddag. Är det någon som känner till en actionscript/flash tutorial som är riktad mot programmerare? Jag känner inte att jag har greppat vissa fundamentala aspekter såsom scope, levels osv. men jag vill ogärna läsa hur man gör en for-loop. En tutorial som beskriver skillnaderna mellan actionscript och godtyckligt annat (riktigt) programmeringsspråk vore toppen, finns en sådan?

Jag har suttit och knåpat ihop ett bildspel i Flash som dynamisk laddar bilder med hjälp av funktionen loadMovie. Brydde mig inte om att testa så mycket i webbläsare förrän precis i slutet och då visade det sig att ingenting fungerade i ett flertal webbläsare. Jag lokaliserade felet till loadMovie-funktionen men kan inte komma på vad jag ska göra för att få det att fungera. Kan någon med lite kännedom om actionscript säga vad det är för fel på följande kod:

_root.onLoad = function() {
  _root.createEmptyMovieClip("myclip", 0);
  myclip.loadMovie("url");
}

där "url" är sökvägen till någon godtycklig jpg-fil (har prövat både exakta och relativa sökvägar utan resultat). Koden placeras i ett helt nyskapat projekts första ruta men fungerar bara fullt ut i IE (till både mac och pc). I Opera till mac kan man se filmen om man ser den genom en webbserver men inte om man ser den lokalt. I Firefox och Safari fungerar det varken eller.

Flash-filmen är gjord i Flash MX och alla webbläsarna använder den senaste versionen av Flash-pluginen. Jag kan inte för mitt liv förstå vad som är fel, antagligen något väldigt grundläggande eftersom jag inte kan hitta någon annan med samma problem när jag googlar på det...

Jo visst kunde man specificera text-koding vid kompilation. Genom att bara lägga till -encoding UTF-8 när man kör javac så fungerar allt som det ska. Jag trodde att javac förväntade sig UTF-8 men tydligen var det inte så. Skönt att det var så pass enkelt trots allt

hehe, jag trodde jag prövat allt men det verkar som om det förväntas att man använder macroman när man kodar för när jag konverterar java-filen till macroman och kompilerar och kör så visas det perfekt. Men jag tycker ändå man borde kunna koda i UTF-8 om man vill, känns mer kompatibelt så. Kanske finns det inställningar att göra när man kör javac för just text-kodning... måste kolla.