1

テーブル「レポート」から「id」列を取得して、一意の値を取得し、リンク可能にする必要があります。

要素のリンクの形式は次のとおりです: http://www.mysite.com/id , (coma を含む)

id列から情報を取得し、結果でクリックできるようにする方法を教えてください。

<?php



    $MySQLPassword = "*****";   
    $HostName = "***";  
    $UserName = "***";
    $Database = "****";

    mysql_connect($HostName,$UserName,$MySQLPassword)
    or die("ERROR: Could not connect to database!");
    mysql_select_db($Database) or die("cannot select db");


    $default_sort = 'ID';
    $allowed_order = array ('name','description');

    if (!isset ($_GET['order']) || 
        !in_array ($_GET['order'], $allowed_order)) {
        $order = $default_sort;
    } else {
        $order = $_GET['order'];
    }


    if (isset($_GET['keyword'])) {

            if(!$_GET['keyword']) {
              die('<p>Please enter a search term.</p>');
        }     





/////////////////////////HERE IS THE BEGINING OF CODE WHERE I THINK SHOULD BE THE PROBLEM ////////////////////////////

    $tables = 'reports';
    $return_fields = 'name organizer_id no_pages publication_date price';
    $check_fields = 'name description';


    $query_text = $_GET['keyword'];

    $clean_query_text =cleanQuery($query_text);

    $newquery=bq_simple ($return_fields, $tables, $check_fields, $clean_query_text);
    $newquery = $newquery . " ORDER BY $order;";

    $result = mysql_query($newquery) or die(mysql_error());


    $numrows = mysql_num_rows($result);
    if ($numrows == 0) {
        echo "<H4>No data to display!</H4>";
        exit;
    }
    echo    "<p>Your search '$query_text' returned ".$numrows. " results.</p>\n";
    echo    "<p>Click on the headings to sort.</p>\n";

    $row = mysql_fetch_assoc ($result);
    echo "<TABLE border=1>\n";
    echo "<TR>\n";
    foreach ($row as $heading=>$column) {


        echo "<TD><b>";
        if (in_array ($heading, $allowed_order)) {
            echo "<a href=\"{$_SERVER['PHP_SELF']}?order=$heading&keyword=$query_text\">$heading</a>";
        } else {
            echo $heading;
        }                
        echo "</b></TD>\n";
    }
    echo "</TR>\n";

    $results = mysql_query("SELECT id, name FROM reports WHERE id = $id") or die(mysql_error());
    while ($row = mysql_fetch_assoc ($result)) {
        echo "<TR>\n";

        echo '<a href="mysite.com/' . $row['id'] . ',">' . $row['name'] . '</a>';
        echo "</TR>\n";
    }
    echo "</TABLE>\n";
    }

////////////////////////FINISH OF THE CODE WITH PROBLEM ////////////////////////////

/* * * * * * * * * * * * * *  F U N C T I O N S * * * * * * * * * * * */

    function cleanQuery($string)
    {
      $string = trim($string);
      $string = strip_tags($string); // remove any html/javascript.

      if(get_magic_quotes_gpc())  // prevents duplicate backslashes
      {
        $string = stripslashes($string);
      }
      if (phpversion() >= '4.3.0')
      {
        $string = mysql_real_escape_string($string);
      }
      else
      {
        $string = mysql_escape_string($string);
      }
      return $string;
    }


function bq_handle_shorthand($text) {
    $text = preg_replace("/ \+/", " and ", $text);
    $text = preg_replace("/ -/", " not ", $text);
    return $text;
}


function bq_explode_respect_quotes($line) {
        $quote_level = 0;   #keep track if we are in or out of quote-space
        $buffer = "";

        for ($a = 0; $a < strlen($line); $a++) {
                if ($line[$a] == "\"") {
                        $quote_level++;
                        if ($quote_level == 2) { $quote_level = 0; }
                }
                else {
                        if ($line[$a] == " " and $quote_level == 0) {
                                $buffer = $buffer . "~~~~";   #Hackish magic key
                        }
                        else {
                                $buffer = $buffer . $line[$a];
                        }
                }

        }

    $buffer = str_replace("\\", "", $buffer);

        $array = explode("~~~~", $buffer);
        return $array;
}


function bq_make_subquery($fields, $word, $mode) {

    if ($mode == "not") {
        $back = " LIKE '%$word%'))";
    }
    else {
        $back = " LIKE '%$word%')";
    }

    if ($mode == "not") {
        $front = "(NOT (";
        $glue = " LIKE '%$word%' AND ";
    }
    else {
        $front = "(";
        $glue = " LIKE '%$word%' AND ";
    }

    $text = str_replace(" ", $glue, $fields);
    $text = $front . $text . $back;

    return $text;
}



function bq_make_query($fields, $text) {

    $text = strtolower($text);


    $text = bq_handle_shorthand($text);


    $wordarray = bq_explode_respect_quotes($text);

    $buffer = "";
    $output = "";

    for ($i = 0; $i<count($wordarray); $i++) {
        $word = $wordarray[$i];

        if ($word == "and" or $word == "not" and $i > 0) {
            if ($word == "not") {


                $i++;
                if ($i == 1) {   #invalid sql syntax to prefix the first check with and/or/not
                    $buffer = bq_make_subquery($fields, $wordarray[$i], "not");
                }
                else {
                    $buffer = " AND " . bq_make_subquery($fields, $wordarray[$i], "not");
                }
            }
            else {
                if ($word == "and") {
                    $i++;
                    if ($i == 1) {
                        $buffer = bq_make_subquery($fields, $wordarray[$i], "");
                    }
                    else {

                        $buffer = " AND " . bq_make_subquery($fields, $wordarray[$i], "");
                    }
                }
                else {
                    if ($word == "and") {
                        $i++;
                        if ($i == 1) {
                            $buffer = bq_make_subquery($fields, $wordarray[$i], "");
                        }
                        else {

                            $buffer = " AND " . bq_make_subquery($fields, $wordarray[$i], "");
                        }
                    }
                }
            }
        }
        else {
            if ($i == 0) {  # 0 instead of 1 here because there was no conditional word to skip and no $i++;
                $buffer = bq_make_subquery($fields, $wordarray[$i], "");
            }
            else {
                $buffer = " AND " . bq_make_subquery($fields, $wordarray[$i], "");
            }
        }
        $output = $output . $buffer;
    }
    return $output;
}



function bq_simple ($return_fields, $tables, $check_fields, $query_text) {


    $return_fields = str_replace(" ", ", ", $return_fields);
    $tables = str_replace(" ", ", ", $tables);


    $query = "SELECT $return_fields FROM $tables WHERE ";
    $query = $query . bq_make_query($check_fields, $query_text);

    #
    # Uncomment to debug
    #

    return $query;
}



?>
4

1 に答える 1

0

あなたのコードにはクエリが表示されませんが、一般的な考え方は次のとおりです。

$result = mysql_query("SELECT id, name FROM reports WHERE field = value") or die(mysql_error());

while ($row = mysql_fetch_assoc($result)) {
    echo '<a href="mysite.com/' . $row['id'] . ',">' . $row['name'] . '</a>';
}

mysql_* 関数は非推奨であることに注意してください。mysqli またはPDOを使用する必要があります。

于 2013-09-11T12:00:08.337 に答える