tommy168 Posted January 28, 2011 Share Posted January 28, 2011 Hi, I am new to this forum and hopefully u guys can help me solve the problem i have in this first post! So please take a look at this html script <html> <head> <title>Sub/Unsub</title> </head> <body> <h1> Subscribe or unsubscribe mailing list</h1> <form method=POST action="manage.php"> <p><b>Your E-mail address:</b></br> <input type=text name="email" size=40 maxlength=150> <p><b>Action:</b></p> <input type=radio name="action" value="sub" checked>Subscrbie <input type=radio name="action" value="unsub">Unsubscribe <p><input type=submit name="submit" value="Submit form"></p> </form> </body> </html> And this is the manage.php script: <?php //set up a couple of functions include('connect.php'); function emailChecker($email){ global $connect, $check_result; //check mail is not already in list $check = "select id from users where email = '$email'"; $check_result = mysqli_query($connect, $check) or die(mysqli_error($connect)); } if ( ($_POST[action] == 'sub')){ //Try to subscribe, so validate email if($_POST=""){ hearder("Location: manage_start.php"); exit(); } //connect to database db(); //check if email is on the list emailChecker($_POST); //check the number of results to look for duplicates if (mysqli_num_rows($check_result)<1){ //since no records detected, so add this new email $sql="INSERT into users (email) values('$_POST')"; $result = mysqli_query($connect, $sql) or die(mysqli_error($connect)); echo "<p>Thanks for signing up man!!</p>"; } else { //print failure message echo "<p>You have already subscribed!</p>"; } } else if (($_POST[action] == "unsub")){ //trying to unsubscribe and validate address if ($_POST == "") { header ("Location: manage_start.html"); exit(); } db(); emailChecker($_POST); if (mysqli_num_rows($check_result) <1) { //print failure message echo "<p>Cannot find your address!</p> <p>No action is taken</p>"; } else { //unsubscribe address $id = mysqli_real_escape_string($connect, $_POST['id']); $sql = "DELETE from users where id = '$id'"; $result = mysqli_query($connect, $sql) or die(mysqli_error()); echo "<p>You have unsubscribed!</p>"; } } ?> So wut i am trying to do in this script is to create a mailing list form for user to subscribe/unsubscribe using email address. When i first run the html script (which includes php script) and subscribe by the first time, it went perfectly fine and it echos "thanks for signing up man!!" but when i try it with the totally DIFFERENT email address, it always says "You have already subscribed!!" Even when i put blank on the address box, it still shows "You have already subscribed!!" Also it's the same deal as unsubscribe, first time i could delete an entry from my database completely, but afterward when i try to delete the exact email addresses from database, it wouldn't work !! It just says "You have unsubscribed!" but when i checked back if the entry has been deleted, the answer is NO ! I am wondering if this is the problem about $global values under function emailChecker( ). Btw my database connection works absolutely fine. I know this is a long ass post but i need an urgent answer PLZZZZZZZZ Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/ Share on other sites More sharing options...
Pikachu2000 Posted January 28, 2011 Share Posted January 28, 2011 When posting code, please enclose it within the forum's . . . BBCode tags. Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1166603 Share on other sites More sharing options...
tommy168 Posted January 28, 2011 Author Share Posted January 28, 2011 Oops sry i am new to this forum so didn't no Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1166607 Share on other sites More sharing options...
tommy168 Posted February 1, 2011 Author Share Posted February 1, 2011 Help plzzz ?? :-\ Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1168323 Share on other sites More sharing options...
BlueSkyIS Posted February 1, 2011 Share Posted February 1, 2011 echo echo echo. echo values to see what they are. echo $_POST['email'] to make sure it's what you expect. after $check = "select id from users where email = '$email'"; echo $check to see if it's what you expect. if mysqli_num_rows($check_result) <1 echo mysqli_num_rows($check_result) to see if it's what you expect. basic debugging is called for! Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1168326 Share on other sites More sharing options...
tommy168 Posted February 2, 2011 Author Share Posted February 2, 2011 i have tried inserting echo mysqli_num_rows($check_result); right after if (mysqli_num_rows($check_result)<1); for both positive and negative results. For subscribe, it doesn't matter if i type in a random email address or the one that's actually in the database, the following result always shows up: dssub8 You have already subscribed! What is this "dssub8" coming from ? is it related to the "ds" value i assigned? As for the unsubscribe, it works ok if i type a random email, the result would be: 0 Cannot find your address! No action is taken and of coz the "0" is the result of echo mysqli_num_rows($check_result); right after if (mysqli_num_rows($check_result) <1) but if i wanna delete the actual email address, which is from database, echo shows this: 11 You have unsubscribed! And the number "11" keeps showing up when I try several DISTINCT emails even tho all the email addresses in database are DISTINCT. Plz help me out i am so confused Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1168906 Share on other sites More sharing options...
tommy168 Posted February 2, 2011 Author Share Posted February 2, 2011 I have edited my script as follows: <?php //set up a couple of functions include('connect.php'); if ($_POST['email'] = null){ header("Location: manage_start.html"); exit(); } function emailChecker($email){ global $connect, $check_result; //check mail is not already in list db(); $check = "select id from users where email = '$email'"; $check_result = mysqli_query($connect, $check) or die(mysqli_error($connect)); if (mysqli_num_rows($check_result)<1){ return true; //meaning this user doesn't exist in db } else { return false; //meaning this user exists in db } function deleteEmail($email){ $id = mysqli_real_escape_string($connect, $_POST['id']); $sql = "DELETE from users where id = '$id'"; $result = mysqli_query($connect, $sql) or die(mysqli_error($connect)); echo "<p>You have unsubscribed!</p>"; } function addEmail($email){ $sql = "INSERT into users(email) values('$_POST[email]')"; echo "<p>Thanks for signing up!</p>"; } } //Determine if they need to see the form or not if ( ($_POST['op'] == "ds" && $_POST['action'] == 'sub')){ //Try to subscribe, so validate email //connect to database db(); //check if email is on the list $NoUser = emailChecker($_POST[email]); //check the number of results to look for duplicates if ($NoUser){ addEmail($_POST['email']); } else { //print failure message echo mysqli_num_rows($check_result); echo "<p>You have already subscribed!</p>"; } } else if (($_POST[op] == 'ds') && ($_POST[action] == "unsub")){ //trying to unsubscribe and validate address $NoUser = emailChecker($_POST[email]); if(!$NoUser){ deleteEmail($_POST[email]); } else { echo mysqli_num_rows($check_result); echo "<p>Cannot find your address!</p> <p>No action was taken.</p>"; } } ?> Note that I made the codes tighter and simpler by using 2 new functions, addEmail and deleteEmail But I'm still getting the problems below... When i try to subscribe with blank, random email address and/or actual address, the following error comes up: 8 You have already subscribed! Y does it keep showing 8 even if I leave it as blank ?? As for unsubscribe, the following error occurs (no matter what email i type in): Fatal error: Call to undefined function deleteEmail() in C:\xampp\htdocs\php\manage.php And it's pointing directly to deleteEmail($_POST); at the end Plz help !! :confused: Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1169039 Share on other sites More sharing options...
BlueSkyIS Posted February 2, 2011 Share Posted February 2, 2011 i suspect the 8 is coming from this line: echo mysqli_num_rows($check_result); the second problem is probably due to deleteEmail() being defined within another function, emailChecker(). it should be out on it's own. Link to comment https://forums.phpfreaks.com/topic/225974-mailing-list-problem/#findComment-1169048 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.