1

I have two problems here:
1. I have a problem with the value of the checkbox
2. I have a problem with the mysql_fetch_array($variable, ASSOC); method --> all the data from my database are VARCHAR type

1. All the variable with, at the end 'Cb', signified that this value is from a checkbox of a FORM. If a checkbox is checked, it means that the row (ex: Username) will be in the Select method for my Database (ex: SELECT Username FROM...)

I receive this Error 1. Undefined index: fonctionCb in C:\wamp\www\Projet Compte Utilisateur\manip_liste.php on line 7 2. Undefined variable: tab in C:\wamp\www\Projet Compte Utilisateur\manip_liste.php on line 14 ...etc from all the checkbox if they are not checked .. here is my PHP code

<?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. The second ERROR and also I got this error from the fetch_array method Error: Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in C:\wamp\www\Projet Compte Utilisateur\db_action.php on line 68

Here is the code from my method

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

Thank you all to answer and i specify that i'm a beginner in practice who wants to learn ..

7
  • I'm sorry, that was not my intention Commented Feb 24, 2011 at 0:43
  • 1
    @ThorDozer: You should be concatenating strings with .= rather than +=. Also, try using something along the lines of isset() to check if a value is set. And I'm assuming your $tab variable is not being set as that if conditional is failing, therefore your attempts at concatenating are throwing errors. Commented Feb 24, 2011 at 0:46
  • @Russel Dias: What do you mean with the isset(); method. Where should i put it? Commented Feb 24, 2011 at 0:53
  • @ThorDozer: Any variable you are testing the existence of. Commented Feb 24, 2011 at 0:55
  • First Question is already answered. The second is still appearing Commented Feb 24, 2011 at 0:58

3 Answers 3

2

For part 1, one problem is that you may have a trailing comma on the end of $prep depending on what columns you end up selecting. To solve this try the below code (note I've added backticks around your column names, it's good practice but not required). The isset() function checks if a variable actually exists. Currently you are trying to access variables that may not exist, hence the errors.

<?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'";    ?> 

For your part 2 error, you have to assign the return of the mysql_query into a variable and pass that to mysql_fetch_array. You don't just pass it the query string. Try this:

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

UPDATE:

Note as well as the large addition for part 1, I've removed the single quotes around $prep in you SQL statement in part 2.

Read up on isset() but also, you can consider using array_key_exists(). I'm not sure on the relative performance comparison of the two.

Sign up to request clarification or add additional context in comments.

16 Comments

All my variable from the printf are Undefined Index
@ThorDozer Then your value of $prep is probably wrong, and it probably shouldn't have single quotes around it. Are the columns in your info_compte table "username", "suffixe", etc... that you use as array keys?
@Endophage: yes i verify it four times.
@Endophage: Yes I'm doing it right now.. But do i really need to do the single quotes around the word in the variable $prep?
@ThorDozer They're not single quotes. This is a single quote: ' This is a backtick: ` Backticks are used to delineate database, table and column names in SQL. You don't have to use them but it's a good practice in case at some point you accidentally use an SQL reserved keyword as a column name. The backticks will make sure SQL doesn't error in that scenario.
|
2

Perhaps defining $tab along with $prep at the top will get rid of the "Undefined Variable"-error

Comments

0

As for your second question the expects parameter 1 to be resource, string given states that you have given it a string. In your code you have simply given it the values of $querycon which is $querycon = "SELECT '$prep' FROM info_compte WHERE username = '$username'"; a string.

You should assign a $variable to the mysql_query function and use that in the mysql_fetch_array method as the first param.

For the sake of completeness:

To answer your first question, your $tab variable is not being set as that if conditional is failing, therefore your attempts at concatenating are throwing errors.

6 Comments

DONE --> but ..if you look at the 'printf' .. when i execute it...nothing appear except the value of $tab
@ThorDozer: There's no need to call mysql_query twice. Simply assign a variable to it before your first if statement. Also, can you do a var_dump of the $row in the while loop ?
@Russel Diaz: I'm sorry :S like I said i'm a begginer and also .. i'm French so I don't understand the entire part of your last comment. About the var_dump .. what do i need to do?
@ThorDozer: var_dump is a good way to dump data regarding a variable. I just want to see if $row returns anything at all. Because your code looks OK to me ... also, just to be sure, at the start of your document set error_reporting(-1);.
@Russel Dias: Every Variable on the line of the printf are Undefined Index and the variable $row['username'] for example, return nothing (null)
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.