Как передать более одной переменной через URL в php? - PullRequest
1 голос
/ 04 февраля 2010

Я пытаюсь передать несколько переменных в URL в PHP, чтобы получить некоторую информацию, но я не думаю, что это работает.

$allowedFunctions = array(
   'returnAllProducts',
   'refreshCurrentProduct'

);


$IDNUM = $_GET[ 'idNum' ];


$functionName = $_GET[ 'func' ];

if( in_array( $functionName, $allowedFunctions ) && function_exists( $functionName ) )
{
    $functionName();
}

Тогда у меня есть функция refreshCurrentProduct:

function refreshCurrentProduct() { 
$dbh=mysql_connect ("DATABASE","USER", "PASS") or die('I cannot connect to the database because:'. mysql_error());

mysql_select_db("TABLE");

$query = "SELECT `ID` FROM `PRODUCTS`";

$result = mysql_query($query) or die('Query failed:'.mysql_error());

$DB_STOCK = mysql_query("SELECT `STOCK` FROM `PRODUCTS`") or die('Query failed:'.mysql_error());

$DB_SHORT = mysql_query("SELECT `MYNAME` FROM `PRODUCTS`") or die('Query failed:'.mysql_error());

$DB_LONG = mysql_query("SELECT `DESCRIPTION` FROM `PRODUCTS`") or die('Query failed:'.mysql_error());

$DB_PRICE = mysql_query("SELECT `PRICE` FROM `PRODUCTS`") or die('Query failed:'.mysql_error());

$DB_SHIP = mysql_query("SELECT `SHIPPING` FROM `PRODUCTS`") or die('Query failed:'.mysql_error());


$ID = mysql_result($result,$IDNUM,"ID");
    $STOCK = mysql_result($DB_STOCK,$IDNUM,"STOCK");
    $SHORT = mysql_result($DB_SHORT,$IDNUM,"MYNAME");
    $LONG = mysql_result($DB_LONG,$IDNUM,"DESCRIPTION");
    $PRICE = mysql_result($DB_PRICE,$IDNUM,"PRICE");        
    $SHIP = mysql_result($DB_SHIP,$IDNUM,"SHIPPING");

    echo '
    //echo $STOCK, $SHORT, etc....

    ';
 }

URL-адрес, который я использую: products.php?func=refreshCurrentProduct&idNum=4

Теоретически, это должно отображаться из строки с 4, но отображает только информацию из первого ряда. Если я сделаю $IDNUM=5 внутри функции, она отобразит 5-ю строку, поэтому что-то не так с тем, как я передаю информацию.

Кроме того, как мне создать (например) $ STOCK без необходимости иметь столько кода в $ DB_STOCK? Кажется, должен быть лучший путь ...

Ответы [ 3 ]

2 голосов
/ 04 февраля 2010

Почему бы вам не сделать (как уже упоминалось, $IDNUM не входит в сферу функции):

function refreshCurrentProduct() { 
    $dbh=mysql_connect ("DATABASE","USER", "PASS") or die('I cannot connect to the database because:'. mysql_error());
    mysql_select_db("TABLE");

    // If $_GET['idNum'] is not a number use 0
    $rowNumber = is_numeric($_GET['idNum']) ? $_GET['idNum'] : 0;

    $query = "SELECT ID, STOCK,  MYNAME, DESCRIPTION, PRICE, SHIPPING FROM `PRODUCTS`";
    $result = mysql_query($query);

    if(mysql_data_seek($result,  $rowNumber)) {
        // The result set has indeed at least $rowNumber rows

        $row = mysql_fetch_assoc($result);

        echo $row['ID'];
        echo $row['STOCK'];
        // ... etc ....
    }
    else {
        echo "No such row!";
    }
}

Нет необходимости попадать в базу данных шесть раз! Конечно, вам нужно добавить обработку ошибок.

Btw. параметр idNum совпадает с ID записи в базе данных? Если это так, вы можете еще больше упростить:

function refreshCurrentProduct() { 
    $dbh=mysql_connect ("DATABASE","USER", "PASS") or die('I cannot connect to the database because:'. mysql_error());
    mysql_select_db("TABLE");

    // If $_GET['idNum'] is not a number use 0
    $id = is_numeric($_GET['idNum']) ? $_GET['idNum'] : 0;

    $query = "SELECT ID, STOCK,  MYNAME, DESCRIPTION, PRICE, SHIPPING FROM `PRODUCTS` WHERE ID = $id";
    $result = mysql_query($query);

    if (mysql_num_rows($result) == 0) {
       echo "No rows found, nothing to print";
       return;
    }

    $row = mysql_fetch_assoc($result);

    echo $row['ID'];
    echo $row['STOCK'];
    // ... etc ....
}
2 голосов
/ 04 февраля 2010

Взгляните на call_user_func .

$functionName = $_GET[ 'func' ];

if( in_array( $functionName, $allowedFunctions ) && function_exists( $functionName ) )
{
    call_user_func($functionName);
}

Кроме того, если я правильно читаю ваш код, вы можете получить всю информацию в одном запросе:

$query = "SELECT `ID`,`STOCK`,`MYNAME`,`DESCRIPTION`,`PRICE`,`SHIPPING` FROM `PRODUCTS`";
$result = mysql_query($query) or die('Query failed:'.mysql_error());
while ($row = mysql_fetch_assoc($result)) {
    $ID=$row['ID'];
    //etc.
}
1 голос
/ 04 февраля 2010

Ваша переменная $IDNUM выходит за рамки вашей функции. Вам нужно либо передать это в свою функцию как переменную, либо вы сможете установить ее внутри функции, установив ее внутри.

function refreshCurrentProduct() { 
  $IDNUM = $_GET[ 'idNum' ];
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...