Page 1 sur 1

PHP / SQLite3

Posté : 04 juin 2013, 15:16
par stouph92500
Bonjour,
Tout d'abord j'espère poster sa au bon endroit!
Je suis stagiaire dans le cadre de mes études (bts IRIS), donc peut de connaissance, sachant qu'on voit un peut de tout en diagonale (html, php et mysql), sauf que la je me retrouve avec du php et du SQLite3 (que je ne connais pas du tout).
J'ai fais un petit programme qui communique avec un base de données, et surtout qui devrait me retourner certaines informations dans une page web.
Seulement sa ne veut pas fonctionne, j'ai du mal à comprendre le côté objet..

Wamp me retourne une erreur:

Fatal error: Call to undefined method PDOStatement::fetchArray() in C:\wamp\www\Stage\pdo4.php on line 11


01 <?php
02
03 //Affichons la colone id, ip, mac de devices!
04 cho "Test Affichage Colone: id, ip, mac<br><br>";
05
06 $dbh = new PDO('sqlite:C:\Users\Steph\Desktop\spiceworks_prod.db', '', '');
07 $sql = 'SELECT id, ip_address, mac_address FROM devices WHERE id = :id';
08 $sth = $dbh->query($sql); //->fetchArray(SQLITE3_ASSOC);
09 $row = array();
10 $i = 0;
11 while($res = $sth->fetchArray(SQLITE3_ASSOC)){
12 if(!isset($res['id'])) continue;
13
14 $row[$i]['id'] = $res['id'];
15 $row[$i]['ip_address'] = $res['ip_address'];
16 $row[$i]['mac_address'] = $res['mac_address'];
17
18 $i++;
19 }
20 print_r( $row );
21
22 ?>

Si vous avez une petite idée, sa sera avec plaisir.
En espérant que se soit une des dernière erreur que Wamp me retourne!
Je vous demande pas la solution miracles qui fera tout fonctionner par magie, mais un petit coup de pouce pour m'aider à m'en sortir.

Re: PHP / SQLite3

Posté : 04 juin 2013, 16:26
par stouph92500
Donc j'ai réussi à avancer tout seul comme un grand, eh ouai chui grand attention...
Bon trève de plaisanterie, voici mon code et mon résultat:
<?php
 
$dbh = new PDO('sqlite:C:\Users\Steph\Desktop\spiceworks_prod.db', '', '');
$sth = $dbh->prepare("SELECT id, server_name, manufacturer, ip_address, mac_address, created_on, updated_on, online_at, offline_at FROM devices");
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//var_dump($result);

// open the table
print "<table wdith=\"100%\">\n";
print "<tr>\n";
// add the table headers
foreach ($result[0] as $key => $useless){
    print "<th>$key</th>";
}
print "</tr>";
// display data
foreach ($result as $row){
    print "<tr>";
    foreach ($row as $key => $val){
        print "<td>$val</td>";
    }
    print "</tr>\n";
}
// close the table
print "</table>\n";
 ?>
Mon résultat est sur l'image ci jointe.

Bon comme vous voyez j'ai des colonnes tout comme il faut, mais au bout de 250 lignes, il y a moyen de se perdre et de se retrouver avec un bon gros mal de crâne, je me demandais si il y avait possibilité d'afficher les lignes du tableau, car je dirais que la elles sont transparentes mais qu'il y a bien un tableau derrière et pourquoi pas non plus agrandir l'espace entre chaque colonnes.

Re: PHP / SQLite3

Posté : 04 juin 2013, 17:38
par moogli
salut,


pour ton premier problème c'est que ta requête était foireuse (le :id surement ?) :mrgreen:

pour éviter ce type de galère utilise try/catch pour capturer l'erreur et l'afficher (ou stocker) correctement.

pour ta dernière question, c'est relativement simple, une partie ce faire en css, l'autre en css et un peu de php.

Pour aider la lisibilité tu peux alterner la couleur des lignes.
le plus simple c'est d'utiliser un entier que tu incrémente a chaque ligne et tu test le modulo pour choisir la css qui va bien

supposons que tu ai une classe css qui s'appel impaire et une paire avec des couleurs de fond différente.
<?php
$i = 0;
while(true){
    if(($i%2) == 0){
        $css = 'paire';
    }
    else {
        $css = 'impaire';
    }
    
    echo '<tr class="'.$css.'"> ..... </tr>';
    $i++;
}
?>
Avec cette exemple tu aura une ligne sur deux de couleur "paire" et une sur deux (mais pas les mêmes 8-) ) de couleur "impaire".

pour le reste il faut donne des tailles à tes colonnes ou tous simplement limiter l'affichage et proposer de voir le reste des élements (les moins important au premier abord, à voir avec l'utilisateur).

@+

Re: PHP / SQLite3

Posté : 05 juin 2013, 09:27
par stouph92500
Merci pour les conseils, je regarde sa après.
Déjà je voudrais réaliser plusieurs tableau, par exemple un tableau qui afficherait que les lignes ou "manufacturer = VMware", je n'arrive pas à réaliser mes conditions.

Re: PHP / SQLite3

Posté : 05 juin 2013, 11:38
par stouph92500
J'ai trouvé une méthode simple sans feuille css pour rendre un peut plus lisible mon tableau, c'est pas tout à fait sa mais bon.
Ensuite j'ai réussi à isoler les machines du types VMware, les autres (dell, intel, ...) mais par contre je n'arrive pas à afficher les lignes ou le champ manufacturer n'est pas rempli. Sa me fait donc des lignes que je ne peux pas afficher..

<?php
//affichage de toute les donnée dans un tableau
//ajou couleur pour mieux s'y retrouver


$dbh = new PDO('sqlite:C:\Users\Steph\Desktop\spiceworks_prod.db', '', '');
//Affichage des VMware
print "<br>Tableau contenant les VMware:<br><br>";

$sth = $dbh->prepare("SELECT id, server_name, manufacturer, ip_address, mac_address, created_on, updated_on, online_at, offline_at FROM devices WHERE manufacturer like 'VMware'");
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
// open the table
print "<table wdith=\"100%\">\n";
print "<tr bgcolor= '#dddddd'>\n";
// add the table headers
foreach ($result[0] as $key => $useless){
print "<th>$key</th>";
}
print "</tr>";
// display data
foreach ($result as $row){

print "<tr bgcolor= '#eeeeee'>";
foreach ($row as $key => $val){
print "<td>$val</td>";
}
print "</tr>\n";
}
// close the table
print "</table>\n";
?>

Re: PHP / SQLite3

Posté : 05 juin 2013, 21:21
par moogli
Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


modifie la condition de la requête pour ajouter un : or manufacturer is null

test ta requête avec un client sqlite (comme sqlite manager)

@+