PDA

View Full Version : for,foreach or while?


sabret00the
03-23-2005, 12:15 PM
ok to understand this script, you need to know that $grps_showgroup is predefined at an earlier part of the script :)

the form that sends the data to the scipt is <form action="invitation.php" method="post">
<table>
<tr>
<td valign="top">
<fieldset>
<legend>Users To Invite</legend>
Username: <input name="invite_username[]" type="text" size="25" maxlength="250"><br />
<br />
Username: <input name="invite_username[]" type="text" size="25" maxlength="250"><br />
<br />
Username: <input name="invite_username[]" type="text" size="25" maxlength="250"><br />
<br />
Username: <input name="invite_username[]" type="text" size="25" maxlength="250"><br />
<br />
Username: <input name="invite_username[]" type="text" size="25" maxlength="250"><br />
</fieldset>
</td>
<td valign="top">
<fieldset>
<legend>Personal Message To Be Included</legend>
<textarea name="personal_message" cols="50" rows="9" id="personal_message">Please Enter A Personal Message The Group Description and Group Title Will Be Automatically Included.</textarea>
</fieldset>
</td>
</tr>
</table>
<br />
<input name="submit" type="button" value="Send Invite(s)">
<input type="hidden" name="do" value="doinvite" />
</form>


and this is the process engine if ($do == "doinvite")
{
globalize($_POST, array('invite_username' => STR, personal_message => INT));

if ($personal_message)
{
$og_personal_message = "Please Enter A Personal Message The Group Description and Group Title Will Be Automatically Included.";
if ((strstr($personal_message, $og_personal_message)) AND (strlen($personal_message) == strlen($og_personal_message))
{
$include_message = TRUE;
}
}

foreach ($invite_username AS $invite_id => $username)
{
if ($username == "")
{ // no point in checking the permission if they dont want to do anything to the confession
//eval(print_standard_error('invalid_username'));
// do nothing
}
else
{
$message = "$bbuserinfo[username] feels that you may be interested in joining one of the $vboptions[hometitle] Groups, this one in particular /groups/groups.php?$session[sessionurl]g=$groupid]$grps_showgroup[title]" . " ($vboptions[homeurl)" . if ($include_message) {"\n\nThey also included this message:\n=========================\n\n$personal_m essage" . ;} . "\n\n=========================\n\n Please take a look at the group, review it and then join.\n\nIf you'd like to just join straight away, please click this link /groups/membership.php?$session[sessionurl]g=$groupid]JOIN NOW" . " ($vboptions[homeurl)";
$user['userid'] = //need to get the userid somehow?;
$user['username'] = $username;
$sendto["$username"] = true;
$tostring["$user[userid]"] = $user['username'];
$newpmtitle = "You've Been Invited To Join " . $grps_membership['title'];


$DB_site->query("
INSERT INTO " . TABLE_PREFIX . "pmtext(fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature)
VALUES($bbuserinfo[userid], '" . addslashes($bbuserinfo['username']) . "', '" . addslashes($newpmtitle) . "', '".addslashes($message)."', '" . addslashes(serialize($tostring)) . "', 0, '" . TIMENOW . "', 1)
");

$pmtextid = $DB_site->insert_id();

$DB_site->query("
INSERT INTO " . TABLE_PREFIX . "pm (pmtextid, userid, messageread)
VALUES ($pmtextid, $user[userid], 0)
");

$DB_site->shutdown_query("
UPDATE " . TABLE_PREFIX . "user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid = user[userid]
");
}
}
} am i doing this all wrong? and how would i go about getting the userid? as this seems to be evading me especially as i'm getting the usernames as part of the loop.

Revan
03-23-2005, 02:43 PM
First thing I would like to say is that you have to seperate your form names.
Else, since all form names are the same, you get one username.
Second, having the if ($username == "")
{ // no point in checking the permission if they dont want to do anything to the confession
//eval(print_standard_error('invalid_username'));
// do nothing
}
else
{ is abit redundant. just say if (!empty($username)) ;)

Third, if you pass invite_username as a STR, you will break it as it is an array of usernames.
you must pass it without a datatype.

sabret00the
03-23-2005, 06:28 PM
heh, sorry i totally missed that whole post and got it sorted but i was put onto some super code

if ($do == "doinvite")
{
globalize($_POST, array(
'personal_message' => STR,
'invite_username'
));

if ($personal_message)
{
$og_personal_message = "Please Enter A Personal Message The Group Description and Group Title Will Be Automatically Included.";

if ((strstr($personal_message, $og_personal_message)) AND (strlen($personal_message) == strlen($og_personal_message)))
{
$include_message = TRUE;
}
}

$invite_users = explode(";", addslashes(htmlspecialchars_uni(implode(";", $invite_username))));

$receipants = $DB_site->query("
SELECT user.userid as userid, user.username as username
FROM " . TABLE_PREFIX . "user AS user
WHERE username='" . implode('\' OR username=\'', $invite_users) . "'
ORDER BY user.username
");

if ($DB_site->num_rows($receipants) != count($invite_username))
{
eval(print_standard_error('grps_invite_invaliduser name'));
die();
}


only problem is, i need to make sure that if they only want to invite one person it will still go through?

i've figured the best thing would be to let it go through, split the array at an empty point then remerge it?

that way i'm not making the database so any extra work as even if they put in two usernames, had a blank field then another two usernames it would just remove the space and then do the queries for the other four?

Revan
03-23-2005, 07:57 PM
foreach ($invite_users as $key => $invite)
{
if (!empty($invite))
{
$inviteusers[] = $invite;
}
}
I believe this should work fine :)

sabret00the
03-23-2005, 08:03 PM
this is the below code, is it compatible?
$message = $bbuserinfo['username'] . " feels that you may be interested in joining one of the " . $vboptions['hometitle'] . " Groups, this one in particular " . $grps_showgroup['title'] . " ( . $vboptions['homeurl'] . "/groups/groups.php?" . $session[sessionurl] . "g=" . $groupid . ): " . $grps_showgroup['description'];

if ($include_message)
{
$message .= "\n\nThey also included this message:\n=========================\n\n$personal_m essage\n\n=========================";
}

$message .= "\n\n Please take a look at the group, review it and then join.\n\nIf you'd like to just join straight away, please click this link JOIN NOW ( . $vboptions['homeurl'] . "/groups/membership.php?" . $session['sessionurl'] . "g=" . $groupid . )";

while ($receipant = $DB_site->fetch_array($receipants))
{
$sendto["$username"] = true;
$tostring["$receipant[userid]"] = $receipant['username'];
$newpmtitle = "You've Been Invited To Join " . $grps_showgroup['title'];
echo "<br />We got username $receipant[username] with userid: $receipant[userid]";

$DB_site->query("
INSERT INTO " . TABLE_PREFIX . "pmtext(fromuserid, fromusername, title, message, touserarray, iconid, dateline, showsignature)
VALUES($bbuserinfo[userid], '" . addslashes($bbuserinfo['username']) . "', '" . addslashes($newpmtitle) . "', '".addslashes($message)."', '" . addslashes(serialize($tostring)) . "', 0, '" . TIMENOW . "', 1)
");

$pmtextid = $DB_site->insert_id();

$DB_site->query("
INSERT INTO " . TABLE_PREFIX . "pm (pmtextid, userid, messageread)
VALUES ($pmtextid, $receipant[userid], 0)
");

$DB_site->shutdown_query("
UPDATE " . TABLE_PREFIX . "user SET pmtotal=pmtotal+1, pmunread=pmunread+1 WHERE userid = $receipant[userid]
");
}

//redirect
$url = "groups.php?$session[sessionurl]g=$groupid";
$_REQUEST['forceredirect'] = true;
eval(print_standard_redirect('grps_invitesent'));
}

Revan
03-23-2005, 08:09 PM
My first comment would be that you NEED to use an if() for the pmpopup. It was what annoyed me the most about rpg v2 :p

and I believe you can just use my foreach before the $recipants (:P) query.
The purpose of my code was to eliminate empty array keys before the query, I think :p

sabret00the
03-23-2005, 08:28 PM
done that, but now it's failing at
if ($DB_site->num_rows($receipants) != count($invite_username))
{
eval(print_standard_error('grps_invite_invaliduser name'));
die();
}


btw, pm popup, i wondered how to do that? how do you do that?

Revan
03-23-2005, 08:36 PM
If I was you, I would just steal vB's PM Send code ;)
It takes care of all that bs and produces perfectly coded PMs :)

And ti fails at that point because you need to rename the count()'d array ;)

sabret00the
03-24-2005, 06:22 AM
Thanks Revan, working perfectly :)