Nasıl php URL yoluyla birden fazla değişken geçirmek?

3 Cevap php

Ben bazı bilgi almak için PHP bir URL birden çok değişken geçmek için çalışıyorum, ama çalışma sanmıyorum.

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

);


$IDNUM = $_GET[ 'idNum' ];


$functionName = $_GET[ 'func' ];

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

Sonra refreshCurrentProduct işlevi vardır:

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....

    ';
 }

Ben kullanıyorum URL products.php?func=refreshCurrentProduct&idNum=4

Teorik olarak, bu ancak, sadece ilk satırdan bilgi görüntüler, içinde 4 ile satırdan göstermesi gerekir. Ben işlevi içinde bir $IDNUM=5 yaparsanız, o kadar şey ben bilgi aktarmak nasıl yanlış olduğunu, 5 satır gösterecektir.

Ayrıca, nasıl ben $ DB_STOCK çok fazla kod zorunda kalmadan (örneğin) $ STOK oluşturabilirim? Daha iyi bir yolu olmalı var gibi görünüyor ...

3 Cevap

Niye yapmıyorsun (diğerleri zaten belirtildiği gibi, $IDNUM fonksiyonu kapsamında değildir):

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!";
    }
}

Veritabanını altı kez vurmak gerek yok! Tabii ki hata işleme eklemeniz gerekir.

Btw. ID veritabanındaki kaydın olarak parametre idNum aynı mı? Eğer öyleyse, daha da kolaylaştırabilirsiniz:

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 ....
}

call_user_func bir göz atın.

$functionName = $_GET[ 'func' ];

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

Ben kodu doğru okuyorum eğer Ayrıca, tek bir sorguda tüm bilgi alabilir:

$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.
}

Sizin $IDNUM değişken, işlev kapsamı dışındadır. Eğer bir değişken olarak işlevi içine geçmek veya içine ayarlayarak işlev içinde ayarlamak gerekir ya da gerekir.

function refreshCurrentProduct() { 
  $IDNUM = $_GET[ 'idNum' ];
  ...
}