Avatar billede smolle Nybegynder
07. februar 2006 - 09:21 Der er 19 kommentarer og
1 løsning

Simpel kotrol af brugernavn og password i gæstebog

Kan man ikke gøre det sådan, at man inden man skriver en besked i en gæstebog, indtaster et brugernavn og et password, som så bliver kontrolleret med en database. Hvis det passer sammen, så får man lov at skrive sin besked og ellers får man en fejlmelding.
Havde overvejet noget med:

if(isset($_POST['password']) && $_POST["password"] == $password && $_POST["username"] == $username){

Jeg ved bare ikke hvordan jeg kontrollerer med databasen! Som det er nu, er det lige meget hvad man skriver som brugernavn og password, da den ikke tjekker det nogen steder.
Jeg har sådan set ikke brug for en session hvor man skal logge ind og ud. Den skal bare lige tjekke username og password inden man skriver.
Avatar billede cyberdudes Nybegynder
07. februar 2006 - 09:41 #1
Du skal lave et kald ned i databasen efter det brugernavn og password som er blevet angivet.

SQL'en kunne f.eks. være noget i den her retning:

SELECT * FROM bruger_db WHERE username = $_POST['username'] AND password = $_POST['password'];

Derefter kan du lave et check på hvor mange rækker du får tilbage. Hvis du ikke får nogen rækker tilbage er der ikke nogen med det brugernavn og password, hvis du får 1 række tilbage er der en bruger med det brugernavn og password. Hvis du får mere end 1 række tilbage er der noget galt  :)

Håber dette kan hjælpe dig i den rigtige retning.
Avatar billede smolle Nybegynder
07. februar 2006 - 11:56 #2
Kan godt se ideen i det, men det virker ikke helt. Lige nu kommer der bare en helt blank side. Der bliver slet ikke loadet noget som helst af siden ind!
Har lavet følgende kode:

<?
    $db = mysql_connect("localhost","******","******");
    mysql_select_db("******", $db);
    if(isset($_POST['skriv'])){
    $query = "SELECT * FROM users WHERE username = $_POST['username'] AND password = $_POST['password']";
    $result = mysql_query($query, $db) or die('error making query');
    $affected_rows = mysql_num_rows($result);
       
    if($affected_rows == 1) {
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST["navn"];
        $email = $_POST["email"];
        $besked = convert_links($_POST["besked"]);
        mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
        }
        else{
        print 'Forkert brugernavn eller adganskode'
        }
        ?>

Til det har jeg så denne form:

<FORM METHOD=POST ACTION=<? echo $PHP_SELF; ?>>
    <INPUT TYPE=hidden NAME=skriv VALUE=1>
    Navn:<INPUT TYPE=text NAME=username><br>
    Password: <input type=password name=password><br>
    E-mail:<INPUT TYPE=text NAME=email><br>
    <TEXTAREA NAME=besked COLS=30 ROWS=5></textarea><br>
    <INPUT TYPE=submit VALUE="send">
    </form>

En der vil kigge på det og komme med lidt vejledning?
Avatar billede johan.o Nybegynder
07. februar 2006 - 16:05 #3
Først så ville jeg 'opdatere' din form til dette :

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <input type="hidden" name="skriv" value="1">
    Navn:<input type="text" name="username"><br>
    Password: <input type="password" name="password"><br>
    E-mail:<input type="text" name="email"><br>
    <textarea name="besked" cols="30" rows="5"></textarea><br>
    <input type="submit" value="send">
</form>

Så er første del afsluttet :), jeg tror, er ikke sikker, men tror, at hvis du kigger i source koden i din browser, så er action attributen tom på din originale kode.

Mere følger....

Mvh. Johan
Avatar billede johan.o Nybegynder
07. februar 2006 - 16:12 #4
Hm, ja nu kigger jeg så lige på din php kode og ser at hvis denne linje

if($affected_rows == 1) {

er sand, så sendes der jo ikke noget output til siden, så det er vel derfor du får en blank skærm...eller ?

Hvad sker der f.eks. hvis du skriver sådan her :

if($affected_rows == 1) {
echo "Så er der fundet en række.<br><br>";
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST["navn"];
        $email = $_POST["email"];
        $besked = convert_links($_POST["besked"]);
        if(mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')")) {
echo "Og INSERT virkede også fint."; }
else { echo "Desværre mislykkedes INSERT i tabellen."; }
        }
Avatar billede smolle Nybegynder
07. februar 2006 - 16:16 #5
Kan ikke se den store forskel i min og din form, bortset fra at du har sat en masse " ind, som vel ikke burde være nødvendige.
Lige meget hvad, så er siden stadig blank og alt hvad der står i Source koden er:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>
<BODY></BODY></HTML>

Og det på trods af, at der altså står en masse ud over min php kode i det dokument. Der burde være en del tabeller og lign. som skulle blive udskrevet, da de intet har med min php kode at gøre.
Avatar billede smolle Nybegynder
07. februar 2006 - 16:18 #6
Siden er stadig blank, efter at have indsat den kode du foreslog.
Avatar billede johan.o Nybegynder
07. februar 2006 - 16:29 #7
Attributers værdier bør altid skrives imellem "..." det er muligt det virker i IE og måske andre browsere men det er stadig forkert at udelade dem.

Hvis du loader din form i din browser og så kigger i kildekoden, hvad står der så i action attributen, med din originale kode ?

Den eneste måde ovenstående kode ikke laver output er hvis $_POST['skriv'] ikke er sat, og det går jeg jo udfra at du har testet. Så du bliver nok nød til at vise noget mere af din kode.

Mvh. Johan
Avatar billede showsource Seniormester
07. februar 2006 - 16:36 #8
Når du tester, kan du altid bruge:
<?php
ini_set('error_reporting', "E_ALL");


//resten af script

?>

Så vil alle fejlmeddelser blive vist.

Og du har fejl i din kode til submit
Avatar billede showsource Seniormester
07. februar 2006 - 16:39 #9
<?php

if(isset($_POST["skriv"])){

    $db = mysql_connect("localhost","******","******");
    mysql_select_db("******", $db);

    $query = "SELECT * FROM users WHERE username = '". $_POST["username"] ."' AND password = '". $_POST["password"] ."'";
    $result = mysql_query($query, $db) or die('error making query');
     
    if(mysql_num_rows($result) == 1) {
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST["navn"];
        $email = $_POST["email"];
        $besked = convert_links($_POST["besked"]);
        mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')");
        }
        else{
        print 'Forkert brugernavn eller adganskode';
        }
}

?>
Avatar billede showsource Seniormester
07. februar 2006 - 16:39 #10
lidt tjek på din query, så injektions undgås burde du også gøre.
Avatar billede smolle Nybegynder
07. februar 2006 - 16:42 #11
Så får i hele koden... Men der er altså ikke mere der har med selvom submit-delen at gøre:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>AAGIF.DK</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</head>

<body>
<center>
<?
function convert_links($str)
{return preg_replace("/((http|https|ftp)+(s)?:(\/\/)([\w]+(.[\w]+))([\w\-\.,@?^=%&:;\/~\+#]*[\w\-\@?^=%&:;\/~\+#])?)/i", "<a href=\"\\0\" class=\"gbook\">\\0</a>", $str);};
include('top.php'); ?>
<table cellpadding="0" cellspacing="0" height="450" width="800" style="border-left: solid 1 BLACK; border-right: solid 1 BLACK">
    <tr>
        <td valign="top">
            <table width="200" height="100%">
                <tr>
                    <td valign="top">
                        <? include('menu.php');?>
                    </td>
                </tr>
            </table>
        </td>
        <td valign="top">
            <table background="Verticalline.gif" cellpadding="0" cellspacing="0" width="18" height="100%" style="border-left: solid 1 BLACK; border-right: solid 1 BLACK;">
                <tr>
                    <td valign="top" align="center" class="menu"></td>
                </tr>
            </table>
        </td>
        <td valign="top">
            <table cellpadding="5" cellspacing="5">
                <tr>
                    <td width="500"><h1>:Gæstebog:<hr width="100%" align="left" size="2" noshade></h1>
                        <table cellpadding="10">
                            <tr>
                                <td valign="top">       
                                <?
        $db = mysql_connect("localhost","******","******");
        mysql_select_db("******", $db);
        if(isset($_POST['skriv'])){
        $query = "SELECT * FROM users WHERE username = $_POST['username'] AND password = $_POST['password']";
        $result = mysql_query($query, $db) or die('error making query');
        $affected_rows = mysql_num_rows($result);
       
        if($affected_rows == 1) {
        echo "Så er der fundet en række.<br><br>";
        $dato_array = getdate();
        $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
        $navn = $_POST["navn"];
        $email = $_POST["email"];
        $besked = convert_links($_POST["besked"]);
        if(mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')")) {
        echo "Og INSERT virkede også fint."; }
        else { echo "Desværre mislykkedes INSERT i tabellen."; }
        }
        ?>
       
        <table>
        <?
        $pagesize = 10;
        if (empty($_GET[start])) {
        $start = 0;
        } else {
        if (is_numeric($_GET[start])) {
        $start = $_GET[start];
        } else {
        $start = 0;
        }
        }
        $foresp = mysql_query("SELECT navn, email, dato, besked FROM gbog ORDER BY nr DESC LIMIT $start,$pagesize");
        while($data = mysql_fetch_row($foresp)){
        echo "<tr><td valign=top width=30% style='border-right: 1 solid BLACK'>";
        echo "Skrevet af: <a href=\"mailto:$data[1]\">$data[0]</a>";
        echo "<br>$data[2]";
        echo "</td><td valign=top width=70% style='border-left: 1 solid BLACK'>$data[3]</td></tr>";
        }
        $pages = ceil(mysql_num_rows(mysql_query("SELECT nr from gbog"))/$pagesize);
        for ($i = 1; $i <= $pages; $i++) {
        $startnow = $pagesize*$i;
        $startnow = $startnow-$pagesize;
        if ($startnow == $start) {
        $sidehtml .= "<a href='gbook.php?start=$startnow'><b>[$i]</b></a>";
        }else{
        $sidehtml .= "<a href='gbook.php?start=$startnow'>[$i]</a>";
        }
        }?>
        </table><br><br>
        <? echo "Gå til side: ".$sidehtml;
        ?>
        <br><br><br>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <input type="hidden" name="skriv" value="1">
        Navn:<input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        E-mail:<input type="text" name="email"><br>
        <textarea name="besked" cols="30" rows="5"></textarea><br>
        <input type="submit" value="send">
        </form><br><br>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
<? include('buttom.php'); ?>
</center>
</body>
</html>
Avatar billede showsource Seniormester
07. februar 2006 - 16:46 #12
Du mangler en afsluttende } plus
$query = "SELECT * FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'";
Avatar billede smolle Nybegynder
07. februar 2006 - 16:47 #13
@showsource: Har brugt din kode nu og det virker, bort set fra, at hele delen hvor den henter allerede skrevede indlæg ud, nu ikke virker.
Avatar billede smolle Nybegynder
07. februar 2006 - 16:50 #14
Eller, det virker så når man har skrevet noget i gæstebogen, men det kan ikke ses uden at have skrevet en besked.
Avatar billede showsource Seniormester
07. februar 2006 - 16:51 #15
Hvis jeg var dig, ville jeg lade den del som gememr i DB være en seperart fil, som redirecter tilbage til formen.
SÅ undgår du også dobbeltindlæg.
Altså, en fil med form og indlæg, der poster til en fil, som kun laver tjek, og gemmer hvis korrekt bruger og pass, og altid redirecter til formen
Avatar billede showsource Seniormester
07. februar 2006 - 16:51 #16
stavefejl er gratis
Avatar billede smolle Nybegynder
07. februar 2006 - 16:53 #17
Ville det være for meget at spørge hvordan? ;)

Er ikke helt sikker på hvad det er du vil...
Avatar billede showsource Seniormester
07. februar 2006 - 16:56 #18
Måske det her vil virke for dig?


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>AAGIF.DK</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
</head>

<body>
<center>
<?
function convert_links($str)
{return preg_replace("/((http|https|ftp)+(s)?:(\/\/)([\w]+(.[\w]+))([\w\-\.,@?^=%&:;\/~\+#]*[\w\-\@?^=%&:;\/~\+#])?)/i", "<a href=\"\\0\" class=\"gbook\">\\0</a>", $str);};
include('top.php'); ?>
<table cellpadding="0" cellspacing="0" height="450" width="800" style="border-left: solid 1 BLACK; border-right: solid 1 BLACK">
    <tr>
        <td valign="top">
            <table width="200" height="100%">
                <tr>
                    <td valign="top">
                        <? include('menu.php');?>
                    </td>
                </tr>
            </table>
        </td>
        <td valign="top">
            <table background="Verticalline.gif" cellpadding="0" cellspacing="0" width="18" height="100%" style="border-left: solid 1 BLACK; border-right: solid 1 BLACK;">
                <tr>
                    <td valign="top" align="center" class="menu"></td>
                </tr>
            </table>
        </td>
        <td valign="top">
            <table cellpadding="5" cellspacing="5">
                <tr>
                    <td width="500"><h1>:Gæstebog:<hr width="100%" align="left" size="2" noshade></h1>
                        <table cellpadding="10">
                            <tr>
                                <td valign="top">     
                                <?php
        $db = mysql_connect("localhost","******","******");
        mysql_select_db("******", $db);

// TILFØJ TIL DB
        if(isset($_POST['skriv'])){
        $query = "SELECT * FROM users WHERE username = '$_POST[username]' AND password = '$_POST[password]'";
        $result = mysql_query($query, $db) or die('error making query');
        $affected_rows = mysql_num_rows($result);
     
            if($affected_rows == 1) {
            echo "Så er der fundet en række.<br><br>";
            $dato_array = getdate();
            $dato = $dato_array["mday"]."/".$dato_array["mon"]."-".$dato_array["year"];
            $navn = $_POST["navn"];
            $email = $_POST["email"];
            $besked = convert_links($_POST["besked"]);
                if(mysql_query("INSERT INTO gbog (navn, email, dato, besked) VALUES ('$navn', '$email', '$dato', '$besked')")) {
                echo "Og INSERT virkede også fint.";
                }
                else
                {
                echo "Desværre mislykkedes INSERT i tabellen."; }
                }
            }
        }
        ?>
     
        <table>
        <?
        $pagesize = 10;
        if (empty($_GET[start])) {
        $start = 0;
        } else {
        if (is_numeric($_GET[start])) {
        $start = $_GET[start];
        } else {
        $start = 0;
        }
        }
        $foresp = mysql_query("SELECT navn, email, dato, besked FROM gbog ORDER BY nr DESC LIMIT $start,$pagesize");
        while($data = mysql_fetch_row($foresp)){
        echo "<tr><td valign=top width=30% style='border-right: 1 solid BLACK'>";
        echo "Skrevet af: <a href=\"mailto:$data[1]\">$data[0]</a>";
        echo "<br>$data[2]";
        echo "</td><td valign=top width=70% style='border-left: 1 solid BLACK'>$data[3]</td></tr>";
        }
        $pages = ceil(mysql_num_rows(mysql_query("SELECT nr from gbog"))/$pagesize);
        for ($i = 1; $i <= $pages; $i++) {
        $startnow = $pagesize*$i;
        $startnow = $startnow-$pagesize;
        if ($startnow == $start) {
        $sidehtml .= "<a href='gbook.php?start=$startnow'><b>[$i]</b></a>";
        }else{
        $sidehtml .= "<a href='gbook.php?start=$startnow'>[$i]</a>";
        }
        }?>
        </table><br><br>
        <? echo "Gå til side: ".$sidehtml;
        ?>
        <br><br><br>
        <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <input type="hidden" name="skriv" value="1">
        Navn:<input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        E-mail:<input type="text" name="email"><br>
        <textarea name="besked" cols="30" rows="5"></textarea><br>
        <input type="submit" value="send">
        </form><br><br>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
<? include('buttom.php'); ?>
</center>
Avatar billede smolle Nybegynder
07. februar 2006 - 17:06 #19
Yes! Nu virker det! Tusind tak for hjælpen alle sammen. Smid nogle svar ;)
Avatar billede johan.o Nybegynder
07. februar 2006 - 20:02 #20
Jeg trækker mig, stik bare showsource puljen :)

Mvh. Johan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester