2

(問題が長すぎるために非常に詳細に読まれていません:「私の推測では、MYSQL_FETCH_ARRAYを間違って使用していると思います。」)

こんにちは!次のコードの目的は、データベースで基本的な検索を行うことです。データはフォームによって渡されます。私が使用していたチュートリアルは、「Frost of Slunked.com」によって作成されました。これは、基本的なレジスタ/ログインphp MySQLチュートリアルであり、完全に機能しました。選択したデータに新しいデータを追加するために、なんとか目覚めたテーブルアップデータ関数とフォーム送信を記述できました(これは意図したとおりに機能します)。

config.php-MySQLサーバーに接続し、データベースを選択し、セッションを開始し、functions.phpを必要とします(作成者のコメントを含む)

<?php
/*****************************
    File: includes/config.php
    Written by: Frost of Slunked.com
    Tutorial: User Registration and Login System
******************************/
// start the session before any output.
session_start();

// Set the folder for our includes
$sFolder = ''; 

/***************
    Database Connection 
        You will need to change the user (user) 
        and password (password) to what your database information uses. 
        Same with the database name if you used something else.
****************/
mysql_connect('localhost', 'myusername', 'mypassword') or trigger_error("Unable to connect to the database: " . mysql_error());
mysql_select_db('tormex') or trigger_error("Unable to switch to the database: " . mysql_error());

/***************
    password salts are used to ensure a secure password
    hash and make your passwords much harder to be broken into
    Change these to be whatever you want, just try and limit them to
    10-20 characters each to avoid collisions. 
****************/
define('SALT1', '24859f@#$#@$');
define('SALT2', '^&@#_-=+Afda$#%');

// require the function file
require_once 'functions.php';

// default the error variable to empty.
$_SESSION['error'] = "";

// declare $sOutput so we do not have to do this on each page.
$sOutput="";
?>

関数.php-複数の関数(ログイン、createRide、登録など)があります。関数の目的のほとんどは、送信されたHTMLフォームから値を取得し、必要なアクションを維持することです。ここでは、searchRide関数(おそらくエラーがあるか、少なくとも何かを実行する必要があります)とcreateRideについてのみ説明します。正常に動作している関数。

<?php ...

unction searchRide($pWhen_min, $pWhen_max, $pFrom, $pTo){
    if (!empty($pWhen_min) && !empty($pWhen_max) && !empty($pFrom) && !empty($pTo)) {
        global $sql2, $query2;
        $sql2 = "SELECT * FROM ride WHERE `from` ='$pFrom' AND `to` = '$pTo' AND `when` >= '$pWhen_min' AND `when` <= '$pWhen_max' ";
        $query2 = mysql_query($sql2) or trigger_error("Query Failed: " . mysql_error());
    }
}
function createRide($pFrom, $pTo, $pWhen, $pSeats, $pPrice, $pCar){
    if (!empty($pFrom) && !empty($pTo) && !empty($pWhen) && !empty($pSeats) && !empty($pPrice) && !empty($pCar)){
        $sql = "SELECT id FROM users WHERE username= '" . $username . "' LIMIT 1";
        $result = mysql_query($sql);
        if(!$result) {
            trigger_error("ELKURTAD " . mysql_error());
        }
        $row = mysql_fetch_array($result);
        $sql = "INSERT INTO ride (`from`, `to`, `when`, `seats`, `price`, `car`, `u_id`)
        VALUES ('" . $pFrom . "', '" . $pTo . "', '" . $pWhen . "', 
        '" . $pSeats . "', '" . $pPrice . "', '" . $pCar . "', '" . $result . "');";


        $query = mysql_query($sql) or trigger_error("Query Failed: " . mysql_error());

        if ($query) {
            return TRUE;
        } 
    }
    return FALSE;
}

...?>

searchRide.php-検索フィルター値の取得専用の変数に値があるかどうかを確認します。(elseステートメント内)値がない場合、フォームは送信されず、searchRideフォームが表示され、結果がsearchRide.phpの変数を渡します($ _SERVER ['PHP_SELF'])

<?php
require_once 'config.php';

$sOutput .= '<div id="searchRide-body">';

if (isset($_GET['action'])) {
    switch (strtolower($_GET['action'])) {
        case 'searchride':
        if (isset($_POST['when_min']) && isset($_POST['when_max']) && isset($_POST['from']) && isset($_POST['to'])) {
            if (searchRide($_POST['when_min'], $_POST['when_max'], $_POST['from'], $_POST['to'])) {
                while($row = mysql_fetch_array($query2)){
                    $sOutput .= "' ID: '" .$row['id'] . "' <br />
                    When: '" . $row['when'] . "' <br />
                    From: '" . $row['from'] . "' <br />
                    To: '" . $row['to'] . "' <br />
                    Seats left: '" . $row['seats'];

                }
            }
        }
    }
}else{
    if (isset($_SESSION['error'])) {
        $sError = '<span id="error">' . $_SESSION['error'] . '</span><br />';
    }

    $sOutput .= '<h2>Search for rides</h2>
        ' . $sError . '
        <form name="searchride" method="post" action="' . $_SERVER['PHP_SELF'] . '?action=searchride">
            From: <input type="text" name="from" value=* /><br />
            To: <input type="text" name="to" value=* />
            When_min: <input type="text" name="when_min" value=* />
            When_max: <input type="text" name="when_max" value=* />
            <br /><br />
            <input type="submit" name="submit" value="Search" />
        </form>
        <br />
        <h4>Would you like to <a href="index.php">Go back?</a></h4>';
}   
echo $sOutput . "<br />";

echo "TEST string" . "<br />";
echo $query2 . " query2<br /> ";
echo $sql2 . " sql2<br />";
echo $row . "<br />";
?>

このコードの最後に、searRideフォームが送信された後に値をチェックするために使用されるいくつかの印刷された変数を見ることができます。次のデータでデータベースを更新し、phpMyAdminで正確な値を確認して、既存のデータで検索をテストできるようにしました。

差出人:TEST01宛先:TEST02時期:500席:5価格:7車:ボルボ

searchRideフォームで送信されたテストデータ:From:TEST01 To:Test02 When_min:1 Whn_max:3000

searchRideフォームの[検索]ボタンを押した後、次の結果が表示されます(ブラウザーに表示される内容)。

(s出力変数

テスト書き込みテキスト

リソースID#5(query2変数

SELECT * FROM ride WHERE from='TEST01' AND to='TEST02' AND when> = '1' AND when<= '5000'(sql2変数

(行変数

この後、phpMyAdmin SQLコマンドラインにSQLクエリを挿入し、検索したデータを取得しました。

私自身の知識とグーグル、php.net、w3chools.comでのさまざまな検索を使って、何が問題になるのかを何度も調べようとしていました。私の推測では、MYSQL_FETCH_ARRAYを間違って使用しています。

4

1 に答える 1

1

次の条件は機能しません

if (searchRide($_POST['when_min'], $_POST['when_max'], $_POST['from'], $_POST['to'])) {

searchRide関数から値を返さないため、条件に入るにはtrueを返す必要があります。

于 2012-12-07T05:56:21.987 に答える