Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 10-23-2006, 08:58 PM
evenmonkeys's Avatar
evenmonkeys evenmonkeys is offline
 
Join Date: Aug 2004
Location: Iowa
Posts: 896
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default [MySQL] Update Multiple Rows At Once

Can someone tell me the process in updating multiple rows at once? I've been updating one row at a time with:
Code:
$result = mysql_query("UPDATE tablename SET field='$field'") 
or die(mysql_error());
I'm curious as to how I could have multiple rows at once, and then edit them all all at one time. Let's use a user database as an example. Right now, I just print out every single user with a link as their name which takes me to their own page. I'd like to be able to edit the page in which they all print out.

Username: [ yarub ] Password: [ **** ] Email: [ yarub@yarub.com ]
Username: [ fred ] Password: [ **** ] Email: [ fred@yarub.com ]
Username: [ john ] Password: [ **** ] Email: [ john@yarub.com ]
[ update ]

The brackets represent input fields obviously. Can someone run me through the process of making this work? I have absolutely no idea and can't find any tutorials on it.

Thanks.

The screenshot below is what I'm trying to use it for. At the bottom of the list is a single update button.
http://lsms.reshasha.com/image/screens/pic4.jpg
Reply With Quote
  #2  
Old 10-23-2006, 09:01 PM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$result mysql_query("UPDATE tablename SET field='$field'"

or die(
mysql_error()); 
Wouldn't that update all the rows? There is no WHERE clause.

Do you want a javascript method where it updates the form elements? or a PHP method which updates all of the records in the database?
Reply With Quote
  #3  
Old 10-23-2006, 09:07 PM
evenmonkeys's Avatar
evenmonkeys evenmonkeys is offline
 
Join Date: Aug 2004
Location: Iowa
Posts: 896
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, I'm not looking to update rows based on a WHERE clause. I just want to be able to update all of the rows that are printed out at once like how vBulletin does it like the display order for forums. It shows all of the forums and lets you change the fields.

I'm looking for a PHP method that would update all of the records. =D
Reply With Quote
  #4  
Old 10-24-2006, 01:16 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok have the element names like this...
Code:
name="field[$userid]"
PHP Code:
foreach ($_POST['positions'] as $userid => $position)
{
    
$userid intval($userid);
    
$position mysql_real_escape_string($position);
    
    
$hours intval($_POST['hours'][$userid]);
    
$lot mysql_real_escape_string($_POST['lots'][$userid]);
    
    
$result mysql_query("
        UPDATE tablename
        SET
            position = '
$position',
            hours = 
$hours,
            lot = '
$lot'
        WHERE userid = 
$userid
    "
);
    
    if (!
$result) die(mysql_error());

Reply With Quote
  #5  
Old 10-24-2006, 02:17 AM
evenmonkeys's Avatar
evenmonkeys evenmonkeys is offline
 
Join Date: Aug 2004
Location: Iowa
Posts: 896
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm not getting it to work. I made a test database with some information that's easy to work with. Can you modify this set of code so that it should work? I honestly don't understand much of this right now because of what I know, none of this even looks like it'd even work to me. Haha. I'd really appreciate it.

Code:
<?php

$conn = mysql_connect(" ", " ", " ")
or die(mysql_error());
mysql_select_db(" ",$conn) or die(mysql_error());

if($_POST[submit]){

  foreach($_POST['name'] as $id => $name){
    $id = intval($id);
    $name = mysql_real_escape_string($name);
    $lastname = mysql_real_escape_string($_POST['lastname']);
    $email = mysql_real_escape_string($_POST['email'][$id]);

    $result = mysql_query("
      UPDATE test_mysql
      SET
        name = '$name',
        lastname = '$lastname',
        email = '$email'
      WHERE id = '$id'
    ");

    if (!$result) die(mysql_error());
  }
}
echo("

<form name='form1' method='post' action=''>
      <table width='500' border='0' cellspacing='1' cellpadding='0'>

");
$query = mysql_query("select * FROM test_mysql");
while($row = mysql_fetch_array($query)){
echo("

        <tr>
          <td align='center'>
<input name='field[$id]' type='hidden' id='id' value='$row[id]'>$row[id]
          </td>
          <td align='center'>
<input name='field[$name]' type='text' id='name' value='$row[name]'>
          </td>
          <td align='center'>
<input name='field[$lastname]' type='text' id='lastname' value='$row[lastname]'>
          </td>
          <td align='center'>
<input name='field[$email]' type='text' id='email' value='$row[email]'>
          </td>
        </tr>

");
}
echo("

        <tr>
          <td colspan='4' align='center'>
<input type='submit' name='submit' value='Submit'>
          </td>
        </tr>
      </table>
</form>

");
?>
I'm either getting errors or nothing at all... or it's deleting rows. O_o Sometimes it says there's a syntax error on line 12. Sometimes it says there's no match for an entry. Then when I added [$id] after lastname, it started deleting the last row and rearranging the other fields in other rows. Lol. PHP hates me.
Reply With Quote
  #6  
Old 10-24-2006, 03:11 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok for each field you have, you'll need to make it an array. For firstname, set it as "firstnames[$row[id]]" and lastname, "lastnames[$row[id]]" so you end up submitting each piece of data tied to the user.

When you receive the data, you loop through one of the arrays (all should have the same "keys" [ids] so it doesn't matter which field you choose).

Inside the loop, you'll have to grab the other fields
PHP Code:
foreach ($_POST['firstnames'] as $userid => $firstname)
{
    
$lastname $_POST['lastnames'][$userid];
    
$email $_POST['emails'][$userid];

    
// update query

Reply With Quote
  #7  
Old 10-24-2006, 03:19 AM
evenmonkeys's Avatar
evenmonkeys evenmonkeys is offline
 
Join Date: Aug 2004
Location: Iowa
Posts: 896
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

For the record, you just jumbled my brain far beyond all recognition and I am now lost more than ever. I'm a nuissance; I know. I honestly don't understand. Could I possibly bribe you into editing the code I attached above to make it work? If I have a working version of it, I can usually break it down afterwards to understand why it works the way it does. Getting bits and pieces is just making it harder for me to understand. If not, no problem. =\
Reply With Quote
  #8  
Old 10-24-2006, 03:56 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Try this...
PHP Code:
<?php

$conn 
mysql_connect(" "" "" ")
or die(
mysql_error());
mysql_select_db(" "$conn) or die(mysql_error());

if (
$_POST['submit'])
{
    foreach (
$_POST['ids'] as $id)
    {
        
$id intval($id);

        
$name mysql_real_escape_string($_POST['names'][$id]);
        
$lastname mysql_real_escape_string($_POST['lastnames'][$id]);
        
$email mysql_real_escape_string($_POST['emails'][$id]);

        
$result mysql_query("
            UPDATE test_mysql
            SET
                name = '
$name',
                lastname = '
$lastname',
                email = '
$email'
            WHERE id = '
$id'
        "
);

        if (!
$result) die(mysql_error());
    }
}

echo(
"

<form name='form1' method='post' action=''>
      <table width='500' border='0' cellspacing='1' cellpadding='0'>

"
);

$query mysql_query("
    SELECT *
    FROM test_mysql
"
);

while(
$row mysql_fetch_array($query))
{
    
$userid $row['id'];
    echo(
"

            <tr>
              <td align='center'>
    <input name='ids[]' type='hidden' id='id' value='
$row[id]'>$row[id]
              </td>
              <td align='center'>
    <input name='names[
$userid]' type='text' id='name' value='$row[name]'>
              </td>
              <td align='center'>
    <input name='lastnames[
$userid]' type='text' id='lastname' value='$row[lastname]'>
              </td>
              <td align='center'>
    <input name='emails[
$userid]' type='text' id='email' value='$row[email]'>
              </td>
            </tr>

    "
);
}

echo(
"

        <tr>
          <td colspan='4' align='center'>
<input type='submit' name='submit' value='Submit'>
          </td>
        </tr>
      </table>
</form>

"
);

?>
Reply With Quote
  #9  
Old 10-24-2006, 04:35 AM
evenmonkeys's Avatar
evenmonkeys evenmonkeys is offline
 
Join Date: Aug 2004
Location: Iowa
Posts: 896
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Wow. Works like a charm! I can't even being to thank you enough. I've been working on this for days now. Thank you very much, SirAdrian. I really really appreciate it.
Reply With Quote
  #10  
Old 10-24-2006, 04:50 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

No problem...
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 01:25 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.04070 seconds
  • Memory Usage 2,287KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_code
  • (4)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete