PDA

View Full Version : Calling a form


Nomb
02-25-2003, 03:35 AM
Hey, I've put a profile field in my index.php. It displays custom profile field #6.

I'd like to be able to choose something from the dropdown, then update the database with the selection, and finally be redirected back to index.php.

Here's what I did to index.php:


$profilefield=$DB_site->query_first("SELECT title,description,required,hidden,maxlength,size,d isplayorder,editable,type,options
FROM profilefield
WHERE profilefieldid=6");
$TheField="";
$optionlines = explode(',', $profilefield[options]);
$option_bit=$optionlines[0];
$TheField = "<select size=\"$profilefield[size]\" name=\"action\" onchange=\"document.updatematrixform.submit();\">";
while ($option_bit) {
$option_bit=trim($option_bit);
if ($option_bit == $bbuserinfo[field6]) { $LocOn = "selected"; } else { $LocOn = ""; }
$TheField .= "<option value=\"$option_bit\" $LocOn>$option_bit</option>";
$option_bit=next($optionlines);
}
$TheField .= "</select>";

if ($HTTP_POST_VARS['action']=="updatematrix") {
$templatesused = 'redirect_updatethanks';
include("./global.php");
$DB_site->query("UPDATE userfield SET field6=$bbuserinfo[field6] WHERE userid=$bbuserinfo[userid]");
eval("standardredirect(\"".gettemplate("redirect_updatethanks")."\",\"index.php?s=$session[sessionhash]\");");
}


The first part of that code works like a charm. I edited it a little but it is from Mutt's hack to create Dropdown fields. Anyway, this generates a dropdown with the correct fields and displays the correct current state of the [field6]. I think it's the second part of the code that's screwed up. :(

This is my forumhome_logoutcode template where I want this field to show up:


<form action="index.php" name="updatematrixform" method="post">
$TheField
<input type="hidden" name="action" value="updatematrix">
</form>


Anyway, the field shows up but I don't know how to update the database and redirect back to index.php.

Any help would be awesome, or just a hint.

Thanks :)

Nomb
02-25-2003, 06:17 AM
OK, I think I've improved the code ...

I figured I'd forget the onchange event for now and just see if I can update the database with a submit button. Here's my code:


$profilefield=$DB_site->query_first("SELECT title,description,required,hidden,maxlength,size,d isplayorder,editable,type,options
FROM profilefield
WHERE profilefieldid=6");
$TheField="";
$optionlines = explode(',', $profilefield[options]);
$option_bit=$optionlines[0];
$TheField = "<select size=\"$profilefield[size]\" name=\"field6\">";
while ($option_bit) {
$option_bit=trim($option_bit);
if ($option_bit == $bbuserinfo[field6]) { $LocOn = "selected"; } else { $LocOn = ""; }
$TheField .= "<option value=\"$option_bit\" $LocOn>$option_bit</option>";
$option_bit=next($optionlines);
}
$TheField .= "</select>";

if ($HTTP_POST_VARS['action']=="Update Matrix") {
$templatesused = 'redirect_updatethanks';
$DB_site->query("UPDATE userfield SET field6=field6 WHERE userid=$bbuserinfo[userid]");
eval("standardredirect(\"".gettemplate("redirect_updatethanks")."\",\"index.php?s=$session[sessionhash]\");");
}


Look at the last query in that code. I don't know how to update "field6" with the current state of the select box. In other words, I choose "Blue" in my select box and then I hit submit. What variable should I use to pass "Blue" into the database?

Nomb
02-25-2003, 11:00 PM
OK, it looks like optionlines is an array. How do I know which array element the user chose from the dropdown?

Erwin
02-25-2003, 11:03 PM
Instead of all the above, just make the form call another PHP file that runs the query that adds the value to the custom profile field. So no need PHP edits, just edit the template, and then upload a new PHP file. It definitely works because I have something similar set up.

Nomb
02-25-2003, 11:19 PM
That sounds good. But I'm still unsure about how to update the database with the current state of the dropdown. ?

Erwin
02-25-2003, 11:54 PM
Don't use the automatic dropdown. Make it up manually, then add it as HTML to the template. The form should call the other php file.

Nomb
02-26-2003, 12:28 AM
OK, I see what you're saying. But I still am confused about how I get the current state of the dropdown to be passed into the database.

Now, I have a php file xxx.php:


<?php
error_reporting(7);

require('./global.php');

// The Matrix!!!

if ($HTTP_POST_VARS['action']=="Update Matrix") {
$templatesused = 'redirect_updatethanks';
$DB_site->query("UPDATE userfield SET field6=field6 WHERE userid=$bbuserinfo[userid]");
eval("standardredirect(\"".gettemplate("redirect_updatethanks")."\",\"index.php?s=$session[sessionhash]\");");
}

// The Matrix!!!
?>


And my template looks like this:


<form action="matrix.php" name="updatematrixform" method="post">
<select size="1" name="field6"><option value="TheValue" >TheValue</option><option value="TheValue1" >TheValue1</option><option value="TheValue2">TheValue2</option><option value="TheValue3">TheValue3</option></select>
<br>
<input type="submit" name="action" value="Update Matrix">
</form>


So, when I hit the submit button it processes the php file correctly and redirects me to the updatethanks template and then back to index.php. What it "does not" do is update the mysql with what ever I've chosen from the drop down. That is the problem.

Erwin
02-26-2003, 12:36 AM
Replace this:


$DB_site->query("UPDATE userfield SET field6=field6 WHERE userid=$bbuserinfo[userid]");


with this:


$DB_site->query("UPDATE userfield SET field6=$field6 WHERE userid=$bbuserinfo[userid]");


You forgot the $. :)

Nomb
02-26-2003, 04:14 AM
Kickass!! That did it man, thanks a lot. :D

Erwin
02-27-2003, 07:18 AM
You're welcome! :)