Best Industrial Training in C,C++,PHP,Dot Net,Java in Jalandhar

Tuesday 19 February 2013

Forms in ASP


Forms are the primary way that a user feeds information into ASP. A form is a web page that contains tags that cause the browser to show fields that the user can fill in.
Forms can be HTML files. They only need to be ASP if ASPy type capabilities are needed (session variables, includes).
The form must pass the variables onto a .asp file to process the form.

Form with GET

<form action="x.asp" name="whatever" method=get>
....
<input type=submit>
<input type=reset>
</form>
there is a limit on the number of characters (approximately 4,000 but varies depending on server and browsers involved.
The form will show it's parameter in the browser address window, for example:
testform.asp?state=md&city=Germantown
would be the URL in the browser, if the state and city field were populated.
An ASP script picks up a form field with:
<%whatever=request.querystring("whichfield")%>

Form with POST

<form action="x.asp" name="whatever" method="post">
....
<input type=submit>
<input type=reset>
</form>
It supports many more characters than get (megabytes of data in case of file uploads)
The form will not show it's parameter in the browser address window, for example:
http://whatever.com/testform.asp
would be the only URL in the browser, regardless of how many fields and how much data is passed.
An ASP script picks up the form field with:
<%whatever=request.form("whichfield")%>



Forms - TextBoxes

<Test Script Below>

<html><head>
<title>FormTextBox.asp</title>
</head><body bgcolor="#FFFFFF">
<Form action = "FormTextBoxRespond.asp" method="get">
Fill Out This Form For Us:<p>
Last Name -> <Input NAME="NameLast" size ="10"><br>
Country -> <Input NAME="Country" value="USA" size="10"><br>
State -> <Input NAME="State" MaxLength="2" size="2"><br>
<Input type="submit" value="Give me your data!">
<hr></form>
</body></html>


filename=/learn/test/formtextboxrespond.asp
<Test Script Below>

<html><head>
<title>FormTextBoxRespond.asp</title>
</head><body bgcolor="#FFFFFF">
<%
lname=request.querystring("namelast")
cty=request.querystring("country")
st=request.querystring("state")

response.write lname & "<br>"
response.write cty & "<br>"
response.write st & "<br>"%>
</body></html>



Forms - Radio Buttons  

All of your user input objects in a form must have their own unique name which will be the label that the browser will assign to them when passing the data to ASP. The exceptions are radio buttons. Since only one piece of information will be passed to ASP from a set of radio buttons, they all get the same name. HTML requires that one of the buttons is selected by default, the one indicated by the CHECKED command. It is important to understand that the browser will send back to ASP the name and the value of the one button which is selected by the user. The browser will NOT send back the text which is associated with the button. For the example above, if the user checked on the button with the text New York City, then ASP would receive City=NY.

filename=/learn/test/FormRadio.asp
<Test Script Below>

<html><head>
<TITLE>formRadio.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormRadiorespond.asp" method="post">
<p><b>Radio Buttons </b> example</p>
<p>Which Regional Office will you be visiting?</p>
<input TYPE="radio" NAME="City" VALUE="NY">New York City
<input TYPE="radio" NAME="City" VALUE="LA">Los Angeles
<input TYPE="radio" NAME="City" VALUE="SV" CHECKED>Savannah
<br><input type="submit" value="choose a city">
</form>
</body></html>


The responder looks like:

filename=/learn/test/FormRadiorespond.asp
<Test Script Below>

<html><head>
<TITLE>formradiorespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%myCity = request.form("City")
Select Case ucase(MyCity)
case "NY"
response.write "New York meeting is on Jan 3"
case "LA"
response.write "LA meeting meeting is on Jan 15"
case "SV"
response.write "Savannah meeting is on Jan 20"
End Select%>
</body>
</html>


Forms - Text Area

Multi-line text boxes are created using the TEXTAREA command as follows:

<TEXTAREA NAME="UserComments" ROWS=5 COLS=50>
... default text is typed here
</TEXTAREA>

<Test Script Below>

<html><head>
<TITLE>formTextArea.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<form action="FormTextAreaRespond.asp" method="post">
<p>TextArea Example</p>
<p>Please type your special shipping comments:</p>
<TEXTAREA NAME="shippingComments" ROWS="5" COLS="50">
shipping comments go here
</textarea>
<p><input type=submit value="send in comments!">
</form>
</body></html>


The responder to the form will look like this:

filename=/learn/test/FormTextArearespond.asp
<Test Script Below>

<html><head>
<TITLE>formTextArearespond.asp</TITLE>
</head><body bgcolor="#FFFFFF">
<%
comm=request.form("shippingcomments")
response.write comm
%>
<hr>
</body></html>

Tuesday 5 February 2013

Preprocessor directives

Preprocessor is a macro processor program that processes the code before it passes through the compiler. It operates under the control of preprocessor command lines and directives. Preprocessor directives are placed in the source program before the main line before the source code passes through the compiler it is examined by the preprocessor for any preprocessor directives. If there is any appropriate actions are taken then the source program is handed over to the compiler.
It is called a macro processor because it allows you to define macros, which are brief abbreviations for longer constructs.
Preprocessor directives follow the special syntax rules and begin with the symbol #bin column1 and do not require any semicolon at the end. A set of commonly used preprocessor directives

DirectiveDescription
#defineSubstitutes a preprocessor macro
#includeInserts a particular header from another file
#undefUndefines a preprocessor macro
#ifdefReturns true if this macro is defined
#ifndefReturns true if this macro is not defined
#ifTests if a compile time condition is true
#elseThe alternative for #if
#elif#else an #if in one statement
#endifEnds preprocessor conditional
#errorPrints error message on stderr
#pragmaIssues special commands to the compiler, using a standardized method

The preprocessor directives can be divided into three categories:
  1. Macro substitution division
  2. File inclusion division
  3. Compiler control division

macro definitions (#define, #undef)

To define preprocessor macros we can use #define. Its format is:

#define identifier replacement
When the preprocessor encounters this directive, it replaces any occurrence of identifier in the rest of the code by replacement. This replacement can be an expression, a statement, a block or simply anything. The preprocessor does not understand C++, it simply replaces any occurrence of identifier by replacement.

1
2
3
#define TABLE_SIZE 100int table1[TABLE_SIZE];
int table2[TABLE_SIZE]; 


After the preprocessor has replaced TABLE_SIZE, the code becomes equivalent to:

1
2
int table1[100];
int table2[100]; 


This use of #define as constant definer is already known by us from previous tutorials, but #define can work also with parameters to define function macros:

 
#define getmax(a,b) a>b?a:b 


This would replace any occurrence of getmax followed by two arguments by the replacement expression, but also replacing each argument by its identifier, exactly as you would expect if it was a function:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// function macro#include <iostream>using namespace std;

#define getmax(a,b) ((a)>(b)?(a):(b))int main()
{
  int x=5, y;
  y= getmax(x,2);
  cout << y << endl;
  cout << getmax(7,x) << endl;
  return 0;
}
5
7


Defined macros are not affected by block structure. A macro lasts until it is undefined with the #undef preprocessor directive:

1
2
3
4
5
#define TABLE_SIZE 100int table1[TABLE_SIZE];
#undef TABLE_SIZE#define TABLE_SIZE 200int table2[TABLE_SIZE];


This would generate the same code as:

1
2
int table1[100];
int table2[200];


Function macro definitions accept two special operators (# and ##) in the replacement sequence:
If the operator # is used before a parameter is used in the replacement sequence, that parameter is replaced by a string literal (as if it were enclosed between double quotes)

1
2
#define str(x) #x
cout << str(test);


This would be translated into:

 
cout << "test";


The operator ## concatenates two arguments leaving no blank spaces between them:

1
2
#define glue(a,b) a ## b
glue(c,out) << "test";


This would also be translated into:

 
cout << "test";


Because preprocessor replacements happen before any C++ syntax check, macro definitions can be a tricky feature, but be careful: code that relies heavily on complicated macros may seem obscure to other programmers, since the syntax they expect is on many occasions different from the regular expressions programmers expect in C++.


Conditional inclusions (#ifdef, #ifndef, #if, #endif, #else and #elif)


These directives allow to include or discard part of the code of a program if a certain condition is met.

#ifdef allows a section of a program to be compiled only if the macro that is specified as the parameter has been defined, no matter which its value is. For example:

1
2
3
#ifdef TABLE_SIZEint table[TABLE_SIZE];
#endif  


In this case, the line of code int table[TABLE_SIZE]; is only compiled if TABLE_SIZE was previously defined with #define, independently of its value. If it was not defined, that line will not be included in the program compilation.

#ifndef serves for the exact opposite: the code between #ifndef and #endif directives is only compiled if the specified identifier has not been previously defined. For example:

1
2
3
4
#ifndef TABLE_SIZE#define TABLE_SIZE 100#endifint table[TABLE_SIZE];


In this case, if when arriving at this piece of code, the TABLE_SIZE macro has not been defined yet, it would be defined to a value of 100. If it already existed it would keep its previous value since the #define directive would not be executed.

The #if, #else and #elif (i.e., "else if") directives serve to specify some condition to be met in order for the portion of code they surround to be compiled. The condition that follows #if or #elif can only evaluate constant expressions, including macro expressions. For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#if TABLE_SIZE>200#undef TABLE_SIZE#define TABLE_SIZE 200
 
#elif TABLE_SIZE<50#undef TABLE_SIZE#define TABLE_SIZE 50
 
#else#undef TABLE_SIZE#define TABLE_SIZE 100#endif
 
int table[TABLE_SIZE]; 


Notice how the whole structure of #if, #elif and #else chained directives ends with #endif.

The behavior of #ifdef and #ifndef can also be achieved by using the special operators defined and !defined respectively in any #if or #elif directive:

1
2
3
4
5
6
#if !defined TABLE_SIZE#define TABLE_SIZE 100#elif defined ARRAY_SIZE#define TABLE_SIZE ARRAY_SIZEint table[TABLE_SIZE];
#endif 



Line control (#line)

When we compile a program and some error happens during the compiling process, the compiler shows an error message with references to the name of the file where the error happened and a line number, so it is easier to find the code generating the error.

The #line directive allows us to control both things, the line numbers within the code files as well as the file name that we want that appears when an error takes place. Its format is:

#line number "filename"
Where number is the new line number that will be assigned to the next code line. The line numbers of successive lines will be increased one by one from this point on.

"filename" is an optional parameter that allows to redefine the file name that will be shown. For example:

1
2
#line 20 "assigning variable"int a?; 


This code will generate an error that will be shown as error in file "assigning variable", line 20.


Error directive (#error)

This directive aborts the compilation process when it is found, generating a compilation the error that can be specified as its parameter:

1
2
3
#ifndef __cplusplus#error A C++ compiler is required!#endif 


This example aborts the compilation process if the macro name __cplusplus is not defined (this macro name is defined by default in all C++ compilers).


Source file inclusion (#include)

This directive has also been used assiduously in other sections of this tutorial. When the preprocessor finds an #include directive it replaces it by the entire content of the specified file. There are two ways to specify a file to be included:

1
2
#include "file"#include <file> 


The only difference between both expressions is the places (directories) where the compiler is going to look for the file. In the first case where the file name is specified between double-quotes, the file is searched first in the same directory that includes the file containing the directive. In case that it is not there, the compiler searches the file in the default directories where it is configured to look for the standard header files.
If the file name is enclosed between angle-brackets <> the file is searched directly where the compiler is configured to look for the standard header files. Therefore, standard header files are usually included in angle-brackets, while other specific header files are included using quotes.


Pragma directive (#pragma)

This directive is used to specify diverse options to the compiler. These options are specific for the platform and the compiler you use. Consult the manual or the reference of your compiler for more information on the possible parameters that you can define with #pragma.

If the compiler does not support a specific argument for #pragma, it is ignored - no error is generated.

Predefined macro names

The following macro names are defined at any time:

macrovalue
__LINE__Integer value representing the current line in the source code file being compiled.
__FILE__A string literal containing the presumed name of the source file being compiled.
__DATE__A string literal in the form "Mmm dd yyyy" containing the date in which the compilation process began.
__TIME__A string literal in the form "hh:mm:ss" containing the time at which the compilation process began.
__cplusplusAn integer value. All C++ compilers have this constant defined to some value. If the compiler is fully compliant with the C++ standard its value is equal or greater than 199711L depending on the version of the standard they comply.

For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
// standard macro names#include <iostream>using namespace std;

int main()
{
  cout << "This is the line number " << __LINE__;
  cout << " of file " << __FILE__ << ".\n";
  cout << "Its compilation began " << __DATE__;
  cout << " at " << __TIME__ << ".\n";
  cout << "The compiler gives a __cplusplus value of " << __cplusplus;
  return 0;
}