vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   for,foreach or while? (https://vborg.vbsupport.ru/showthread.php?t=78614)

sabret00the 03-23-2005 12:15 PM

for,foreach or while?
 
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
HTML Code:

                        <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
PHP Code:

if ($do == "doinvite")
{
    
globalize($_POST, array('invite_username' => STRpersonal_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 [url=$vboptions[homeurl]/groups/groups.php?$session[sessionurl]g=$groupid]$grps_showgroup[title]"[/url]" . if ($include_message) {"\n\nThey also included this message:\n=========================\n\n$personal_message. ;} . "\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 [url=$vboptions[homeurl]/groups/membership.php?$session[sessionurl]g=$groupid]JOIN NOW" "[/url]";
            
$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
PHP Code:

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

PHP 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_invalidusername'));
            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

PHP Code:

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?
PHP Code:

        $message $bbuserinfo['username'] . " feels that you may be interested in joining one of the " $vboptions['hometitle'] . " Groups, this one in particular [url=" $vboptions['homeurl'] . "/groups/groups.php?" $session[sessionurl] . "g=" $groupid "]" $grps_showgroup['title'] . "[/url]: " $grps_showgroup['description'];
        
        if (
$include_message)
        {
            
$message .= "\n\nThey also included this message:\n=========================\n\n$personal_message\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 [url=" $vboptions['homeurl'] . "/groups/membership.php?" $session['sessionurl'] . "g=" $groupid "][b]JOIN NOW[/b][/url]";

        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
PHP Code:

        if ($DB_site->num_rows($receipants) != count($invite_username))
        {
            eval(
print_standard_error('grps_invite_invalidusername'));
            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 :)


All times are GMT. The time now is 04:59 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02128 seconds
  • Memory Usage 1,823KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_html_printable
  • (6)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (9)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete