i want to make a PHP page which have username and password and this
username and password should be saved in MySql table and the page should
redirect to another page.
i want to use ODBC and PHP.
i am very new to PHP.
Can anybody having any clue for making such application?
this is my code

<?php 
// Connects to your Database 
$connect = odbc_connect("bhavnadb", "root", "infini") or die(odbc_error());
//This code runs if the form has been submitted
if (isset($_POST['submit'])) { 
//This makes sure they did not leave any fields blank
if (!$_POST['username'] | !$_POST['pass'] | !$_POST['pass2'] ) {
die('You did not complete all of the required fields');
}
// checks if the username is in use
if (!get_magic_quotes_gpc()) {
$_POST['username'] = addslashes($_POST['username']);}
$usercheck = $_POST['username'];
$check = "SELECT username FROM logintable WHERE username = '$usercheck'";
$check2 = odbc_num_rows($check);
//if the name exists it gives an error
if ($check2 != 0) {
die('Sorry, the username '.$_POST['username'].' is already in use.');}
// this makes sure both passwords entered match
if ($_POST['pass'] != $_POST['pass2']) {
die('Your passwords did not match. ');}
// here we encrypt the password and add slashes if needed
$_POST['pass'] = md5($_POST['pass']);
if (!get_magic_quotes_gpc()) {
$_POST['pass'] = addslashes($_POST['pass']);
$_POST['username'] = addslashes($_POST['username']);}
// now we insert it into the database 
$insert = "INSERT INTO logintable (username, password) VALUES ('".$_POST['username']."', '".$_POST['pass']."')";
$add_member = odbc_exec($connect,$insert);
?>
<!-- Now we let them know if their registration was successful -->
<IMG SRC=\"\images\logo1.gif\">
<h1>Registered</h1>
<p>Thank you, you have registered - you may now login</a>.</p>
<?php 
} 
else 
{ 
?>
<!-- This is what they see before they have registered -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table border="0">
<tr><td>Username:</td><td>
<input type="text" name="username" maxlength="60">
</td></tr>
<tr><td>Password:</td><td>
<input type="password" name="pass" maxlength="10">
</td></tr>
<tr><td>Confirm Password:</td><td>
<input type="password" name="pass2" maxlength="10">
</td></tr>
<tr><th colspan=2><input type="submit" name="submit" value="Register"></th></tr> </table>
</form>
<?php 
} 
?>

what's wrong with this code ?????????
it is showing error
Warning: odbc_num_rows(): supplied argument is not a valid ODBC result resource in C:\Inetpub\wwwroot\scripts\PHPCodes\testlogin.php on line 18
Warning: odbc_exec() [function.odbc-exec]: SQL error: [MySQL][ODBC 3.51 Driver][mysqld-5.0.22-community-nt]Data too long for column 'password' at row 1, SQL state S1T00 in SQLExecDirect in C:\Inetpub\wwwroot\scripts\PHPCodes\testlogin.php on line 35

Recommended Answers

All 5 Replies

Member Avatar for Rhyan

$check = "SELECT username FROM logintable WHERE username = '$usercheck'";

First error is here. I don't know witch version of PHP you're using, however there is some change since 4.x that does not allow when creating MySQL requests to user variables inside querries. Use it like this:

$check = 'SELECT username FROM logintable WHERE username ="'. $usercheck.';";

It will work like that.

2nd error is that your password, when encrypted, becomes more characters than you have assigned for the table. Run querry in mysql console "describe logintable;" and check for Password column how many chars are assigned. E.g. you should see something like this:

password varchar(45) not null;

If you're using UTF8 as encoding in order to store 45 chars, you should double the number, that is you should make it 90 chars.

Make the changes and advise if solved your problems.

First error is here. I don't know witch version of PHP you're using, however there is some change since 4.x that does not allow when creating MySQL requests to user variables inside querries. Use it like this:

$check = 'SELECT username FROM logintable WHERE username ="'. $usercheck.';";

It will work like that.

2nd error is that your password, when encrypted, becomes more characters than you have assigned for the table. Run querry in mysql console "describe logintable;" and check for Password column how many chars are assigned. E.g. you should see something like this:

password varchar(45) not null;

If you're using UTF8 as encoding in order to store 45 chars, you should double the number, that is you should make it 90 chars.

Make the changes and advise if solved your problems.

my php version is 4.4.4 and mysql is 5.0

and now when i changed this
password varchar(45) not null;
then its working fine but still there is an error in
$check = "SELECT username FROM logintable WHERE username = '$usercheck'";
$check2 = odbc_num_rows($check);
and the error is
Warning: odbc_num_rows(): supplied argument is not a valid ODBC result resource in \testlogin.php on line 18

Member Avatar for Rhyan

The num_rows function does not execute the query, but returns how many rows have been affected by your query...

I have never used the PHP odbc libraries, however, I think, that first you should run the query using smth like this:

$query = odbc_mysql_query($check);
$check2 = odbc_num_rows($query);

If this does not work, try substituting the ($query) with your linkg identifier - e.g. you hsould have something like $connect = mysql_connect('localhost', 'user', 'pass');
So substitute the ($query) with ($connect).

Hope it will work for you

The num_rows function does not execute the query, but returns how many rows have been affected by your query...

I have never used the PHP odbc libraries, however, I think, that first you should run the query using smth like this:

$query = odbc_mysql_query($check);
$check2 = odbc_num_rows($query);

If this does not work, try substituting the ($query) with your linkg identifier - e.g. you hsould have something like $connect = mysql_connect('localhost', 'user', 'pass');
So substitute the ($query) with ($connect).

Hope it will work for you

no both the things are not working!
actually mysql_connect('localhost', 'user', 'pass');
is written when we use mysql database only but i want to use ODBC so this syntax would not work.ofcourse my database is mysql.

Member Avatar for Rhyan

no both the things are not working!
actually mysql_connect('localhost', 'user', 'pass');
is written when we use mysql database only but i want to use ODBC so this syntax would not work.ofcourse my database is mysql.

I am not familiar with the ODBC ways to connect to MySQL. Still the logic is always the same:

1. Connect to DB
2. Select DB
3. Enter query
4. Get results from query
5. Close connection

You should follow these steps whatever way of connection you use with the DB.

so, you should do smth like this:

//1. Connect 
$connect = odbc_connect(database, user, pass);
//2. I assume that for ODBC database selection is done with the connect opiton...Still you have to check more in detail the php manual.
//3.Enter query
$query = 'SELECT STATEMENT GOES HERE';
$runquery = odbc_exec($connect, $query);
//4. Retrieve information
$rowsAffected = odbc_num_rows($runquery);
for ($i=0; $i<$rowsAffected; $i++)
 {
  $result[$i]=odbc_fetch_array($runquery);
  }

You should be able then to read the $result[] array to retrieve data. Note that result[0] will hold another array what may be accessed using the column name for each item. E.G. if your table column name is 'username' you can access the data in the array like this:

$resultrow = $result[0];
echo $resultrow['username'];

Good luck

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.