0

データベースに呼び出されたフィールドがありurlOneます。値としてURLがある場合にのみhtmlをエコーし​​たいと思います。これが私のコードです:

$id = $_REQUEST['id'];
$query = "SELECT * FROM sites WHERE id = $id LIMIT 1";
$result = mysql_query($query);
$url = $row['urlOne'];
while($row = mysql_fetch_assoc($result)){
    echo "<section class='prop-desc'>";
    echo $desc;
    echo "</section>";
    $result = mysql_query("SELECT * FROM sites WHERE $id LIMIT 1");
    if(!empty($row['urlOne'])){
        echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>"
    }
}
4

2 に答える 2

2

Rab Nawazの答えは機能しましたが、実際には正しくありません。

mysql_*機能は維持されなくなり、コミュニティは非推奨プロセスを開始しまし代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。

決定できない場合は、この記事が選択に役立ちます。ただし、PDOはさまざまな種類のRDBMSで動作しますが、MySQLiは特定のRDBMS用に作成されていることを知っておく必要があります。PDOを使用する場合は、このチュートリアルに従うことをお勧めします。

特定のケースでは、コードは次のようになります。-

$dsn = 'mysql:dbname=dbname;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $db = new PDO($dsn, $user, $password);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$id = someMethodOfValidation($_POST['id']);

注:-具体的には$_POSTまたは$_GETを使用する必要があります。$ _REQUESTはどちらからでも発生する可能性があるため、入力の送信元を常に把握しておく必要があります。

ユーザー入力は常に検証する必要があります。メソッドを使用すると、SQLインジェクションを広く利用できるためsomeMethodOfValidation()、予想される入力に合わせて書き込む必要のあるビットが残ります。あなたの場合、整数値を期待しているように見えるので、検証はと同じくらい簡単である可能性があります$id = (int)$_POST['id'];

SQLインジェクションについて話すとき、リトルボビーテーブルの話をするのは伝統的であるため、ここにそれがあります:-

ここに画像の説明を入力してください

コードを続行するには:-

$stmt = $db->prepare("SELECT * FROM sites WHERE id=:id");
$stmt->execute(array(':id' => $id));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($rows as $row){
    if(!empty($row['urlone']){
        echo "<h4 class='cta'><a href='{$row['urlone']}'>Launch Site</a></h4>";
}

上記のコードは安全ではなく、ライブサーバーで使用してはならないことを強調することはできません。mysql_*関数の使い方をわざわざ習得しないでください。時間を無駄にすることになります。PDOは習得するのが難しくなく、実際、一度コツをつかめば非常に簡単です。上記にリンクされているチュートリアルは、PDOを正常に使用する方法を理解するのに役立ちます。

于 2012-07-10T08:21:57.730 に答える
0

最初。;エコーステートメントの最後で見逃しました。コピー&ペーストの問題かどうかはわかりません。

2番目。$urlをチェックしてみませんか。$url印刷がすべての場合

if(!empty($url)){
echo "<h4 class='cta'><a href='$url'>Launch Site</a></h4>";
}
于 2012-07-09T19:02:43.220 に答える