PDA

View Full Version : Mass delete based on txt file -- need help to finish


ChurchMedia
08-18-2007, 08:31 PM
Hi,

I'm trying to clean up my database. I bought Emall Extractor (http://www.maxprog.com/EmailExtractor.html) to pull out all email addresses from bounced email. So here is how this works:

1) I send out a message.
2) I get the bounces through Outlook, which automatically puts bounces in a separate folder.
3) I export that folder with the bounced emails to a csv file.
4) I use Email Extractor to extract all of the bad email addresses into a text file.
5) I use the mass_delete.php script to delete the users attached to those emails.

So now I have a text file with like 7500 emails in it -- one on each line. I want to upload this file using my script and have it delete the users that have those email address. My code skills are really bad right now due to some cognitive problems, so I could use some help to de-bug it. Although I'm not putting this in the paid hacks section, you can expect a donation for your help.

I've attached the script. Thanks in advance for your help!

I'm really close. My query just isn't right. What am I missing?


<?php
/*================================================= =====================*\
|| ################################################## ################## ||
|| # ChurchMedia Text File Import -- Mass Delete v.1.0 # ||
|| # ---------------------------------------------------------------- # ||
\*================================================ ======================*/

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
set_time_limit(18000);

// ##################### DEFINE IMPORTANT CONSTANTS #######################
define('CVS_REVISION', '$RCSfile: importadmin.php,v $ - $Revision: 1.0 $');
define('NO_REGISTER_GLOBALS', 1);

// #################### PRE-CACHE TEMPLATES AND DATA ######################
$phrasegroups = array();
$specialtemplates = array();

// ########################## REQUIRE BACK-END ############################
require_once('./global.php');

// You will need to edit this line below for the server path to your forum directory.
$path = "/home/cmn/public_html/CMN/";

// ################################################## ######################
// ######################### START MAIN SCRIPT ############################
// ################################################## ######################

$fd= fopen("/home/cmn/public_html/CMN/admincp/test.txt", "r") or die ('Cannot find file');
$total=0;
while (!feof($fd))
{
$delemail = fgets($fd, 4096);
$user_info = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "user WHERE email = '$delemail'");
$user = $db->fetch_array($user_info);
$username=$user['username'];
$usergroup=$user['usergroupid'];
$useremail=$user['email'];

//user doesn't exist

if ($username == '')
{
print ("$username does not exist....<br />");
}

//user is a Pro Member
elseif ($usergroup == '20')
{
print ("$username is a Pro Member... skipping...<br />");
}

//user is a NOT a Pro Member -- Delete Account
elseif ($useremail == '$delemail' AND $usergroup != '20')
{
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_CP);
$userdm->set_existing($user);
$userdm->delete();
unset($userdm);

print ("$useremail has been deleted....<br />");
$total = $total+1;
}

}
print ("Total users deleted: $total. \n You should update your counters now.");
?>

ChurchMedia
08-19-2007, 11:24 PM
I'm really close. There's a problem with my query and I've tried it every way I know how:

$user_info = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "user WHERE email = " . $delemail . "");

I get this error:

Invalid SQL:
SELECT * FROM vb_user WHERE email = edge.students@gmail.com;

MySQL Error : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@gmail.com' at line 1
Error Number : 1064

It's just not reading the email address correctly -- and when I put it in quotes it doesn't bring up the data. Any ideas?

I solved the problem and it works great. I'll try to package it up and release it.

711
11-22-2007, 05:20 PM
You are trying to use a literal operator on a string, which won't work here.

Try this:


$user_info = $db->query_read("SELECT * FROM " . TABLE_PREFIX . "user WHERE email LIKE " . $delemail . "%");


this will match the email address user@whatever.com with a wildcard right after it (along the lines of user@whatever.com* ). The wildcard can be any characters, or no characters. Since all of your email addresses are unique and none of them should have any characters after the TLD, this should work.

Marco van Herwaarden
11-23-2007, 04:40 AM
Regardless if you use = or LIKE, non-numeric values should be enclosed by single quotes:

WHERE email = '" . $delemail . "'"); </SPAN>
Or:
LIKE '" . $delemail . "%'");

Devices
05-13-2008, 09:07 AM
Hi

I see from your other post you got this working https://vborg.vbsupport.ru/showthread.php?t=155604&highlight=Emall+Extractor

Is there any chance you would share ?

I did PM you but never received a reply.