Création Module d'affichage base de donnée SQL

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous !

Voila je présente mon soucis, qui je pense pour beaucoup dès qu'il verront le code trouverons l'erreur ^^.

Mon projet étant de faire un module qui va affiché (pour l'instant) uniquement l'ID et les autres informations des Nodes. (Ne me demandez pas pourquoi ^^, je fais cela)

J'ai cette erreur :
[quote]
Fatal error: Cannot unset string offsets in C:\wamp\www\drupal\includes\form.inc on line 492[/quote]

Mon code étant :

nodeid.module :
[quote]
<?php

/**
* Implemention of hook_menu().
*/
function nodeid_menu() {
$items['admin/settings/nodeid'] = array(
'title' => 'Node ID',
'description' => 'Affichage Node ID.',
'page callback' => 'drupal_get_form',
'page arguments' => array('node_id_affichage'),
'access arguments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}

/**
* Settings form as implemented by hook_menu
*/
function node_id_affichage() {

$db = mysql_connect('localhost', 'root', '****');
mysql_query("SET NAMES UTF8");
mysql_select_db('drupal');
$sql = 'SELECT nid,type,title,comment FROM node ORDER BY nid';
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());

$affichage .= "<TABLE BORDER='2'
<CAPTION> resultat de la recherche </CAPTION>
<TR>
<TH> ID du Node </TH>
<TH> Type de contenu </TH>
<TH> Titre </TH>
<TH> Commentaire </TH>
</TR>";

while($data = mysql_fetch_assoc($req))
{
$affichage .= "

".$data->nid."
".$data->type."
".$data->title."
".$data->comment."
";
}

$affichage .= "";

return $affichage;
}
[/quote]

Voila, alors je sais pas trop si j'ai bien suivi les tutos et si mon code est bon, pour moi je ne vois rien d'anormal ^^"".

Forum : 
Version de Drupal : 

(Désolé j'ai voulu cliquer sur aperçu et j'ai appuyé sur envoyer :s)

revoici mon code correctement présenté !

<?php

function nodeid_menu() {
  $items['admin/settings/nodeid'] = array(
    'title' => 'Node ID',
    'description' => 'Affichage Node ID.',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('node_id_affichage'),
    'access arguments' => array('administer site configuration'),
    'type' => MENU_NORMAL_ITEM,
  );
    return $items;
}

function node_id_affichage() {
$db = mysql_connect('localhost', 'root', '****');
mysql_query("SET NAMES UTF8");
mysql_select_db('drupal');
$sql = 'SELECT nid,type,title,comment FROM node ORDER BY nid';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

    $affichage .= "<TABLE BORDER='2'
            <CAPTION> resultat de la recherche </CAPTION>
            <TR>
                <TH> ID du Node </TH>
                <TH> Type de contenu </TH>
                <TH> Titre </TH>
                <TH> Commentaire </TH>
            </TR>";

while($data = mysql_fetch_assoc($req))
    {
        $affichage .= "
            <TR>
                <TD>".$data->nid."</TD>
                <TD>".$data->type."</TD>
                <TD>".$data->title."</TD>
                <TD>".$data->comment."</TD>
            </TR>";
    }

   $affichage .= "</TABLE>";

   return $affichage;
}

Merci

Je dirais qu'il n'y a pas besoin de se connecter via MySQL pour accéder à la BDD de Drupal.

J'avais essayé un truc qui me permettait d'avoir un tableau triable (inspiré d'une source dont je n'ai pas mémorisé l'origine désolé)

Pour supprimer le tri sur une colonne, il suffit de ne pas renseigner le paramètre 'field' dans le $header

Je ne sais pas si c'est une bonne méthode, les pros me corrigeront.

<?php
$headers
= array(); // container for header row     
$rows = array(); // our container for rows
$cells = array(); // our container for cells
       
array_push($headers, array('data' => 'sid', 'field' => 'sid', sort => 'asc'));
array_push($headers, array('data' => t('Title'), 'field' => 'title', 'class' =>       'col-center'));

$sql = ('SELECT * FROM {une_table}');
   
$results = db_query($sql . tablesort_sql($headers));
            
while (
$row = db_fetch_array($results)) {
                               
   
array_push($cells, array('data' => $row['sid'], 'class' => ''));
   
array_push($cells, array('data' => l($row['title'], 'node/' . $row['nid'])));

   
array_push($rows, array('data' => $cells, 'class' => ''));
   
$cells = array();                            
}

$outpout .= theme_table($headers, $rows, array('class' => 'sid'));
return
$outpout;
?>

Alors j'ai testé et j'ai exactement la même erreur :s

Fatal error: Cannot unset string offsets in C:\wamp\www\drupal\includes\form.inc  on line 492

Alors, bon je m'y connais un peu en php; et je sais que c'est le return $outpout; à la fin qui foire.
Ce que je comprend pas, c'est pourquoi. O.o

En écrivant ce code, cela m'affiche ce que je voudrais (j'ai mis un 'echo'), mais dans le "head" et pas dans le contener.

<?php
function test_menu() {
 
$items['admin/settings/test'] = array(
   
'title' => 'Test',
   
'description' => 'Affichage un module en test.',
   
'page callback' => 'drupal_get_form',
   
'page arguments' => array('test_affichage'),
   
'access arguments' => array('administer site configuration'),
   
'type' => MENU_NORMAL_ITEM,
  );
    return
$items;
}


function
test_affichage() {
  
$headers = array(); // container for header row    
  
$rows = array(); // our container for rows
 
$cells = array(); // our container for cells
      
  
array_push($headers, array('data' => 'nid', 'field' => 'nid', sort => 'asc'));
 
array_push($headers, array('data' => t('Title'), 'field' => 'title', 'class' => 'col-center'));

$sql = ('SELECT * FROM node');
  
 
$results = db_query($sql . tablesort_sql($headers));
           
      while (
$row = db_fetch_array($results)) {
                                    
           
array_push($cells, array('data' => $row['nid'], 'class' => ''));
        
array_push($cells, array('data' => l($row['title'], 'node/' . $row['nid'])));

         
array_push($rows, array('data' => $cells, 'class' => ''));
        
$cells = array();                           
      }

 
$outpout .= theme_table($headers, $rows, array('class' => 'nid'));
  echo
$outpout;
}
?>