Skapa kontohanteringssystem med PHP och MySQL?

Permalänk

Skapa kontohanteringssystem med PHP och MySQL?

Hej

Jag ska bygga upp ett, till en början, enkel konto hanteringssystem för vår hemsida. Man ska kunna registrera konto men också hantera registrerad konto efter det. Jag vill bara få bekräftat att jag tänker rätt:

1.)
Har läst om SQL under min it utbildning om hur man, med kod, söker upp och visar vald data ur en SQL databas. Det är väl något liknande när man ska plocka ut data och sedan visa resultatet i webformuläret med hjälp av php?

2.)
När ett konto skapas, är det en ny tabell som måste skapas. Det räcker väl med en ny rad i den redan existerande tabellen?

3.)
Vet någon, någon bra bok för detta ändamål?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

1. Ja, samma princip

2. Du skapar bara en ny rad i tabellen

Det du vill göra är att ha en tabell med användarnamn, lösenord (krypterad!), epost, och alla annan data som ska vara kopplad till kontot. Det är sedan bara att göra något slags formulär för att registrera sig på sidan.

Du behöver dels hämta data när någon ska logga in och dels hämta data och uppdatera data om man ska ändra något på sin användare

Kom ihåg att tänka på säkerheten!

Permalänk
Skrivet av kobb3:

2. Du skapar bara en ny rad i tabellen

Vilket är kommandot för ny rad hittar det inte?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Skrivet av kobb3:

lösenord (krypterad!)

Saltat och hashat!

(Gör inte autenticeringsfunktionerna själv. Det är lätt att göra fel. Använd en färdig modul som redan har granskats.)

Permalänk
Medlem
Skrivet av freddehboy:

Vilket är kommandot för ny rad hittar det inte?

try{ $sql = "INSERT INTO tablename (partner_id,custom10,p". $partner_id .") VALUES (:partner_id, :custom10, CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE p". $partner_id ." = CURRENT_TIMESTAMP, ratio = '". $ratio. "'"; $query = $pdo->prepare($sql); $query->execute(array( ':partner_id' => $partner_id, ':custom10' => $custom10 )); }catch(PDOException $e){ echo"<br>" . $e->getMessage(); }

såhär kan det se ut med pdo

Visa signatur

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Permalänk

Har en php kod för att kunna plocka ut data ur en sql databas och det lyckas

Nedan förklaras mina steg och koden bakom:

Har filen loggain.htm med knappen ”Logga in” → Då öppnas filen ”openconnection.php” vilket i sin tur öppnar filen inloggad.htm med ett formulär. Koden till htm filen, ses nedan:

<HTML> <HEAD> <! Hemsidenamnet på fliken i webbläsaren > <TITLE>Ditt konto</TITLE> <! Anger att jag vill göra hemsidan responsiv > <meta name="viewport" content="width=device-width, initial-scale=1.0"> <! Anger att jag vill använda CSS filer för formatering m.m. > <link rel="stylesheet" type="text/css" href="../css_mallar/ovrig.css"> <link rel="stylesheet" type="text/css" href="../css_mallar/responsive.css"> <link rel="stylesheet" type="text/css" href="../css_mallar/kontot.css"> </HEAD> <BODY> <! Tabell för sid strukturen > <! ----------------------------- Start ----------------------------- > <section class="body"> <form method="post" action="../data/openconnection.php"> <! 1> <div class="row"> <div class="col-12"> <div class="col-2"> <IMG SRC="../bilder/Logo-FSbla.png" width="400" height="400"> </div> <div class="col-10"> Ert konto: <HR> </div> </div> </div> <div class="col-12"> <div class="col-4"> <! Ifyllnadsbar textfält > <label>Datum:</label> <input name="datum" type="date""><BR> <! Ifyllnadsbar textfält > <label>F&ouml;reningsnamn:</label> <input name="fnamn" value=""><BR> <! Ifyllnadsbar textfält > <label>Verksamhets Omr&aring;de:</label> <input name="fvomrode"> </div> <div class="col-3"> <! Ifyllnadsbar textfält > <label>Kontakt person:</label> <input name="kperson"><BR> <! Ifyllnadsbar textfält > <label>Telefon:</label> <input name="tfn"><BR> <! Ifyllnadsbar textfält > <label>E - mail:</label> <input name="emailfrom" type="email"><BR> </div> <div class="col-1"> </div> <div class="col-4"> <! Ifyllnadsbar textfält > <label>Gatuadress:</label> <input name="gadress"><BR> <! Ifyllnadsbar textfält > <label>Post Nr:</label> <input name="postnr"><BR> <! Ifyllnadsbar textfält > <label>Ort:</label> <input name="ort" type="t"><BR> </div> <div class="row"> <div class="col-6"> <! Ifyllnadsbar meddelande ruta > &Ouml;vriga upplysningar:<BR> <textarea name="ovriginfo"></textarea> </div> <div class="col-6"> <div class="row"> </div> <! Udantag från CSS formatering > <center> <input id="submit" name="submit" type="submit" value="Logga ut!"> </center> </div> </div> </div> <! 1> </div> </form> </section> <! Formuläret slutkod > <! ----------------------------- END ------------------------------- > </BODY> </HTML>

  • I fältet datum vill jag placera data vilket jag tar ut ur databasen!

Koden för php filen, ses nedan:

<?php // Skapa SQL anslutning och Konntrollera den $dbaccessfs = @mysql_connect('localhost', 'username', 'password'); if(!$dbaccessfs) { echo'<p>Anslutning misslyckades, var god försök igen!</p>'; exit(); } // Väljer den databasen vi ska jobba i mysql_select_db('db', $dbaccessfs); //mysql_select_db('db', dbanslutningen) // $ansmedd = "Anslutningen är upprättad och du loggas In!"; include '../sidor/inloggad.htm'; $selectdatum = @mysql_query('SELECT cell FROM tabellen'); if(!$selectdatum) { exit('<p>Begäran behandlades felaktigt! ' . mysql_error() . '</p>'); } // Presenterar datum i vald formulär while ($showdatum = mysql_fetch_array($selectdatum)) { $showreultdatum = $showdatum['datum']; //formuläret Datum i inloggad.htm visar data från dbanslutningen och cellen Datum echo '<p>' . $showdatum['datum'] . '</p>'; } ?>

Det jag får ut visa längst ner i filen?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Skrivet av freddehboy:

Har en php kod för att kunna plocka ut data ur en sql databas och det lyckas

Kan inte ange koden för det avslöjar för mycket om vårt projekt!

Jag har ett formulär där jag vill presentera datan som den plockar ut men hur jag än gör får jag inte den utplockade datan till mitt fält?

Allt fungerar men ingen data syns i fältet!??

Mvh Fredrik

Du vill ha hjälp med kod, men kan inte visa koden?..

Tro mig.. koden kommer inte avslöja förmycket

Visa signatur
Permalänk

Jag bifogar koden på måndag, har den tyvärr inte hemma

Ha en bra helg tills dess

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Mina koder finns ovan för beskådning

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Om man ser på php koden har jag inkluderat inloggad.htm i opencconnection.php filen. Är det där det är problem att hänvisningen tioll fältet inte kan se av koden i php filen?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem

Oklart vad du hade för problem men dina anrop till databasen verkar lite konstiga tex "SELECT cell FROM tabellen", man kör oftast "SELECT * FROM tabellen WHERE username='{username}'" för att få allt om en användare.

Läs på lite om databaser och kanske PDO för det brukar vara lite enklare i början, men när man väl fått till det brukar det gå bra framöver

Permalänk
Skrivet av Kabeltv:

Oklart vad du hade för problem men dina anrop till databasen verkar lite konstiga tex "SELECT cell FROM tabellen", man kör oftast "SELECT * FROM tabellen WHERE username='{username}'" för att få allt om en användare.

Läs på lite om databaser och kanske PDO för det brukar vara lite enklare i början, men när man väl fått till det brukar det gå bra framöver

Om han nu inte bara vill ha ut värdena i kolumnen "cell" från tabellen "tabellen".

Visa signatur
Permalänk
Legendarisk
Skrivet av freddehboy:

Om man ser på php koden har jag inkluderat inloggad.htm i opencconnection.php filen. Är det där det är problem att hänvisningen tioll fältet inte kan se av koden i php filen?

Det är inget problem i sig (dessutom ärver inkluderade filer det scope de anropas från), däremot tyder frågeställningen på missförstånd kring relationen mellan servern och klienten. PHP:s roll här är bara att behandla förfrågan och generera ett svar (din sida) (fig. HTTP-request) åt klienten, när det har skickats avslutas processen och scriptet körs inte igen förrän användaren t.ex. klickar på en länk eller skickar ett formulär, varpå en helt ny cykel påbörjas. Du kan jämföra det med att två personer skickar brev till varandra och hela tiden glömmer bort vad som skrivits tidigare. Eftersom att din inkluderade fil bara innehåller HTML (och ingen PHP) så kommer innehållet skickas som det är till klienten, och det finns inget i ditt HTML-dokument som behöver (eller kan ha) någon tillgång till din PHP-kod eftersom att svaret behandlas av klienten medans PHP körs på servern.

Övriga funderingar:

  • Var noggrann med hur du formaterar och indenterar din kod. Välstrukturerad kod (varesig det är PHP, HTML, SQL, reguljära uttryck eller något annat) är lättare att läsa och arbeta med både för dig och andra, minskar risken för misstag och gör det lättare att få hjälp.

  • Var snäll mot klienterna och leverera inte trasig HTML. I koden ovan skriver du ut fragment om programmet påträffar fel (<p>Anslutning misslyckades, var god försök igen!</p> är inte ett komplett dokument), och annars skickas först ett komplett dokument från inloggad.htm, sedan ytterligare fragment från echo '<p>' . $showdatum['datum'] . '</p>'; som kommer hamna efter att dokumentet egentligen skulle ha avslutats.

  • Fundera på hur du kan strukturera programmet / scriptet för att alltid skriva ut ett giltigt dokument. Ett tips för att lyckas med det är att undvika anrop till exit() så långt det är möjligt, för mycket sådant tenderar att leda till återvändsgränder. Never say die().

  • En kommentar i HTML har formatet <!-- Din text -->. Många editorer / webbläsare har verktyg för att hjälpa dig validera resultatet medans du arbetar, kontrollera om det finns något sådant till de du använder.

  • Avsluta aldrig filer med ?>. Allt utanför <?php ?>-taggar skickas direkt till klienten och det är lätt att få med oavsiktigt whitespace sist i filer om de avslutas på det sättet, bara utelämna taggen så blir det både mindre att skriva och mindre risk för problem. Block behöver bara avslutas om du vill lämna tolken för att t.ex. skicka större stycken HTML.

  • Undvik @ för att dölja felmeddelanden, det är svårt att arbeta med eftersom att du måste hantera det rad för rad i hela programmet och är dessutom en förhållandevis dyr (långsam) operation. Konfigurera det hellre för hela miljön via php.ini:error_reporting. Oftast aktiverar man alla varningar under utveckling, men stänger av allt och loggar endast tyst på liveservrar.

  • ext/mysql är föråldrat och stöd för det kommer försvinna helt i framtida versioner av PHP. Titta på PDO eller ext/mysqli istället:

    $conn = new \PDO("mysql:host=localhost;dbname=test", "yourUser", "horsebatterystaple"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT `colA` FROM `table` WHERE `colB` = :yourParameter;"); $stmt->execute(["yourParameter" => "yourValue"]); foreach($stmt->fetchAll() as $row) { printf("%s\n", $row["colA"]); }

    Exempel med PDO

    $conn = new \mysqli("localhost", "yourUser", "horsebatterystaple", "test"); $yourParameter = "yourValue"; $stmt = $conn->prepare("SELECT `colA` FROM `table` WHERE `colB` = ?;"); $stmt->bind_param("s", $yourParameter); $stmt->bind_result($colA); $stmt->execute(); while($stmt->fetch()) { printf("%s\n", $colA); }

    Exempel med ext/mysqli
Visa signatur

Abstractions all the way down.

Permalänk
Skrivet av Kabeltv:

Oklart vad du hade för problem men dina anrop till databasen verkar lite konstiga tex "SELECT cell FROM tabellen", man kör oftast "SELECT * FROM tabellen WHERE username='{username}'" för att få allt om en användare.

Läs på lite om databaser och kanske PDO för det brukar vara lite enklare i början, men när man väl fått till det brukar det gå bra framöver

Namnen "cell och tabellen" är bara för inlägget här, vill inte och kan inte avslöja namnet på tabellen för då skulle projektets namn avslöjas och det kan jag tyvärr inte.

Anropet fungerar utmärkt och datan plockas ut utn problemet är att få datan att visas i rätt formulär/fält!

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Skrivet av Tunnelsork:

Det är inget problem i sig (dessutom ärver inkluderade filer det scope de anropas från), däremot tyder frågeställningen på missförstånd kring relationen mellan servern och klienten. PHP:s roll här är bara att behandla förfrågan och generera ett svar (din sida) (fig. HTTP-request) åt klienten, när det har skickats avslutas processen och scriptet körs inte igen förrän användaren t.ex. klickar på en länk eller skickar ett formulär, varpå en helt ny cykel påbörjas. Du kan jämföra det med att två personer skickar brev till varandra och hela tiden glömmer bort vad som skrivits tidigare. Eftersom att din inkluderade fil bara innehåller HTML (och ingen PHP) så kommer innehållet skickas som det är till klienten, och det finns inget i ditt HTML-dokument som behöver (eller kan ha) någon tillgång till din PHP-kod eftersom att svaret behandlas av klienten medans PHP körs på servern.

Övriga funderingar:

  • Var noggrann med hur du formaterar och indenterar din kod. Välstrukturerad kod (varesig det är PHP, HTML, SQL, reguljära uttryck eller något annat) är lättare att läsa och arbeta med både för dig och andra, minskar risken för misstag och gör det lättare att få hjälp.

  • Var snäll mot klienterna och leverera inte trasig HTML. I koden ovan skriver du ut fragment om programmet påträffar fel (<p>Anslutning misslyckades, var god försök igen!</p> är inte ett komplett dokument), och annars skickas först ett komplett dokument från inloggad.htm, sedan ytterligare fragment från echo '<p>' . $showdatum['datum'] . '</p>'; som kommer hamna efter att dokumentet egentligen skulle ha avslutats.

  • Fundera på hur du kan strukturera programmet / scriptet för att alltid skriva ut ett giltigt dokument. Ett tips för att lyckas med det är att undvika anrop till exit() så långt det är möjligt, för mycket sådant tenderar att leda till återvändsgränder. Never say die().

  • En kommentar i HTML har formatet <!-- Din text -->. Många editorer / webbläsare har verktyg för att hjälpa dig validera resultatet medans du arbetar, kontrollera om det finns något sådant till de du använder.

  • Avsluta aldrig filer med ?>. Allt utanför <?php ?>-taggar skickas direkt till klienten och det är lätt att få med oavsiktigt whitespace sist i filer om de avslutas på det sättet, bara utelämna taggen så blir det både mindre att skriva och mindre risk för problem. Block behöver bara avslutas om du vill lämna tolken för att t.ex. skicka större stycken HTML.

  • Undvik @ för att dölja felmeddelanden, det är svårt att arbeta med eftersom att du måste hantera det rad för rad i hela programmet och är dessutom en förhållandevis dyr (långsam) operation. Konfigurera det hellre för hela miljön via php.ini:error_reporting. Oftast aktiverar man alla varningar under utveckling, men stänger av allt och loggar endast tyst på liveservrar.

  • ext/mysql är föråldrat och stöd för det kommer försvinna helt i framtida versioner av PHP. Titta på PDO eller ext/mysqli istället:

    $conn = new \PDO("mysql:host=localhost;dbname=test", "yourUser", "horsebatterystaple"); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $stmt = $conn->prepare("SELECT `colA` FROM `table` WHERE `colB` = :yourParameter;"); $stmt->execute(["yourParameter" => "yourValue"]); foreach($stmt->fetchAll() as $row) { printf("%s\n", $row["colA"]); }

    Exempel med PDO

    $conn = new \mysqli("localhost", "yourUser", "horsebatterystaple", "test"); $yourParameter = "yourValue"; $stmt = $conn->prepare("SELECT `colA` FROM `table` WHERE `colB` = ?;"); $stmt->bind_param("s", $yourParameter); $stmt->bind_result($colA); $stmt->execute(); while($stmt->fetch()) { printf("%s\n", $colA); }

    Exempel med ext/mysqli

Hej

Tack för ditt utförliga svar och andra funderingar, uppskattas:)

Jag ska dock ändra lite så jag för tillfället löser mitt problem. Är en färsking på detta med HTML och php men jag förbättrar allt eftersom. Just nu är projektet i sin linda och behov av en hemsidan vilket ska vara funktionsduglig så snart det är möjligt. Vad beträffar SQL så har vi one.com och vad jag vet så har den bara stöd för SQL.

Programmering kräver tid och kunskap för att bli en bra programmerare men det är kul. Kräver dock att man ökar nivån all eftersom

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Legendarisk
Skrivet av freddehboy:

Vad beträffar SQL så har vi one.com och vad jag vet så har den bara stöd för SQL.

PDO, ext/mysqli och ext/mysql är olika bibliotek som används för att ansluta till MySQL från PHP. Du kan byta ut ext/mysql mot ett av de andra två utan att det påverkar MySQL. Om du vill ha en så lätt övergång som möjligt så har ext/mysqli ett procedurellt gränssnitt som är väldigt likt vad du redan har lärt dig, annars har PDO ett gränssnitt som är lättare att arbeta med när man väl har tagit steget. One.com har antagligen stöd för båda nyare alternativ (har de inte det så är det en varningssignal), och eftersom att ext/mysql är på väg att fasas ut helt bör du undersöka det om du inte vill riskera att ditt projekt plötsligt inte fungerar i moderna miljöer. Dessutom slipper du lägga mer tid att lära dig något som är på väg bort.

PHP: Choosing an API

Skrivet av freddehboy:

Programmering kräver tid och kunskap för att bli en bra programmerare men det är kul. Kräver dock att man ökar nivån all eftersom

Hoppas att det inte blir för mycket information på en gång. Kämpa på!

Visa signatur

Abstractions all the way down.

Permalänk

PDO ska fungera med one.com

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Hej

Jag håller nu på att byta till PDO

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S.