Avatar billede exclusive Nybegynder
14. januar 2007 - 18:12 Der er 13 kommentarer og
1 løsning

sammen smeltning af 2 mailinglists plus lidt AJAX

Hej Eksperter :-)
Jeg ville høre om en herinde kunne hjælpe mig med at "smelte" 2 php nyhedsbrevs scripts sammen, da jeg ikke er den store haj til php.
Det ene fungerer med et mindre admin modul nemlig, og den anden er der AJAX på formen, og det er AJAX funktionerne jeg vil have med over i førstenævnte script :-)

index.php scriptet med AJAX:
<?php
/*
Part of the code for the article "Use Ajax and PHP to Build Your Mailing List"
by Aarron Walter (aarron@aarronwalter.com)
http://www.sitepoint.com/article/use-ajax-php-build-mailing-list
*/
require_once("inc/storeAddress.php");
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Painless AJAX and PHP Mailing List Sign Up</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript" src="js/mailingList.js"></script>
  </head>
  <body>
    <form id="addressForm" action="index.php" method="get">
      <fieldset>
        <legend>Join our mailing list!</legend>
        <p>
          <input type="text" name="address" id="address" />
          <input type="submit" value="Sign Up" />
        </p>
        <p id="response"><?php echo(storeAddress()); ?></p>
      </fieldset>
    </form>
  </body>
</html>




inc/storeAddress.php scriptet med AJAX:
<?
require_once("dbConstants.php");

function storeAddress() {
  $message = "&nbsp;";
  // Check for an email address in the query string
  if( !isset($_GET['address']) ){
    // No email address provided
  }
  else {
    // Get email address from the query string
    $address = $_GET['address'];
    // Validate Address
    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $address)) {
      $message = "<strong>Error</strong>: An invalid email address was provided.";
    }
    else {
      // Connect to database
      $con = mysql_connect(DBHOST ,DBUSER, DBPASS);
      mysql_select_db(DBNAME, $con);
      // Insert email address into mailinglist table
      $result = mysql_query("INSERT INTO mailinglist SET email='" . $address . "'");
      if(mysql_error()){
        $message = "<strong>Error</strong>: There was an error storing your email address.";
      }
      else {
        $message = "Thanks for signing up!";
      }
    }
  }
  return $message;
}
?>




Det er de 2 overstående scripts med ajax jeg vil have smeltet sammen i dette register.php:

<?php
include("connect.php");
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if (!preg_match('/([a-zA-z0-9\.\-]+)@([a-zA-Z0-9\.\-]+)\.([a-zA-Z]{2,3})/',$_POST['email'],$m))
    die('Invalid Email Address.');   
    $name = htmlentities($_POST['name']);
   
    if (empty($name))
    die("Please fill in out the whole form.");
    $email = $m[0];
    $link = "SELECT * FROM brugere WHERE email='$email'";
    $res = mysql_query($link) or die(mysql_error());
   
    if (mysql_num_rows($res) > 0)
    die("This email address is already registered.");   
   
    $link = "INSERT INTO brugere VALUES ('$name','$email',NOW(),'subscribed','0','')";
    $res= mysql_query($link) or die(mysql_error());
    if ($res)
    die("Email Succesfully Registerted.");
}
else
{
    echo '<html><head><title>Sign Up</title></head>
    <body>
    <form action="" method="POST">
    Name <input type="text" name="name"><br />
    Email&nbsp; <input type="text" name="email"><br /><br />
    <input type="submit" value="Sign up">
    </form>
    </body>
    </html>';
}
?>



Mvh. Jimmy Rittenborg
Avatar billede tzr Nybegynder
15. januar 2007 - 17:04 #1
Hvorfor bruger du ikke bare det første script med ajax ? De ser ret ens ud de to scripts.
Avatar billede exclusive Nybegynder
15. januar 2007 - 17:12 #2
Jo men det script med ajax tjekker ikke om brugeren allerede findes i databasen og skriver kun emailen ind.
-Jeg kan ikke en pind i php da jeg er flash designer.

Men har jeg stillet det her spørgsmål alt for fjoget op eller er der for lidt points?
-der er jo ikke rigtig nogen der svarer :-(

For en php programmør burde det vel ikke være nogen større sag at flette det sammen?
Avatar billede tzr Nybegynder
16. januar 2007 - 13:07 #3
øh ja, jeg kan faktisk ikke se et eneste Ajax kald i det første stykke kode ? Så vidt jeg kan se er det bare en normal <form> men en traditionel action, ligesom det nedenstående xhtml er.
Avatar billede tzr Nybegynder
16. januar 2007 - 13:30 #4
ok jeg har kigget på den side som du linkede til, og jeg kan se at javascriptet lytter efter en submit event på formen, og overtager når der trykkes. Kan godt se, at man på den måde er dobbeltsikret hvis browseren ikke understøtter Javascript, men for helvede da, det var da en mærkelig måde at bygge det op på .... nå, men anyway, tror jeg har løst dit problem:


Javascript js/mailingList.js skal have denne function:


function storeAddress(e) {
// Update user interface
$('response').innerHTML = 'Adding email address...';
// Prepare query string and send AJAX request
var pars = 'name=' + escape($F('name')) + 'address=' + escape($F('address'));
var myAjax = new Ajax.Updater('response', 'ajaxServer.php', {method: 'get', parameters: pars});
// Stop form from submitting when JavaScript is enabled
Event.stop(e);
}

det er kun 3. linie der er ændret

index.php scriptet med AJAX:
<?php
/*
Part of the code for the article "Use Ajax and PHP to Build Your Mailing List"
by Aarron Walter (aarron@aarronwalter.com)
http://www.sitepoint.com/article/use-ajax-php-build-mailing-list
*/
require_once("inc/storeAddress.php");
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Painless AJAX and PHP Mailing List Sign Up</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript" src="js/mailingList.js"></script>
  </head>
  <body>
    <form id="addressForm" action="index.php" method="get">
      <fieldset>
        <legend>Join our mailing list!</legend>
        <p>
          <input type="text" name="name" id="name" />
          <input type="text" name="address" id="address" />
          <input type="submit" value="Sign Up" />
        </p>
        <p id="response"><?php echo(storeAddress()); ?></p>
      </fieldset>
    </form>
  </body>
</html>

der er kun indsat et ekstra <input />


ok, og så har jeg taget noget kode fra det andet php script og lagt op i det første. Har dog ikke testet det.
<?php
include("connect.php");
function storeAddress() {
    // Check for an email address in the query string
    if( !isset($_GET['name']) || !isset($_GET['address']) ){
        return "Both name and email address must be provided";
    }
    else {
        // Get name from query string
        $name = $_GET['name'];
        // Validate name
        if (empty($name)) {
            return "Name must be filled out";
        }
        // Get email address from the query string
        $address = $_GET['address'];
        // Validate Address
        if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $address)) {
            return "<strong>Error</strong>: An invalid email address was provided.";
        }
        else {
            // Check if email is already signed up
            $link = "SELECT * FROM brugere WHERE email='$address'";
            $res = mysql_query($link) or die(mysql_error());
            if (mysql_num_rows($res) > 0) {
                return "Email has already been registered";
            }
           
            // Insert email address into mailinglist table
            $result = mysql_query("INSERT INTO brugere VALUES ('$name','$address',NOW(),'subscribed','0',''))";
            if(mysql_error()){
                return "<strong>Error</strong>: There was an error storing your email address.";
            }
            else {
                return "Thanks for signing up!";
            }
        }
    }
}
?>

Går ud fra at script nr. 2 allerede virker på dit system, så jeg ændrede bla. connection metode til at bruge connect.php, og ændrede også sql queries så de passer.


Held og lykke
Avatar billede olebole Juniormester
16. januar 2007 - 14:57 #5
<ole>

innerHTML har aldrig været del af nogen officiel standard - og kan absolut ikke anvendes sammen med XHTML. Bl.a. derfor HTML-formaterer man aldrig data på serveren, når man bruger AJAX.
De rå data bør i stedet returneres XML- eller JSON-formateret - hvorefter der oprettes/indsættes HTML-elementer med DOM på klienten og data fyldes i disse elementer

/mvh
</bole>
Avatar billede tzr Nybegynder
16. januar 2007 - 17:07 #6
Ole << det eneste der bliver sendt tilbage, er en besked om hvad der er sket, hvilket gør XML og JSON lidt overkill hvis du spørger mig. Men ellers jo, så har du ret.
Avatar billede exclusive Nybegynder
16. januar 2007 - 18:22 #7
@ oleBole>>
Som tidligere nævnt er jeg Flash-designer og kan kun det mest nødvendige i html, css og php dvs. div. embedings af flash, form mailing fra flash, simpel gæstebog i flash>php>xml/.txt
-så jeg forstår desværre ikke en flækken fis hvad du mener.. :-(
men det ser ud til tzr gør :-D


@ tzr>>
Tusind mange gange tak for dit forsøg på at få det til at virke!
-Men det fungerer umidelbart ikke :-(

Du kan se det i aktion(-eller mangel på samme) på www.rittencom.dk/nyhedsbrev
Jeg har pakket en .zip til dig (hvor hele dynen er med, admin modul mv.) hvis du vil se nærmere på det? http://www.rittencom.dk/rittencom_newsletter.zip
-det er jo trods alt et ret lækkert nyhedsbrevs system når det forhåbentligt kommer til at virke!

Mange hilsner Jimmy Rittenborg
Avatar billede tzr Nybegynder
16. januar 2007 - 18:50 #8
Personligt synes jeg hele scriptet er mærkeligt bygget op. Eller også er det mig, der ikke lige er med på hvordan det hænger sammen hehe :)

Men er det virkelig super nødvendigt, at bruge ajax til en mailing list ? Selvfølgelig, det er sejt, men ... :) Synes det er lidt overkill hehe
Avatar billede exclusive Nybegynder
16. januar 2007 - 19:43 #9
@ tzr>>
jamen altså, når jeg sidder og kigger på det er det ret logisk det der foregår (med minus af ajax delen naturligvis, da jeg finder javascript ret forvirende endnu..hehe)

Men altså du komer ind på index.php og vælger om du vil tilføje dig eller afmelde dig (hvilket jeg skal have lavet om på en eller anden måde) og admin delen kører jo faktisk uafhængigt af dette, så i dette tilfælde kan vi jo se bort fra dét så længe vi følger grundstruklturerne i systemet...

Men ja... jeg forstår bare ikke at der overhovedet ikke kommer noget frem på register.php (men det er jo så nok en af mine undervurderinger af php..hehe)

Men hvis der er helt hul i hovedet at ligge og gå igennem så er der jo ikke så meget at gøre ved det..

Min plan med systemet er at når man kommer ind på mit website, kommer man til en velkomst side uden flash hvor der så bliver lagt op til at man nu træder ind på et flash site og hvor der også ligger tilmeldingen til nyhedsbrevet..
Avatar billede tzr Nybegynder
16. januar 2007 - 19:54 #10
arh right ok, ja jeg har nu aldrig været den store fan af Flash, men lad os lade det ligge ;)
Kan godt forstå, at hvis du bruger Flash, at Ajax ville være praktisk. Det kan sagtens laves, men jeg ville foreslå at lave det hele fra grunden af, da det der script du har fundet er pluk forvirrende fra mit synspunkt hehe :)
Avatar billede exclusive Nybegynder
16. januar 2007 - 20:12 #11
@ tzr>>
hehe...det er typisk med jer programmøre mht. flash, eller er det fordi du er forretningsmand og vil udvikle det til mig for den rette pris..haha
pis til side...hehe
-det var det eneste eksempel jeg fandt på en mailingslist med ajax, so thats all i got..
-men så må jeg jo bare google videre :-)

men du skal da have en stor tak for forsøget!

jeg vil lige holde den hængende lidt endnu hvis der skulle komme en ajax-php-jesus med en løsning, og hvis ikke er pointene dine :-)

Hvis du har en anden løsning til et lækker nyhedsbrevs system, kan du også rede dig pointne.
Avatar billede tzr Nybegynder
16. januar 2007 - 20:23 #12
hehe mht. penge ville jeg nu ikke tage penge for det, da det er et ret lille projekt hehe ... jeg er bare doven :)
Avatar billede exclusive Nybegynder
16. januar 2007 - 20:28 #13
@ tzr>>
hehe jeg har lige set nu at under min søgen efter et nyhedsmail system forleden, har jeg haft downloadet en anden open source(også med admin modul og afsending af mails) som ser ud til at jeg kan få til at snakke sammen med mit flash site :-P
-sådan at folk kan til/afmelde sig direkte på mit flash site :-)

Så pointne er dine...
men du må gerne stadig komme med et link til noget lækkert hvis du har det :-D
Avatar billede tzr Nybegynder
16. januar 2007 - 20:34 #14
Jamen mange tak :) hvis jeg selv skriver et tool der kan gøre det en dag skal jeg prøve at huske, at lægge et link hehe
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