Lignes autonomes malgré une boucle php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Lignes autonomes malgré une boucle php

Re: Lignes autonomes malgré une boucle php

par swampsong » 06 janv. 2011, 09:05

Génial ! Merci de m'avoir répondu, je marque le sujet en résolu !

@+ :)

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 22:48

Merci !!!!

Et j'ai juste une dernière question: Je n'ai pas vraiment trouvé comment faire: Quelle instruction je pourrais ajouter pour que chaque case affiche son propre numéro de case (et non pas le numéro d'id de MySQL), uniquement lorsqu'elle est vide ?
Exemple: Faire en sorte que la case n°50 affiche '50' lorsqu'elle est vide, c'est à dire lorsqu'elle n'a aucune donnée à afficher depuis MySQL...

J'ai pensé à insérer un 'else' sous l'un des 'if' mais je ne sais pas comment récupérer le numéro de la case (qui n'a pas de numéro en réalité puisque c'est une boucle...)

EDIT: Ah si, j'imagine qu'il faut ajouter un compteur incrémenté avec un $i en plus ??
non tu gardes le même $i :wink:
echo "\t\t<td>", empty($item) ? $i : $item['CHOSE'] , "</td>\n";
peu etre falloir faire un $i + 1

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 22:39

Merci !!!!

Et j'ai juste une dernière question: Je n'ai pas vraiment trouvé comment faire: Quelle instruction je pourrais ajouter pour que chaque case affiche son propre numéro de case (et non pas le numéro d'id de MySQL), uniquement lorsqu'elle est vide ?
Exemple: Faire en sorte que la case n°50 affiche '50' lorsqu'elle est vide, c'est à dire lorsqu'elle n'a aucune donnée à afficher depuis MySQL...

J'ai pensé à insérer un 'else' sous l'un des 'if' mais je ne sais pas comment récupérer le numéro de la case (qui n'a pas de numéro en réalité puisque c'est une boucle...)

EDIT: Ah si, j'imagine qu'il faut ajouter un compteur incrémenté avec un $i en plus ??

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 22:16

oui le var_dump c'est pratique pour debugger tu peu l'enlever, pour les cases vides c'est ton CSS qui va s'occuper de ca avec :
empty-cells:show;
et un height definie a l'avance :wink:

genre
td {
    border:1px solid #d0d0d0;
     empty-cells:show;
    height:25px;
}

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 22:12

Merci beaucoup de répondre aussi vite !!

Le code fonctionne désormais parfaitement, mais à condition que je retire la ligne var_dump($item); autrement il me renvoie la liste des arrays, au dessus du tableau (hors des cases), puis en fin de liste des arrays, il affiche 'bool(false)'

Est ce normal ?
Si j'ai bien compris l'un des tutos que j'ai lu et le post précédent, et étant donné que ça fonctionne sans, on ne doit mettre cette instruction que pour vérifier la requête c'est ça ?
Et le fait qu'il renvoie les bool false (apparemment pour les cases qui sont vides lorsque pas de donnée à afficher) après avoir affiché les arrays (pour les cases pleines) serait normal (parce que certaines cases sont vides) ??

Alex

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 21:38

arf en recopiant j'ai zapper le #-o
$req->execute();

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 21:36

Ah oui, c'est vrai, désolé (je le savais en plus, non je vous assure !!)

Alors cette requête ne me renvoie aucune erreur !!

SQL renvoie cela: Showing rows 0 - 9 (10 total, Query took 0.0003 sec), donc ça a l'air parfait, en direct... Pourtant via php, soit il y a un bug, soit j'ai fait une erreur quelque part !!

Alex

Re: Lignes autonomes malgré une boucle php

par xTG » 05 janv. 2011, 21:21

Dans phpmyadmin ou dans la console mysql il ne faut rentrer que :
SELECT * FROM MATABLE LIMIT 10
Et non pas le code php avec. ;)

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 21:17

Quand j'entre la requête directement dans MySQL:
$req = $bdd->prepare('SELECT * FROM MATABLE LIMIT 10')
SQL me renvoie un message d'erreur: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$req = $bdd->prepare('SELECT * FROM MATABLE LIMIT 10')' at line 1

C'est curieux parce que mes autres requêtes via php étaient similaires et fonctionnaient bien !!

Alex

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 20:28

var_dump($item); me renvoie bool(false) 100 fois (nombre de cases dans mon exemple), et tout est placé hors du tableau, au dessus de la 1ère ligne...

Donc ma requête est certainement fausse, mais je ne vois pas où car mes instructions me semblaient pourtant correctes, après re vérification...

Alex
quand tu fait la requete dans phpmyadmin en remplaçant le ? par 10 par exemple c'est bon ?

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 19:23

var_dump($item); me renvoie bool(false) 100 fois (nombre de cases dans mon exemple), et tout est placé hors du tableau, au dessus de la 1ère ligne...

Donc ma requête est certainement fausse, mais je ne vois pas où car mes instructions me semblaient pourtant correctes, après re vérification...

Alex

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 18:27

t'es sur de ta requête ?
que donne
$item = $req->fetch();
var_dump($item);

Re: Lignes autonomes malgré une boucle php

par swampsong » 05 janv. 2011, 18:23

Merci pour l'info !!

Les 2 codes fonctionnent, et je vais donc les étudier pour comprendre leur mécanisme et m'en inspirer pour d'autres choses éventuellement (ou en tout cas essayer... non ne rigolez pas s'il vous plaît !)

Ils font tous les 2 exactement ce que je recherche, sauf que:
Le 1er (celui de Stealth35) affiche bien toutes les cases (grâce à variable $nblignes) comme je voulais, mais elles sont systématiquement vides, même lorsque la DB contient des données...
J'ai fait plusieurs essais, mais je n'arrive pas à obtenir l'affichage des données dans les cases concernées...

Est ce que j'ai fait une erreur quelque part en faisant une modification ??
<?php



$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;

$bdd = new PDO('mysql:host=localhost;dbname=MABASE', 'root', '', $pdo_options);



$nbcolonnes = 10;

$nblignes   = 10;

$nbmax      = $nbcolonnes * $nblignes;



$req = $bdd->prepare('SELECT * FROM `MATABLE` LIMIT ?');

$req->bindValue(1, $nbmax, PDO::PARAM_INT);



echo "<table>\n";



for($i = 0; $i < $nbmax; ++$i)

{

    if(($i % $nbcolonnes) === 0)

    {

        echo "\t<tr>\n";

    }

   

    $item = $req->fetch();

    echo "\t\t<td>", $item['CHOSE'], "</td>\n";



    if((($i + 1 + $nbcolonnes) % $nbcolonnes) === 0)

    {

        echo "\t</tr>\n";

    }

}

echo '</table>';

?>
Alex

Re: Lignes autonomes malgré une boucle php

par sadeq » 05 janv. 2011, 15:17

Dans mon code, il t'affiche un 'array' car il y avait une instruction 'echo' qui trainait là où il faut pas dans la ligne:
if (isset($reponse[$i])) { echo $case = $reponse[$i]; } ....
voici le correctif:
<?php
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=MABASE', 'root', '', $pdo_options);

// On récupère tout le contenu de la table MATABLE
$req = $bdd->prepare('SELECT CHOSE FROM MATABLE');
$req->execute();
$reponse = $req->fetchAll(); //lire tous les résultats de la requête dans un tableau $reponse

$nbcolonnes = 10;
$nblignes = 5;
$i = 0; //compteur d'enregistrements du tableau $reponse

echo '<table>'; //début de la table HTML

for ($ligne = 0; $ligne<$nblignes; $ligne++) {
    echo '<tr>'; //début de la ligne Table HTML
    for ($colonne=0; $colonne<$nbcolonnes; $colonne++){
       echo '<td>';

       if (isset($reponse[$i])) { $case = $reponse[$i]; } else $case = null;  //lire l'enregistrement $reponse dans $case
       if (isset($case['CHOSE']))  echo $case['CHOSE'];  //Afficher la donnée de la colonne 'CHOSE'
       $i ++;  //incrémenter le compteur d'enregistrements

       echo '</td>'; //fin de la cellule Table HTML
    }
   echo '</tr>'; //fin de la ligne Table HTML
}
echo '</table>';  //fin de la Table HTML
?>

Re: Lignes autonomes malgré une boucle php

par stealth35 » 05 janv. 2011, 15:07

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);

$nbcolonnes = 10;
$nblignes   = 5;
$nbmax      = $nbcolonnes * $nblignes;

$req = $bdd->prepare('SELECT `value` FROM `tokens` LIMIT ?');
$req->bindValue(1, $nbmax, PDO::PARAM_INT);
$req->execute();

echo "<table>\n";

for($i = 0; $i < $nbmax; ++$i)
{
    if(($i % $nbcolonnes) === 0)
    {
        echo "\t<tr>\n";
    }
   
    $item = $req->fetch();
    echo "\t\t<td>", $item['value'], "</td>\n";

    if((($i + 1 + $nbcolonnes) % $nbcolonnes) === 0)
    {
        echo "\t</tr>\n";
    }
}
echo '</table>';