2016-04-10 50 views
-3

MySQLのデータをPHPのWebページに表示しようとしましたが、データが表示されません。MySQLのデータがPHPのWebページに表示されない

私は変数searchtermsearchtypeをHTMLコードで上位に宣言しています。 HTMLコードには、ドロップダウンメニューのオプションと、ユーザーが検索するオプションのみがあります。

ただし、コードを実行すると、データは表示されません。私が得るのは、「発見されたプロジェクトの数」です。これは、データが表示されることを意味します。

私が持っている完全なHTMLコードとPHPコードは以下のとおりです。

<html> 
    <body> 
     <h1>Search</h1> 
     <form action="list_projects.php" method="POST"> 
      <p>Choose Search Type: <br /></p> 
      <select name="searchtype"> 
       <option value="projectNo">Project Number</option> 
       <option value="pjname">Project Name</option> 
       <option value="city">Project City</option> 
      </select> 
      <br /> 
      <p>Enter Search Term: </p> 
      <input name="searchterm" type="text" size="20"/> 
      <br /> 
      <input type="submit" name="submit" value="Search"/> 
     </form> 

     <?php 
      $hostname='mysql.uniwebsite.ac.uk'; 
      $database='somedatabase'; 
      $username='uniusername'; 
      $password='unipassword'; 

      $link = mysqli_connect($hostname, $username, $password); 
      if (!$link) { 
       die('Connection failed: ' . mysqli_error()); 
      } 

      $searchtype=$_POST['searchtype']; 
      $searchterm=trim($_POST['searchterm']); 
      if (!$searchtype || !$searchterm) { 
       echo 'No search details. Go back and try again.'; 
       exit; 
      } 

      $query = "select * FROM tables WHERE ".$searchtype." like '%".$searchterm."%'"; 
      $result = mysqli_query($link, $query); 
      $num_results = mysqli_num_rows($result); 

      echo "<p>Number of projects found: ".$num_results."</p>"; 
      for ($i=0; $i <$num_results; $i++) { 
       $row = mysqli_fetch_assoc($result); 
       echo "<p><strong>".($i+1).". Project Number: "; 
       echo htmlspecialchars(stripslashes($row['projectNo'])); 
       echo "</strong><br />Project Name: "; 
       echo stripslashes($row['pjname']); 
       echo "<br />Project City: "; 
       echo stripslashes($row['city']); 
       echo "</p>"; 
      } 
      $mysqli_free_result($result); 
      $mysqli_close($link); 

     ?> 
    </body> 
</html> 

次のエラーは、私が上でエラー報告の電源を入れたとき、私は何を得るです:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/list_projects.php on line 39 
Number of projects found: 


Notice: Undefined variable: mysqli_free_result in /home/list_projects.php on line 52 

Fatal error: Function name must be a string in /home/list_projects.php on line 52 
+2

あなたはMySQL APIを混在させていますが、今のところあなたのコードを壊しています。 POST配列の値があるかどうかは不明です。 –

+0

@ Fred-ii- MySQL APIの混在が見当たらず、コードで修正されました – smitthy

+0

あなたの元の投稿は異なっていますhttp://stackoverflow.com/revisions/36536087/1 - '$ link = mysql_connect($ホスト名、$ユーザ名、$パスワード); if(!$ link){ die( 'Connection failed:'。mysql_error()); ' –

答えて

0

あなたの方法であなたを助けるためにいくつかの改善コード、Change:と​​ラインを参照してください。

<html> 
    <body> 
     <h1>Search</h1> 
     <form action="list_projects.php" method="POST"> 
      <p>Choose Search Type: <br /></p> 
      <select name="searchtype"> 
       <option value="projectNo">Project Number</option> 
       <option value="pjname">Project Name</option> 
       <option value="city">Project City</option> 
      </select> 
      <br /> 
      <p>Enter Search Term: </p> 
      <input name="searchterm" type="text" size="20"/> 
      <br /> 
      <input type="submit" name="submit" value="Search"/> 
     </form> 

     <?php 
      // Change 1: Enable error reporting 
      error_reporting(E_ALL); 
      ini_set('display_errors', 1); 

      $hostname='mysql.uniwebsite.ac.uk'; 
      $database='somedatabase'; 
      $username='uniusername'; 
      $password='unipassword'; 

      // Change 2: Add $database 
      $link = mysqli_connect($hostname, $username, $password, $database); 

      // Change 3: Literally copy&paste error checking from mysqli_query docs page 
      /* check connection */ 
      if (mysqli_connect_errno()) { 
       printf("Connect failed: %s\n", mysqli_connect_error()); 
       exit(); 
      } 

      // Homework: Check for legal values in more detail 
      $searchtype=$_POST['searchtype']; 
      $searchterm=trim($_POST['searchterm']); 
      if (!$searchtype || !$searchterm) { 
       echo 'No search details. Go back and try again.'; 
       exit; 
      } 

      // Homework: Use prepared statements to avoid sql injection 
      $query = "select * FROM tables WHERE ".$searchtype." like '%".$searchterm."%'"; 

      // Change 4: Error checking 
      if ($result = mysqli_query($link, $query)) 
      { 
       $num_results = mysqli_num_rows($result); 

       echo "<p>Number of projects found: ".$num_results."</p>"; 
       for ($i=0; $i <$num_results; $i++) { 
        $row = mysqli_fetch_assoc($result); 
        echo "<p><strong>".($i+1).". Project Number: "; 
        echo htmlspecialchars(stripslashes($row['projectNo'])); 
        echo "</strong><br />Project Name: "; 
        echo stripslashes($row['pjname']); 
        echo "<br />Project City: "; 
        echo stripslashes($row['city']); 
        echo "</p>"; 
       } 

       // Change 5.1: Remove $ 
       mysqli_free_result($result); 
      } else { 
       printf("Error: %s\n", mysqli_error($link)); 
      } 

      // Change 5.2: Remove $ 
      mysqli_close($link); 
     ?> 
    </body> 
</html> 
関連する問題