0

I'm trying to get a drop-down box to populate from data within a database, but it does not seem to be working. It passes an error saying that there is no data in the database for it to read but there is. Below is the script I used to make it work.

    <?php
@ini_set('display_errors', 'on');
 echo "<h1>Register</h1>";
if ($_SERVER['REQUEST_METHOD'] == 'POST'){

$errors = array();
if (empty($_POST['firstname'])){
$errors[] = 'Your forgot to enter your first name.';
}else{
  $firstname = trim($_POST['firstname']);
  }
if (empty($_POST['lastname'])){
$errors[] = 'Your forgot to enter your last name.';
}else{
  $lastname = trim($_POST['lastname']);
}
if (empty($_POST['username'])){
$errors[] = 'Your forgot to enter your  username.';
}else{
  $username = trim($_POST['username']);
}
if (!empty($_POST['password1'])) {
if ($_POST['password1'] != $_POST ['password2']) {
  $errors[] = 'Your password did not match the confirmed password!';
 }else{
   $password = trim($_POST['password1']);
  }
} else {
  $errors[] = 'You forgot to enter your password!';
}
if (empty($_POST['birthdate'])){
$errors[] = 'Your forgot to enter your  birthdate.';
}else{
  $birthdate = trim($_POST['birthdate']);
}
if (empty($_POST['gamespyid'])){
$errors[] = 'Your forgot to enter your  gamespy id.';
}else{
  $gamespyid = trim($_POST['gamespyid']);
}
  if (empty($errors)) {
     if (is_file('admin/mysqli_connect.php')) { echo '<p>The connection file is there.</p>';require('admin/mysqli_connect.php'); }

else {
  echo '<p>The connection file is not there</p>';
  }
     $q="INSERT INTO Users (firstname, lastname, username, password1, birthdate, gamespyid, base) VALUES ('$firstname', '$lastname', '$username', md5('$password1'), '$birthdate', '$gamespyid', '$base')";
$r = mysql_query($dbc, $q);
if ($r){
 echo'<p>You are now registered</p>';
}else{
  echo'<p>You have not been registered</p>';
                                            }
  } else {
    echo 'Error<br> <p>The following errors have occured:<br/>';
    foreach ($error as $msg) {
      echo " - $msg<br/>\n";
    }
    echo '</p><p>Please try again.</p><p><br/></p>';
  }   //if no errors

 }     //submit

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
  <title></title>
</head>

<body>
  <form action="http://www.virtual-aviation.org/gatewayaviation/index.php?p=register" method='POST'>
    <table summary="REgform">
      <tr>
        <td>First Name:</td>

        <td><input type='text' name='firstname' value='<?php echo $firstname; ?>'></td>
      </tr>

      <tr>
        <td>Last Name:</td>

        <td><input type='text' name='lastname'value='<?php echo $lastname; ?>'></td>
      </tr>

      <tr>
        <td>Username:</td>

        <td><input type='text' name='username'value='<?php echo $username; ?>'></td>
      </tr>

      <tr>
        <td>Password:</td>

        <td><input type='password' name='password1'></td>
      </tr>

      <tr>
        <td>Repeat Password:</td>

        <td><input type='password' name='password2'></td>
      </tr>

      <tr>
        <td>Birthdate:</td>

        <td><input type='text  ' name='birthdate'value='<?php echo $birthdate; ?>'></td>
      </tr>

      <tr>
        <td>Gamespy Id:</td>

        <td><input type='text' name='gamespyid'value='<?php echo $gamespyid; ?>'></td>
      </tr>
       <td>Base:</td>
      <tr>
       <td><select name="base" size="1">
          <option>
            Select One
          </option>
         <?php
         $qf = "SELECT  airport_id, CONCAT_WS(' ', airport_name, airport_code) FROM airports ORDER BY airport_code ASC";
         $rf = mysqli_query ($dbc, $qf);

         if (mysqli_num_rows($rf) > 0) {
         while ($row = mysql_fetch_array ($rf, MYSQLI_NUM)) {
         echo "<option value=\"$row[0]\"";
         if (isset($_POST['existing']) && ($_POST['existing'] == $row[0]) ) echo 'selected="selected"'; echo ">$row[1]</option>\n";
         }
   } else {
   echo '<option>Please a new airport first.</option>';
    }
    //mysqli_close($dbc);

         ?>
        </select></td>
      </tr>
    </table>
   <input type='submit' name='submit' value='Register'/>
  </form>
  <?php
  echo '<p>debugger<p>' . $rf ;
  ?>
</body>
</html>

Here are some errors I get when I view the source code; the errors appear where the option box content should be.

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home5/virtua15/public_html/gatewayaviation/pages/register.inc.php on line 182

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in /home5/virtua15/public_html/gatewayaviation/pages/register.inc.php on line 184

Please a new airport first.
6
  • 1
    What you are doing is anything but safe. Use prepared queries to avoid SQL injection attacks! Commented Aug 1, 2012 at 18:04
  • 1
    Why are you mixing legacy mysql_* and newer mysqli_* functions? Commented Aug 1, 2012 at 18:06
  • What part of the error messages aren't clear? Commented Aug 1, 2012 at 18:07
  • Also, please remove extraneous code (it is interpreted as noise and prevents the community from helping you). Commented Aug 1, 2012 at 18:08
  • @Leigh OOPS! Didn't realize what I was doing. Commented Aug 1, 2012 at 18:09

3 Answers 3

2

Either use mysql_* or mysqli_* functions, but you can't use both. I'd prefer you choose the latter and learn about prepared statements: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

The problem is your $dbc variable is most likely a mysql resource or null, not a mysqli resource so when you pass it to the mysqli_* functions it fails. There are ways to check and ensure you have a valid resource:

$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

To solve your problem, you need to restructure your code to use only mysqli and make sure $dbc is a valid mysqli resource.

Sign up to request clarification or add additional context in comments.

4 Comments

It says null given probably failed to connect somewhere further up the spaghetti and and it was never checked. Or based on the code, never tried to connect at all.
I wonder why this line didn't throw an error? $r = mysql_query($dbc, $q);
Well that one is backwards for a start, it should be $q first and $dbc second. I don't want to think about why it doesn't work, the whole thing is an abomination.
@Leigh Yeah, makes you wonder why people don't visit the documentation and take time to try to learn things before making a bowl of spaghetti.
0

On line 123 of your example, you have $rf = mysqli_query ($dbc, $qf); Parameter #1 is $dbc, the MySQL connection object. The error message is stating that the connection object is null, which is true - it's not declared anywhere in your script.

Comments

0

Well,

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home5/virtua15/public_html/gatewayaviation/pages/register.inc.php on line 182

is because you cant use mysqli_query ($dbc, $qf); when $dbc is not a return from mysql_connect or mysql_init because it expects a link as the first parameter and those return the link it needs.

this is also why you are getting your second error. The mysqli is not returning anything to $rf.

I would suggest refactoring this entire page. Start with giving variables meaningful names, escape your SQL string params to help avoid injection.

Clear up those warnings and give it another shot.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.