2017-12-01 13 views
0

データベースの各行に対して一意のページを作成しようとしています。私の計画はdictionary.php?word=titleのURLを作成して、その特定のIDの説明とタイトルを表示することです。私のデータベースはid,term_titleそしてterm_descriptionです。私は本当にこだわっていると、私は次のステップは、私が何であるかを知らないPHPを使用したデータベース内の各行の一意のページ

<?php 
    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbname = "dbname"; 

    $conn = mysqli_connect($servername, $username, $password, $dbname); 

    if (!$conn) { 
     die("Cannot connect to database." . mysqli_connect_error()); 
    } 

    if (isset($_GET['id'])) 
    { 
     $id = (int) $_GET['id']; 
     $sql = 'SELECT * FROM dbname WHERE id = $id LIMIT 1 '; 
    } 

$sql = "SELECT * FROM terms"; 
$result = $conn->query($sql); 

mysqli_close($conn); 
?> 

それはPHPに来るとき、私はオーウェン離れる新鮮なんだけど、私は少なくともに管理してきたが、これを行います「私はリンクさせたい、とこれが適切にすべての私の言葉が<li>で列挙されているメインindex.phpファイル(に表示されている各単語に<a href='dictionary.php?=".$row["id"]."'>を追加しましこれは、このために私のコードです:。

するにはどうすればよい
<?php 
    if ($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
     echo "<a href='dictionary.php?=".$row["id"]."'><li class='term'><h4 class='term-title'>" . $row["term_title"]. "</h4></li></a>"; 
    } else { 
    echo "No words in database."; 
    } 
?> 

このユニークなページを作成し、タイトルとそのIDの説明? URLに?word=を追加するにはどうすればよいですか?

私に手伝ってくれてありがとう。

+1

あなたが求めているものは正確ではありませんが、クエリ文字列に単語を追加したい場合は、次のようなものを使用してください: 'echo"

  • test

  • ";' – ajhanna88

    答えて

    1

    あなたは正しい軌道に乗っており、ajhanna88のコメントも正しいです。正しいキー(ここでは「単語」)をURLに含めてください。それ以外の場合は、その値が何であるかをページに伝えずに値を送信します。

    1. あなたが作成したリンクのいずれかをクリックすると、あなたがdictionary.phpする$ _GET [「単語」]に沿って送っている:

      私はカップル他の問題を参照しています。しかし、あなたのdictionary.phpコードでは、 "word"ではなく "id"で単語を検索しています。私はあなたが "天体"のようなものを "1598"のようなもので検索することを期待していると推測していますので、代わりにこれを試してください:

      if(isset($ _ GET ['word'])){ $ word = $ _GET ['word']; $ sql = 'SELECT * FROM dbname WHERE word = $ word LIMIT 1'; }

      BUT!また、セキュリティ上の問題にも注意してください。ユーザーは、ユーザーが望むものを自分のクエリーに入れることができます。 classic illustration of SQL injectionをご覧ください。もう一つの問題

      $word = $conn->real_escape_string($_GET['word']);

      :それを修正するには、これに前述の第2行を変更? という単語を正確にはに探しています。代わりに、大文字小文字を区別しないようにしたいので、 "セマフォ"は引き続き "セマフォ"を生成します。それを行う方法はたくさんあります。私の経験で最も簡単な方法は、それらを比較する前にすべてを小文字に変更することです。

      $word = $conn->real_escape_string(strtolower($_GET["word"]));

      そして、あなたのクエリは次のようなものになります:

      $sql = "SELECT * FROM dbname WHERE word = LOWER('$word') LIMIT 1 ";

    2. 次の$word割り当ては次のようになりますように!さらに下に、$sql変数をSELECT * FROM termsに上書きすると、作業が完全に元に戻されます。ユーザーが検索する単語を提供していない場合は、すべての単語を表示しようとしているようです。それがあなたがしようとしているものなら、その行をelseステートメントに入れてください。

    3. $resultは正常です。今すぐ使用する必要があります。最初のステップは、接続クエリ(if(!$conn)...)をテストし、結果が返ってきたことを確認するときと同じように行うことです。

    4. これらの結果が得られたら(つまり、クエリにLIMIT 1が含まれているため)、その結果を表示することをお勧めします。このプロセスは、リンクを印刷するときとまったく同じです。今回は、結果が1つしかないと予想されます。また、あなたの専門用語で矛盾しないように注意する必要があります

      <?php 
      
      $servername = "localhost"; 
      $username = "root"; 
      $password = ""; 
      $dbname = "dbname"; 
      
      $conn=new mysqli($servername,$username,$password,$dbname); 
      if($conn->connect_errno){ 
          die("Can't connect: ".$conn->connect_error); 
      } 
      ?> 
      <!DOCTYPE html> 
      <html> 
          <head> 
           <title>Dictionary!</title> 
          </head> 
          <body> 
          <?php 
           if(isset($_GET["word"])){ 
            $word = $conn->real_escape_string(strtolower($_GET["word"])); 
            $sql = $conn->query("SELECT * FROM dictionary WHERE word=LOWER('".$word."') LIMIT 1"); 
            if(!$sql){ 
             echo "Sorry, something went wrong: ".$conn->error_get_last(); 
            } else { 
             while($row=$sql->fetch_assoc()){ 
              echo "<h2>".$row["word"]."</h2>"; 
              echo "<p>".$row["definition"]."</p>"; 
             } 
            } 
           } else { 
            $sql = $conn->query("SELECT word FROM dictionary"); 
            if(!$sql){ 
             echo "Sorry, something went wrong: ".$conn->error_get_last(); 
            } else { 
             echo "<p>Here are all our words:</p><ul>"; 
             while($row=$sql->fetch_assoc()){ 
              echo "<li><a href=\"dictionary.php?word=".$row["word"]."\">".$row["word"]."</a></li>"; 
             } 
            } 
            echo "</ul>"; 
           } 
          ?> 
          </body> 
      </html> 
      

    ここで私はあなたのコードから思い付いた本当の基本的なページです。このため、私のMySQLテーブルには、3つのカラム、id,word、およびdefinitionがありました。あなたのURLはwordだったので、私はtermを落としました。私の経験では、同じ用語を使用することをお勧めします。アプリケーションが複雑になると混乱を避けることができます。

    最後に、別のページの作成に関する質問に答えるために、このような単純なページでは、定義とリンクを表示するために別のページは必要ないかもしれません。これらのif/elseブロックを拡張したい場合は、PHPのinclude関数を参照することをお勧めします。

    あなたは素晴らしいスタートを切っています。それをつけろ!

    +0

    エスケープ文字列は依然として注入される可能性があります。より良いパラメータを使用する。 https://stackoverflow.com/questions/2353666/php-is-mysql-real-escape-string-sufficient-for-cleaning-user-input –

    +0

    神の聖母、何の答えですか。私は、すべての単行を軽く指摘してくれてありがとう、私は本当に知っていない言語についての質問をしていますが、私はゆっくりと学んでいます。あなたの答えは私に、それがどのように正しく行われたかについてのかなりのアイデアを与えました。そして、これを書くのに感謝します。私は別のSEOの友好的であると思うので私は別のページを作成するつもりです。私はリンクしたインクルード関数を調べます。多くの、多くのありがとう、ダニエル。 – superladremi

    関連する問題