0

データベース内のデータからドロップダウン ボックスに入力しようとしていますが、機能していないようです。データベースには読み取るためのデータがありませんが、あるというエラーが渡されます。以下は、それを機能させるために使用したスクリプトです。

    <?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>

ソース コードを表示すると、次のようなエラーが表示されます。オプション ボックスの内容があるべき場所にエラーが表示されます。

警告: mysqli_query() は、パラメーター 1 が mysqli であると想定し、 182行目の/home5/virtua15/public_html/gatewayaviation/pages/register.inc.phpで指定された null警告: mysqli_num_rows() は、パラメーター 1 が mysqli_result であると想定し、/で指定された null home5/virtua15/public_html/gatewayaviation/pages/register.inc.php 184行目


Please a new airport first.
4

3 に答える 3

2

mysql_* または mysqli_* 関数のいずれかを使用しますが、両方を使用することはできません。後者を選択して、準備されたステートメントについて学ぶことをお勧めします: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

問題は、変数が mysql リソースまたは null$dbcである可能性が最も高く、mysqli リソースではないため、それを mysqli_* 関数に渡すと失敗することです。有効なリソースがあることを確認して確認するには、次の方法があります。

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

問題を解決するには、mysqliのみ$dbcを使用するようにコードを再構築し、有効な mysqli リソースであることを確認する必要があります。

于 2012-08-01T18:08:49.503 に答える
0

例の123行目には、$rf = mysqli_query ($dbc, $qf);パラメータ#1が$dbcMySQL接続オブジェクトであることがあります。エラーメッセージは、接続オブジェクトがnullであると述べています。これはtrueです。スクリプトのどこにも宣言されていません。

于 2012-08-01T18:09:31.160 に答える
0

良い、

警告: mysqli_query() は、パラメーター 1 が mysqli であると想定します。182 行目の /home5/virtua15/public_html/gatewayaviation/pages/register.inc.php で指定された null です。

mysqli_query ($dbc, $qf); を使用できないためです。$dbc が mysql_connect または mysql_init からの戻り値ではない場合。これは、最初のパラメーターとしてリンクが必要であり、それらが必要なリンクを返すためです。

これが、2 番目のエラーが発生する理由でもあります。mysqli は $rf に何も返していません。

このページ全体をリファクタリングすることをお勧めします。変数に意味のある名前を付けることから始め、SQL 文字列パラメーターをエスケープして、インジェクションを回避します。

これらの警告をクリアして、もう一度やり直してください。

于 2012-08-01T18:13:04.143 に答える