Avatar billede kosak Nybegynder
09. juni 2008 - 23:53 Der er 9 kommentarer

til/framelding af nyhedsbrev med PHP og Mysql

Hejsa, jeg er ny både her på siden og temmelig ny inden for webprogrammering, så jeg tror og håber I kan hjælpe mig.

Jeg er ved at lave en side hvor der blandt andet skal være mulighed for at til- og framelde sig et nyhedsbrev. Efter at have kigget mig lidt rundt har jeg skrevet følgende:

    <?php
        //Tilmeld nyhedsbrev
        function tilmeld_nyhed()
        {
            include('common.inc.php');
            $email = $_POST['email'];
            $result = mysqli_query("select * from tblbrev where email ='$email'");
            $row = mysqli_fetch_array($result);
           
            if (mysqli_num_rows($result) == 1)
            {
                echo "<div id='slet_email'>";
                echo "<strong>E-Mailen $email findes allerede</strong><br />Hvis du har fået ny E-Mail indtast venligst denne her<br />
                E-Mail <strong>$email</strong> i slet feltet og tryk slet fra denne liste";
                echo "</div>";
            }
            else
            {
                mysqli_query("insert into tblbrev (email) values('$email')") or die(mysqli_error());
                echo "<div id='slet_email'>";
                echo "Du er nu oprettet i listen med <strong>$email</strong><br /> Tryk på slet din email fra listen for at framelde dig";
                echo "</div>";
            }
        }   
        if ($_GET['function'] == "tilmeld_nyhed")
        {
            tilmeld_nyhed();
        }
    ?>
           
    <?PHP   
        //Frameld nyhedsbrev
        function frameld_nyhed()
        {
            include('common.inc.php');
            $slet_email = $_POST['slet_email'];
            $result = mysqli_query("select * from tblbrev where email ='$slet_email'");
            $row = mysqli_fetch_array($result);
           
            if (mysqli_num_rows($result) == 0)
            {     
                echo "<div id='slet_email'>";
                echo "Den email <strong>$slet_email</strong> du prøver at slette eksisterer ikke<br />Prøv venligst igen";
                echo "</div>";
            }
            else
            {
                mysqli_query("delete from tblbrev where email = '$slet_email'") or die(mysqli_error());
                echo "<div id='slet_email'>";
                echo "E-Mailen <strong>$slet_email</strong> er slettet nu";
                echo "</div>";
            }
        }
        if($_GET['function'] == "frameld_nyhed")
        {
            frameld_nyhed();
        }
    ?>
   
        <div id="brevform">
        <h4>Tilmeld dig nyheder</h4>
            <form action="brev.php?function=tilmeld_nyhed" method="post">
            E-Mail <input type="text" name="email"value="  Din E-Mail"<br />
            <input type="submit" value="Tilføj din mail til listen" name="submit">
            </form>
          <br />
        <h4>Frameld dig nyheder</h4>
            <form action="brev.php?function=frameld_nyhed" method="post">
            E-Mail <input type="text" name="slet_email"value="  Din E-Mail"<br />
            <input type="submit" value="Slet din mail fra listen" name="submit">
            </form>
        </div>


Mit problem er at jeg allerede ved at vise siden i browseren (firefox) får følgende fejl:

Notice: Undefined index: function in /Applications/MAMP/htdocs/vb/brev.php on line 34

Notice: Undefined index: function in /Applications/MAMP/htdocs/vb/brev.php on line 63


Går jeg videre og udfylder "tilmeld nyhed" får jeg denne fejl:


Warning: mysqli_query() expects at least 2 parameters, 1 given in /Applications/MAMP/htdocs/vb/brev.php on line 16

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in /Applications/MAMP/htdocs/vb/brev.php on line 17

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /Applications/MAMP/htdocs/vb/brev.php on line 19

Warning: mysqli_query() expects at least 2 parameters, 1 given in /Applications/MAMP/htdocs/vb/brev.php on line 28

Warning: mysqli_error() expects exactly 1 parameter, 0 given in /Applications/MAMP/htdocs/vb/brev.php on line 28

Håber ikke det var for meget på en gang...

På forhånd mange tak for hjælpen.

/Rune
Avatar billede expnet Seniormester
10. juni 2008 - 08:33 #1
Hej rune

Er du sikker på den server du køre dit script køre mysqli

For har lige køret scriptet på min server med kun mysql

og der virker det fint
Avatar billede expnet Seniormester
10. juni 2008 - 08:36 #2
Prøv det her:
----------------------

    <?php
        //Tilmeld nyhedsbrev
        function tilmeld_nyhed()
        {
            include('common.inc.php');
            $email = $_POST['email'];
            $result = mysql_query("select * from tblbrev where email ='$email'");
            $row = mysql_fetch_array($result);
         
            if (mysql_num_rows($result) == 1)
            {
                echo "<div id='slet_email'>";
                echo "<strong>E-Mailen $email findes allerede</strong><br />Hvis du har fået ny E-Mail indtast venligst denne her<br />
                E-Mail <strong>$email</strong> i slet feltet og tryk slet fra denne liste";
                echo "</div>";
            }
            else
            {
                mysql_query("insert into tblbrev (email) values('$email')") or die(mysql_error());
                echo "<div id='slet_email'>";
                echo "Du er nu oprettet i listen med <strong>$email</strong><br /> Tryk på slet din email fra listen for at framelde dig";
                echo "</div>";
            }
        } 
        if ($_GET['function'] == "tilmeld_nyhed")
        {
            tilmeld_nyhed();
        }
    ?>
         
    <?PHP 
        //Frameld nyhedsbrev
        function frameld_nyhed()
        {
            include('common.inc.php');
            $slet_email = $_POST['slet_email'];
            $result = mysql_query("select * from tblbrev where email ='$slet_email'");
            $row = mysql_fetch_array($result);
         
            if (mysql_num_rows($result) == 0)
            {   
                echo "<div id='slet_email'>";
                echo "Den email <strong>$slet_email</strong> du prøver at slette eksisterer ikke<br />Prøv venligst igen";
                echo "</div>";
            }
            else
            {
                mysql_query("delete from tblbrev where email = '$slet_email'") or die(mysql_error());
                echo "<div id='slet_email'>";
                echo "E-Mailen <strong>$slet_email</strong> er slettet nu";
                echo "</div>";
            }
        }
        if($_GET['function'] == "frameld_nyhed")
        {
            frameld_nyhed();
        }
    ?>
 
        <div id="brevform">
        <h4>Tilmeld dig nyheder</h4>
            <form action="brev.php?function=tilmeld_nyhed" method="post">
            E-Mail <input type="text" name="email"value="  Din E-Mail"><br />
            <input type="submit" value="Tilføj din mail til listen" name="submit">
            </form>
          <br />
        <h4>Frameld dig nyheder</h4>
            <form action="brev.php?function=frameld_nyhed" method="post">
            E-Mail <input type="text" name="slet_email"value="  Din E-Mail"><br />
            <input type="submit" value="Slet din mail fra listen" name="submit">
            </form>
        </div>
Avatar billede dkfire Nybegynder
10. juni 2008 - 09:01 #3
Dine to første fejl skyldes at når du første gang loader siden, så tjekker du $_GET['function'] for en værdi. Men dette index i variablen $_GET er ikke sat endnu, derfor kommer den med en besked. Du kan ændre det ved at ret til:
if (isset($_GET['function']) && $_GET['function'] == "tilmeld_nyhed")
{
    tilmeld_nyhed();
}

Og

        if(isset($_GET['function']) && $_GET['function'] == "frameld_nyhed")
        {
            frameld_nyhed();
        }
Således tjekker php først om indexet er sat, hvis ikke springer den videre i kode.

Ang din fejl på mysqli, så mangler du en parameter på din mysqli_query() og din mysqli_fetch_array(). mysqli_query skal som første paramter have din mysqli forbindelse variabel, dvs noget ala:
$result = mysqli_query($connection, "select * from tblbrev where email ='$email'");
Avatar billede kosak Nybegynder
10. juni 2008 - 13:22 #4
Jeg endte med at lave en enklere og noget mere overskuelig løsning, som nu virker fint.

Tusind tak for hjælpen begge to.

Hvordan og hvorledes med de her point?

/Rune
Avatar billede expnet Seniormester
10. juni 2008 - 18:47 #5
Du kan bare give dem til dkfire hvis han/hun vil have dem?
Avatar billede dkfire Nybegynder
10. juni 2008 - 20:08 #6
Det er da kun vis spørgen mener jeg har hjulpet.
Avatar billede kosak Nybegynder
10. juni 2008 - 22:20 #7
puha, altså nu er jeg som sagt ny her, så jeg ved ikke hvad man plejer at gøre i sådan en situation her :-)

Altså jeg har som sagt valgt en helt anden løsning end det jeg startede med at skrive. Omvendt er jeg meget glad for at I bød ind :-)

Kan jeg dele dem mellem jer? Hvis ja, hvordan?

/Rune
Avatar billede dkfire Nybegynder
10. juni 2008 - 22:56 #8
Ved at vi begge lægger et svar og du accepterer dem.
Dog skal du vente til begge har lagt et svar.
Avatar billede kosak Nybegynder
10. juni 2008 - 23:26 #9
Super, jamen så smid I endeligt et svar begge to.

Endnu en gang tak for hjælpen.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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