HTML POST和获取数组

时间:2011-02-24 00:37:52

标签: php mysql html checkbox

我有两个问题:
1。我的复选框值有问题                                                                                            2. 我的mysql_fetch_array($ variable,ASSOC)有问题;方法 - >我数据库中的所有数据都是VARCHAR类型

1。在“Cb”末尾的所有变量都表示此值来自FORM的复选框。如果选中复选框,则表示该行(例如:用户名)将位于我的数据库的Select方法中(例如:SELECT Username FROM ...)

我收到此错误 1.未定义的索引:第7行的C:\ wamp \ www \ Projet Compte Utilisateur \ manip_liste.php中的fonctionCb 2.未定义的变量:第14行的C:\ wamp \ www \ Projet Compte Utilisateur \ manip_liste.php中的选项卡 ...等等所有复选框如果没有选中 ..这里是我的PHP代码

<?php   
$prep = "";

if(!$_POST['username'])
    echo 'Nom d\'utilisateur manquant';

if(($_POST["userCb"]) && ($_POST["suffixeCb"]) && ($_POST["fonctionCb"]) && ($_POST["passwordCb"])){
    $prep = " * ";
    $tab = "User    SUFFIXE     SITE    FONCTION    PASSWD";
}
else{   
        if($_POST["userCb"]){
            $prep += "username ,";
            $tab += "USER   ";
        }           
        if($_POST["suffixeCb"]){
            $prep += "suffixe ,";
            $tab += "SUFFIXE    ";
        }   
        if($_POST["passwordCb"]){
            $prep += "password ,";
            $tab += "PASSWD ";
        }
        if($_POST["siteCb"]){
            $prep += "siteWeb ,";
            $tab += "SITE   ";
        }
        if($_POST["fonctionCb"]){
            $prep += "fonction ";
            $tab += "Fx ";
        }
    }//ELSE

require("db_action.php");   //Require in the database connection.
$bd = db_open();
$data = db_select($prep,  $_POST["username"]); //Envoie des variables à afficher et du Username pour le SELECT

echo "'$tab'";
echo "'$data'";    ?>    

2. 第二个错误 而且我从fetch_array方法得到了这个错误 错误:警告:mysql_fetch_array()期望参数1为资源,字符串在第68行的C:\ wamp \ www \ Projet Compte Utilisateur \ db_action.php中给出

以下是我方法的代码

function db_select($prep, $username){

        $querycon = "SELECT '$prep' FROM info_compte WHERE username = '$username'";
        if(!mysql_query($querycon)){
            echo "Il n\'y a aucun '$username' dans la base de données";
            $response = "";
        }
        else{
                while ($row = mysql_fetch_array(mysql_query($querycon), MYSQL_ASSOC))
                    printf("%s  %s  %s  %s  %s", $row["username"], $row["suffixe"], $row["password"], $row["siteWeb"], $row["fonction"]);  //The PRINTF dont work 
            }

        return $response;   
}//db_select

谢谢大家的回答,并指出我是一名初学者,希望学习......

3 个答案:

答案 0 :(得分:2)

也许定义$ tab以及顶部的$ prep将摆脱“Undefined Variable”-error

答案 1 :(得分:2)

对于第1部分,一个问题是您可能在$ prep结尾处有一个尾随逗号,具体取决于您最终选择的列。要解决这个问题,请尝试以下代码(注意我已经在列名称周围添加了反引号,这是一种很好的做法但不是必需的)。 isset()函数检查变量是否确实存在。目前,您正在尝试访问可能不存在的变量,因此存在错误。

<?php   
$prep = array();
$tab = '';

if(!isset($_POST['username']))
    echo 'Nom d\'utilisateur manquant';

if(isset($_POST["userCb"]) && isset($_POST["suffixeCb"]) && isset($_POST["fonctionCb"]) && isset($_POST["passwordCb"])){
    $prep[] = "*";
    $tab = "User    SUFFIXE     SITE    FONCTION    PASSWD";
}
else{   
        if(isset($_POST["userCb"])){
            $prep[] = "`username`";
            $tab .= "USER   ";
        }           
        if(isset($_POST["suffixeCb"])){
            $prep[] = "`suffixe`";
            $tab .= "SUFFIXE    ";
        }   
        if(isset($_POST["passwordCb"])){
            $prep[] = "`password`";
            $tab .= "PASSWD ";
        }
        if(isset($_POST["siteCb"])){
            $prep[] = "`siteWeb`";
            $tab .= "SITE   ";
        }
        if(isset($_POST["fonctionCb"])){
            $prep[] = "`fonction`";
            $tab .= "Fx ";
        }
    }//ELSE

// This line glues the pieces of the $prep array back together
$prep = implode(',', $prep);

require("db_action.php");   //Require in the database connection.
$bd = db_open();
$data = db_select($prep,  $_POST["username"]); //Envoie des variables à afficher et du Username pour le SELECT

echo "'$tab'";
echo "'$data'";    ?> 

对于第2部分错误,您必须将mysql_query的返回值分配给变量并将其传递给mysql_fetch_array。您不只是将查询字符串传递给它。试试这个:

function db_select($prep, $username){
        $username = mysql_real_escape_string($username);
        $querycon = "SELECT $prep FROM info_compte WHERE username = '$username'";
        $response = mysql_query($querycon);
        if(!$response){
            echo "Il n\'y a aucun '$username' dans la base de données";
            $response = "";
        }
        else{
                while ($row = mysql_fetch_array($response, MYSQL_ASSOC))
                    foreach($row as $item)
                    {
                        echo $item.' ';
                    }
                }

        return $response;   
}//db_select

更新:

注意以及第1部分的大量添加,我已在第2部分的SQL语句中删除了$ prep附近的单引号。

阅读isset(),但您也可以考虑使用array_key_exists()。我不确定这两者的相对表现比较。

答案 2 :(得分:0)

至于你的第二个问题,expects parameter 1 to be resource, string given表示你已经给它一个字符串。在您的代码中,您只需将$querycon的值设为$querycon = "SELECT '$prep' FROM info_compte WHERE username = '$username'"; 即字符串。

您应该为mysql_query函数分配一个$变量,并将其作为第一个参数用于mysql_fetch_array方法。

为了完整起见:

要回答您的第一个问题,您的$ tab变量未设置为if条件失败,因此您尝试连接会抛出错误。