• Howdy! Welcome to our community of more than 130.000 members devoted to web hosting. This is a great place to get special offers from web hosts and post your own requests or ads. To start posting sign up here. Cheers! /Peo, FreeWebSpace.net
managed wordpress hosting

php: unlink() only the files that are checked [dusty should know this, always does]

keith

anti-liberal
NLC
i'm writing [at least trying to] a database script in php. people can enter info about themselves and create an account [if you want to call it that]

well, in the admin.php, i'm having trouble being able to delete more than one person at a time. it has a checkbox next to each account name, and i'd like it to be able to delete all accounts that are checked. right now it just deletes the lowest checked account:

here's the code i've written, but it's not quite working correctly, only deletes the most recently checked box. the main troublesome code is near the bottom, in $action == "member_remove"
PHP:
<?php

if (file_exists("config.php")) {
include("config.php");
}
else {
?>
<html><body><font color="red">config.php</font> is absent.<br></body></html>
<?
exit;
}

if (!$action) {
ShowAdminHeader();
?>

<form action="<? echo("$PHP_SELF"); ?>" method="post">
<input type="hidden" name="action" value="member_remove">

<table width="100%" cellpadding="3" cellspacing="3" border="0">
	<tr bgcolor="#dddddd">
		<td>
<font size="1" face="verdana">
&nbsp;<br>
</font>
		</td>
		<td>
<font size="1" face="verdana">
<b>Account Name</b><br>
</font>
		</td>
		<td>
<font size="1" face="verdana">
<b>Email</b><br>
</font>
		</td>
		<td>
<font size="1" face="verdana">
<b>Password</b><br>
</font>
		</td>
		<td>
<font size="1" face="verdana">
<b>Created</b><br>
</font>
		</td>
		<td>
<font size="1" face="verdana">
<b>Last Modified</b><br>
</font>
		</td>
	</tr>

<?

$dir="$members";
$a=opendir("$dir");

while ($account_name = readdir($a)) {

	$fp = fopen("$dir/$account_name", 'r');
	$data = fread($fp, filesize("$dir/$account_name"));
	list($epoch,$created,$modified,$email,$pass,$info) = explode("\n",$data);
	fclose ($fp);

	if(ereg("^\.",$domain)) continue;
	echo "\n<tr>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<input type=\"checkbox\" name=\"remove\" value=\"$account_name\">";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$account_name</font>";
	echo "</td>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<font size=\"1\" face=\"verdana\"><a href=\"mailto:$email\">Send Email</a></font>";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$pass</font>";
	echo "</td>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<font size=\"1\" face=\"verdana\">$created</font>";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$created</font>";
	echo "</td>\n";
	echo "</tr>\n\n";
}

closedir($a);

?>
</table>

<br>
<input type="submit" value="Remove Selected Members"><br>
</form>
<?
ShowAdminFooter();
exit;
}

elseif (($action == "member_remove") && eregi("$PHP_SELF", $referer)) {

	while ($remove) {

if ($remove) {
$delete = unlink("$members/$remove");
}

		if ($delete) {
		ShowAdminHeader();
		?>
<font color="red"><? echo("$remove"); ?></font> was successfully removed.<br>
		<?
		ShowAdminFooter();
		exit;
		}
		else {
		ShowAdminHeader();
		?>
<font color="red"><? echo("$remove"); ?></font> was not removed.<br>
		<?
		ShowAdminFooter();
		exit;
		}

	}

}

else {
header("Location: [url]http://[/url]$HTTP_HOST$PHP_SELF");
exit;
}
?>
 
Last edited:
Wherever you've got a checkbox being printed out, i.e.:

echo "<input type=\"checkbox\" name=\"remove\" value=\"$account_name\">";

Change the name to "remove[]".
 
Oh, I just noticed something else that won't work: You've got this:

Code:
while($remove){
	...doing stuff with $remove, like unlink("$members/$remove");
}

Do this instead:

Code:
while(list($key,$element)=each($remove)){
	...do stuff with $element, like unlink("$members/$element")
}

Or do this (this is actually better, it's faster running):

Code:
foreach($remove as $element){
	...do stuff with $element, like unlink("$members/$element")
}
 
i used the 'foreach'.

ok, i tweaked it a bit. here's the code i'm using, it still only deletes one account, but now it's the account nearest to the top of the list:
PHP:
while ($account_name= readdir($a)) {

	$fp = fopen("$members/$domain", 'r');
	$data = fread($fp, filesize("$members/$domain"));
	list($epoch,$created,$modified,$email,$pass,$info) = explode("\n",$data);
	fclose ($fp);

	if(ereg("^\.",$account_name)) continue;
	echo "\n<tr>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<input type=\"checkbox\" name=\"remove[]\" value=\"$account_name\">";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$account_name</font>";
	echo "</td>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<font size=\"1\" face=\"verdana\"><a href=\"mailto:$email\">Send Email</a></font>";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$pass</font>";
	echo "</td>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<font size=\"1\" face=\"verdana\">$created</font>";
	echo "</td>\n";
	echo "<td>";
	echo "<font size=\"1\" face=\"verdana\">$modified</font>";
	echo "</td>\n";
	echo "<td bgcolor=\"#eeeeee\">";
	echo "<font size=\"1\" face=\"verdana\"><a href=\"http://$url\" target=\"_blank\">View</a></font>";
	echo "</td>\n";
	echo "</tr>\n\n";
}
PHP:
	foreach($remove as $element){

		unlink("$members/$element");

		ShowAdminHeader();
		?>
<font color="red"><? echo("$element"); ?></font> was successfully removed.<br>
		<?
		ShowAdminFooter();
		exit;
	}
 
Last edited:
Code:
    foreach($remove as $element){
        unlink("$members/$element");
        ShowAdminHeader();
        ?>
<font color="red"><? echo("$element"); ?></font> was successfully removed.<br>
        <?
        ShowAdminFooter();
        [b]exit;[/b]
    }
Remove the "exit;".
 
holy crap i'm an idiot... i'll give that a shot :cool:

keith adds: hey, it works! thanks a lot. i've been stuck at that spot for two days [well, not two days straight.. but you get the idea]
 
Last edited:
hey, sorry to keep bugging you, but a small error on my end... if you hit submit without checking any boxes, it returns an error. what type of statement would i need to get around that?
 
Back
Top