0

echo<<<_END コンストラクト内で変数をリンクに設定する際に問題が発生しています

これが私のコードです:

<?php //submit_build.php

include_once 'header.php';
require_once 'login_builds.php';
include_once 'functions.php';

$db_server = mysql_connect($db_hostname, $db_username, $db_password);

mysql_select_db($db_database)
    or die("Unable to select database: " . mysql_error());

?>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-us" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Weapon Build Creator</title>

<link href="styles/main.css" rel="stylesheet" type="text/css" />

<style>

.bannerdiv
{
    display: block;
    width: 620px;
    height;
    position: static;
    background-image:url('images/news_banner_072813.jpg');
    text-align: center; 
    border-radius: 15px;
    moz-border-radius: 15px;
    moz-box-shadow: 0 0 30px 5px #999;
    box-shadow: 0 0 30px 5px #999;
    height: 300px;
    margin-left: 25px;

}
.form
{
    display: block;
    width: 670px;
    left: 50%;
    margin-left: -335px;
    margin-top: 100px;
    float: left;
    position: absolute;
    background-image:url('images/greystripe_bg.jpg');
    text-align: center; 
    border-radius: 15px;
    moz-border-radius: 15px;
    moz-box-shadow: 0 0 30px 5px #999;
    box-shadow: 0 0 30px 5px #999;
    height: 1000px;
}


</style>

</head>

<body style="background-image: url('images/bg.jpg')">

<div id="form" class="form">
    <div class="newsdiv"><p class="title">Search / Browse Builds</p>
        <p class="newsbody">&nbsp;Build your search query by inputting at least 1 of 
        the fields below.</p>
    <form method="post" action="search_query.php"><p class="timestamp">
        <input name="buildname" type="text" style="vertical-align:middle">&nbsp;&nbsp; Build Name</p>
        <p class="timestamp">
        <select name="weapon" class="dropdown" style="vertical-align:middle">
        <option></option>
        <option>Acrid</option>
        <option>Afuris</option>
        <option>Akbolto</option>
        <option>Aklato</option>
        <option>Amphis</option>
        <option>Ankyros</option>
        <option>Bo</option>
        <option>Boar</option>
        <option>Bolto</option>
        <option>Boltor</option>
        <option>Braton</option>
        <option>Braton Prime</option>
        <option>Braton Vandal </option>
        <option>Bronco</option>
        <option>Bronco Prime</option>
        <option>Burston </option>
        <option>Ceramic Dagger</option>
        <option>Cronus</option>
        <option>Dark Dagger</option>
        <option>Dark Sword</option>
        <option>Dera</option>
        <option>Despair</option>
        <option>Dread</option>
        <option>Dual Broncos</option>
        <option>Dual Cleavers</option>
        <option>Dual Ether</option>
        <option>Dual Heat Swords</option>
        <option>Dual Skana</option>
        <option>Dual Zoren</option>
        <option>Ether Daggers</option>
        <option>Ether Sword</option>
        <option>Fang</option>
        <option>Fang Prime</option>
        <option>Flux Rifle</option>
        <option>Fragor</option>
        <option>Furax</option>
        <option>Furis</option>
        <option>Glaive</option>
        <option>Gorgon </option>
        <option>Grakata</option>
        <option>Gram</option>
        <option>Hate</option>
        <option>Heat Dagger</option>
        <option>Heat Sword</option>
        <option>Hek</option>
        <option>Hikou</option>
        <option>Ignis</option>
        <option>Jaw Sword</option>
        <option>Kestrel</option>
        <option>Kogake</option>
        <option>Kraken</option>
        <option>Kunai</option>
        <option>Lanka</option>
        <option>Lato</option>
        <option>Lato Prime</option>
        <option>Lato Vandal</option>
        <option>Latron</option>
        <option>Latron Prime</option>
        <option>Lex</option>
        <option>Machete</option>
        <option>Mire</option>
        <option>MK1-Braton</option>
        <option>Ogris</option>
        <option>Orthos</option>
        <option>Orthos Prime</option>
        <option>Pangolin Sword</option>
        <option>Paris</option>
        <option>Paris Prime</option>
        <option>Plasma Sword</option>
        <option>Prova</option>
        <option>Reaper Prime</option>
        <option>Scindo</option>
        <option>Seer</option>
        <option>Sicarus</option>
        <option>Skana</option>
        <option>Skana Prime</option>
        <option>Snipetron</option>
        <option>Snipetron Vandal</option>
        <option>Sobek</option>
        <option>Spectra</option>
        <option>Strun</option>
        <option>Supra</option>
        <option>Torid</option>
        <option>Twin Vipers</option>
        <option>Vasto</option>
        <option>Viper</option>
        <option>Vulkar</option>
        </select>&nbsp;&nbsp; Weapon</p>
        <p class="timestamp">
        <select class ="dropdown" name="category" style="vertical-align:middle">
        <option></option>
        <option>Defensive</option>
        <option>Balanced</option>
        <option>High DPS</option>
        </select>&nbsp;&nbsp; Category</p>
        <p class="timestamp">
        <input name="id" type="text" style="vertical-align:middle">&nbsp;&nbsp; 
        Weapon ID Number</p>
        <p class="timestamp">
        <input name="search" type="submit" value="Search Builds">&nbsp;</p>
        <p class="timestamp">



        <p class="title">SEARCH RESULTS</p>

<?php //search result table

if (isset($_POST['buildname']) ||
    isset($_POST['weapon']) ||
    isset($_POST['category']) ||
    isset($_POST['id']))

{

$sqlArray = array();

    if(!empty($_POST['buildname'])){
        $sqlArray[] = "buildname='" . mysql_real_escape_string($_POST['buildname']) . "'";
    }

    if(!empty($_POST['weapon'])){
        $sqlArray[] = "weapon='" . mysql_real_escape_string($_POST['weapon']) . "'";
    }

    if(!empty($_POST['category'])){
        $sqlArray[] = "category='" . mysql_real_escape_string($_POST['category']) . "'";
    }

    if(!empty($_POST['id'])){
        $sqlArray[] = "id='" . mysql_real_escape_string($_POST['id']) . "'";
    }

    $searchstring = "SELECT buildname,weapon,category,id,author,buildname FROM weapons " .
                    "WHERE " . implode(' AND ', $sqlArray);

$result = mysql_query($searchstring);

if (!$result) die ("Database access failed: " . mysql_error());

$rows = mysql_num_rows($result);

echo<<<_END

        <table class="searchresult">
        <tr style="width:100%">
        <td class="newsbody" style="width:5%">ID</td>
        <td class="newsbody" style="width:40%">Build Name</td>
        <td class="newsbody" style="width:20%">Weapon</td>
        <td class="newsbody" style="width:20%">Category</td>
        <td class="newsbody" style="width:15%">Author</td>
        </tr>
_END;

for ($j = 0; $j < $rows; ++$j)
{
$row = mysql_fetch_row($result);
echo<<<_END

        <tr style="width:100%">
        <td class="newsbody" style="width:5%">$row[3]</td>
        <td class="newsbody" style="width:40%"><a href="view_build.php?buildname=$row[5]">$row[0]</a></td>
        <td class="newsbody" style="width:20%">$row[1]</td>
        <td class="newsbody" style="width:20%">$row[2]</td>
        <td class="newsbody" style="width:15%">$row[4]</td>
        </tr>

_END;
}

echo<<<_END

        </table>

_END;

}

?>

</form>
<p><br /><br /><br /><br /><br /></p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p>&nbsp;</p>
        <p><br /></p>
    </div>

</body>
</html>

私が問題を抱えているコード行は、コードの下部近くに太字で示されている 236 行目です。

これです:

<td class="newsbody" style="width:40%"><a href="view_build.php?buildname=$row[5]">$row[0]</a></td>

私は基本的に、検索結果に「Dual Broncos」などの値を表示し、view_build.php?buildurl=Dual+Broncos にリンクするテキストの周りにハイパーリンクを設定したいと考えています。

ただし、タグを配置すると、HTML が間違っていると表示されるため、urlencode 関数を適切に挿入する方法がわかりません (テーブル列の終了タグが無効/不要であると表示されます)。

そこで、データベース エントリの時点で urlencode を機能させようとしました。これにより、各オブジェクトには「buildname」と「buildurl」があり、buildurl = urlencode($buildname) となります。このコードは機能し、データベースには「Dual+Broncos」という値が入力されていますが、行を取得してリンクの位置 view_build.php?buildurl=$row[5] に配置すると、エンコードされた URL に含まれる「+」。

これについて何か助けはありますか?または、この機能を別の方法で実行する方法についての提案はありますか?

本当にありがとう!

PS。HTML タグと PHP タグの開始位置と終了位置を確認できるように、コード全体を含めました。

4

2 に答える 2

0

変数を使用して、エンコードされた値をヒアドキュメントの前に格納し、後に挿入します。

$value = urlencode($row[5]);
...
<td class="newsbody" style="width:40%"><a href="view_build.php?buildname=$value">$row[0]</a></td>
于 2013-07-29T15:18:32.853 に答える
0

ループの外側で urlencoding を実行するだけです:

for($j = 0; ...) {
   $encoded = urlencode($row[0]);
   echo <<<EOL

....?buildname=$encoded
EOL;
}

変数関数を使用して、エンコーディングを「インライン化」できます。

$enc = 'urlencode';
echo <<<EOL
 ... ?buildname={$enc($row[0])}
EOL;

しかし、そのようなコードはすぐに完全に保守できなくなり、デバッグが非常に困難になります。

于 2013-07-29T15:18:55.843 に答える