webForumDet fria alternativet

Problem med php-script

6 svar · 599 visningar · startad av mikaelsooh

mikaelsoohMedlem sedan feb. 2007200 inlägg
#1

Har suttit en hel helg och försökt med kodning som jag egentligen inte kan så det börjar bli ganska rörigt bakom pannfläsket nu.

Hur som helst. På sidan jag bygger så ska det finnas ett nyhetsscript. Detta ska man kunna anmäla sig till via en post. Denna är i sin tur kopplad till en fil som heter process.php.

Allt funkar bra fram tills man klickat på submit. Efter det kommer man bara vidare till process.php.

Det jag önskar är att det ska gå att klicka, man ska kunna anmäla sig , men att man fortfarande ska vara kvar på huvudsidan.

Har försökt med det mesta jag kan men lyckas tyvärr inte lösa det.

Sidan med formen finns här:
http://www.sooh.se/temp2/index.php

yellesMedlem sedan sep. 200813 inlägg
#2

Tycker du borde lära dig mycket mer om utveckling inom webben innan du börjar fippla skript av dess typ.
Läs om, (x)html, PHP och någon databas, ex MySQL.

Din fråga är väldigt flummig ställd och vet inte riktigt vad jag ska svara. Du har gjort sidan helt i iframe så du kan ju köra ditt skript i en iframe så stannar du kvar på sidan iaf, även fast jag aldrig skulle göra på detta viset själv.... Som sagt tycker du ska skippa iframes.

Anledningen till att du kommer till process.php:
<form method="POST" action="newsletter/process.php">

mikaelsoohMedlem sedan feb. 2007200 inlägg
#3

Saken är den att jag, som du påpekar, egentligen inget kan om det här. Men mannen som skulle byggt kalaset åt mig meddelade förra veckan att han inte hunnit bygga något. Således var alternativet att jag fixade det hela själv. Nu har jag två dagar på mig att bli klar (kombinerat med heltidsarbete dessutom...)

Därav en mängd frågor.

Finns det andra metoder än iframe för att åstadkomma det hela är då min fundering?

Kan jag ändra min "action" på något sätt utan att anmälningarna slutar fungera?

/M

PeddaMedlem sedan juni 20006 032 inlägg
#4

I process.php så gör du det du ska, t.ex sparar adressen i databasen och sen skickar du tillbaks användaren med hjälp av header location.

mikaelsoohMedlem sedan feb. 2007200 inlägg
#5

Typ: header("Location index.php");

Frågan som kvarstår är då var jag ska slänga in kodsnutten.

PeddaMedlem sedan juni 20006 032 inlägg
#6
if(isset($_POST['submit'])) {
     // gör kontroll så det verkligen är en mailaddress och så ingen försöker med sql injections

     // om allt är ok, lägg in i databasen

     header("Location index.php");
}
mikaelsoohMedlem sedan feb. 2007200 inlägg
#7

Problemet är att jag är så inkompetent att jag inte vet var det ska in.

Om du har lust att kolla på koden och kanske berätta för mig...

<?
include('admin/config.inc.php');

$connection = mysql_connect($db_server, $db_user, $db_password) or die("Could not connect : " . mysql_error());
mysql_select_db($db_name) or die("Could not select database");

/*
check address for basic validity. if ok proceed, if not, return message and exit
if valid, insert in db with random md5 key of something (time?) and send email to address with link back to confirm.php
*/

$headers = "From: $owner_email\r\nReply-To: $owner_email";

function validate_email($email)
{
	// Create the syntactical validation regular expression
	$regexp = "^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$";

	// Presume that the email is invalid
	$valid = 0;

	// Validate the syntax
	if (eregi($regexp, $email))
	{
		$valid = 1;
	}
	else
	{
		$valid = 0;
	}

	return $valid;
}

if ($_POST[address]) // Submitting sub/unsub request from web page
{
	$email = $_POST[address];

	$blacklisted = false;
	$blacklist_query = "SELECT * FROM mailinglist_blacklist";
	$blacklist_result = mysql_query($blacklist_query) or die("Query failed : " . mysql_error());
	while ($blacklist_row = mysql_fetch_assoc($blacklist_result))
	{
		$pos = strpos($email, $blacklist_row[rule]);
		if ($pos !== false)
		{
			$blacklisted = true;
		}
	}

	if (validate_email($email) And !$blacklisted)
	{
		// Email is potentially valid
		// See if in db, if so, send unsub email
		// if not in db, insert record and send sub email

		$key = md5(time());
		$auth_link = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] . "?address=$email&key=$key";
		$req_time = time();

		$query = "SELECT * FROM mailinglist_subscribers WHERE address = '$email'";
		$result = mysql_query($query) or die("Query failed : " . mysql_error());
		$num_rows = mysql_num_rows($result);

		if ($num_rows == 1) // Record exists in db, send unsub email
		{
			$row = mysql_fetch_assoc($result);

			if ($row[confirmed] == 1)
			{
				$subject = "Please confirm your unsubscribe request from $list_name";
				$action = "unsubscribe from";
				$auth_link = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] . "?address=$email&key=$row[userkey]&c=0";
			}
			else
			{
				$subject = "Please confirm your subscribe request from $list_name";
				$action = "subscribe to";
				$auth_link .= "&c=1";

				$query = "UPDATE mailinglist_subscribers SET userkey='$key', last_sub_req_date='$req_time' WHERE address = '$email'";
				$result = mysql_query($query) or die("Query failed : " . mysql_error());
			}
		}
		else // no record in db, insert record and send sub email
		{
			$query = "INSERT INTO mailinglist_subscribers VALUES ('$email', '$key', '0', '$req_time', '0')";
			$result = mysql_query($query) or die("Query failed : " . mysql_error());

			$subject = "Please confirm your subscribe request to $list_name";
			$action = "subscribe to";
			$auth_link .= "&c=1";
		}

		$message = "To confirm the request to $action the list: $list_name, ";
		$message .= "we ask that you follow this link:\n\n$auth_link\n\nIf you are unable to click ";
		$message .= "the link, please copy and paste it into your web browser.\n\n";
		$message .= "$owner_email\n";

		mail($email, $subject, $message, $headers);
		$status_message = "A confirmation email has been sent to $email.";
	}
	else
	{
		// Email is invalid
		$status_message = "We're sorry, this email address seems to be invalid or it's not allowed to sign up for this list. 
					Please check the address and try again or email $owner_email for assitance.";
	}

	echo $status_message;
}
elseif($_GET)	// Confirming a sub/unsub request from a link
{
	$email = trim($_GET[address]);
	$key = trim($_GET[key]);
	$confirm = trim($_GET[c]);

	$query = "SELECT * FROM mailinglist_subscribers WHERE address = '$email' AND userkey = '$key'";
	$result = mysql_query($query) or die("Query failed : " . mysql_error());

	if(mysql_num_rows($result)) // The address and key match a record in the db. Proceed to verify request.
	{
		// if db has 0 and user has 0, that's an attempt to unsubscribe an unconfirmed address - denied
		// if db has 0 and user has 1, that's an attempt to confirm an unconfirmed address - allowed
		// if db has 1 and user has 0, that's an attempt to unsubscribe a confirmed address - allowed
		// if db has 1 and user has 1, that's an attempt to subscribe a confirmed address - denied

		$row = mysql_fetch_assoc($result);

		if($row[confirmed] == 0 And $confirm == 1)
		{
			// user is in db, email and key are correct, they have not confirmed so this is a confirmation,
			// update confirm and present message

			$query = "UPDATE mailinglist_subscribers SET confirmed = '1' WHERE address = '$email' AND userkey = '$key'";
			$result = mysql_query($query) or die("Query failed : " . mysql_error());

			$confirm_message = "Thank you, your subscription to $list_name has been confirmed. To unsubscribe at any time ";
			$confirm_message .= "just enter your email address below.\n";

			if($notify_on_confirm)
			{
				// Count subscribers for admin email
				$count_query = "SELECT COUNT(*) FROM mailinglist_subscribers WHERE confirmed = '1'";
				$count_result = mysql_query($count_query) or die("Query failed : " . mysql_error());
				$count_confirmed = mysql_fetch_row($count_result);

				$admin_note = "$email has joined $list_name. There are now $count_confirmed[0] members subscribing to this list.";
				mail($owner_email, "$list_name Subscription Confirmation", "$admin_note", $headers);
			}

			if($notify_user_on_confirm)
			{
				$user_note = "Thank you for joining the $list_name list.";
				mail($email, "$list_name Subscription Confirmation", "$user_note", $headers);
			}
		}
		elseif($row[confirmed] == 1 And $confirm == 0)
		{
			// user is in db, email and key are correct, they were already confirmed so this is an unsubscribe req
			// remove user from db and present message

			$query = "DELETE FROM mailinglist_subscribers WHERE address = '$email' AND userkey = '$key'";
			$result = mysql_query($query) or die("Query failed : " . mysql_error());

			$confirm_message = "Thank you, you have been unsubscribed from $list_name.";

			if($notify_on_unsub)
			{
				// Count subscribers for admin email
				$count_query = "SELECT COUNT(*) FROM mailinglist_subscribers WHERE confirmed = '1'";
				$count_result = mysql_query($count_query) or die("Query failed : " . mysql_error());
				$count_confirmed = mysql_fetch_row($count_result);

				$admin_note = "$email has unsubscribed from $list_name. There are now $count_confirmed[0] members subscribing to this list.";
				mail($owner_email, "$list_name Unsubscription", "$admin_note", $headers);
			}

			if($notify_user_on_unsub)
			{
				$user_note = "You have been successfully unsubsribed from the $list_name list.";
				mail($email, "$list_name Unsubscription Confirmation", "$user_note", $headers);
			}
		}
		else
		{
			// one of the two denied conditions above occurred.
			$confirm_message = "Error processing request. Please contact $owner_email for assistance.\n";
		}
	}
	else
	{
		// No record found to confirm or unsubscribe in db
		$confirm_message = "Error processing request. Please contact $owner_email for assistance.\n";
	}

	echo $confirm_message;
}

echo <<<EOT
<form method="POST" action="$PHP_SELF">
	<input type="text" name="address" size="20">
	<input type="submit" value="Submit" name="submit"><br>
	<font face="Tahoma" size="1">All subscribe/unsubscribe requests must be 
	confirmed via email.</font>
</form>
EOT;
?>
140 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)