2009-12-21 7 views
0

Je travaille dans Drupal 6 avec CCK. Sous chaque champ de texte il y a une section PHP où vous pouvez exécuter du code PHP pour obtenir les valeurs autorisées. Je rencontre des problèmes en utilisant une instruction "if" pour modifier les valeurs autorisées en fonction du type d'utilisateurDrupal: champ PHP pour les valeurs autorisées

Pour commencer, je fais une requête pour déterminer le type d'utilisateur actuel. -1 est l'utilisateur par défaut, qui est les employés et l'ID de type d'utilisateur "1", est pour les utilisateurs du site. Ce que je veux, c'est restreindre l'utilisateur du site aux seules valeurs autorisées qu'ils doivent voir, tout en permettant aux employés de modifier cette valeur quand sur l'écran d'édition de nœud avec tous les choix.

La première partie de l'instruction if fonctionne. Cependant, la partie "else" ne fonctionne pas. Ce champ est-il configuré pour gérer les structures de contrôle?

global $user; 
$sql1 = "SELECT user_type_id FROM user_types_user WHERE uid = ".$user->uid." "; 
$res1 = db_query($sql1); 
if($res1 == '1'){ 
$sql = "SELECT account FROM users WHERE uid = ".$user->uid." "; 
$res = db_query($sql); 
while($row = db_fetch_array($res)){ 
$rows[] = $row['account']; 
} 
$rows = drupal_map_assoc($rows); 
return $rows; 
} 
else { 
$sql2 = "SELECT title FROM node WHERE type = 'accounts' "; 
$res2 = db_query($sql2); 
while($row2 = db_fetch_array($res2)){ 
$rows2[] = $row2['title']; 
} 
$rows2 = drupal_map_assoc($rows2); 
return $rows2; 
} 

Les choix sont de type = comptes dans les nœuds, cependant, lorsqu'un utilisateur est créé l'un des choix est sélectionné et stockées dans la table utilisateur, sous une colonne I créé sous le nom « compte »

Répondre

1

Si par 'l'autre partie ne fonctionne pas' vous voulez dire qu'il n'est jamais exécuté, même si user_type_id n'est pas égal à 1, il peut être le db_fetch_array() manquant sur $res1 Vous comparez votre objet résultat directement à la chaîne '1', pas le

+0

Vous êtes l'homme! Juste pour que je sois hétéro, le problème était que le résultat de mon tableau était un entier, mais j'essayais de le comparer à une chaîne de caractères? Donc, même pensé qu'ils étaient les mêmes, ils n'étaient pas égaux? – tpow

+0

Je ne suis pas exactement sûr de ce qui se passe, mais PHP a des règles étranges pour la comparaison quand les types ne correspondent pas (voir les documents à http://www.php.net/manual/fr/language.operators.comparison.php). Le 'db_query' de Drupal semble retourner une ressource, qui est convertie en nombre (probablement 1). Si l'ajout de 'db_fetch_array' aide, super :-) J'ai trébuché sur des problèmes de comparaison plus d'une fois ... – Simon

0

Voici le code de travail pour cela. un moyen plus rapide/plus court de le faire.

global $user; 
$sql1 = "SELECT user_type_id FROM user_types_user WHERE uid = ".$user->uid." "; 
$res1 = db_query($sql1); 
while($type = db_fetch_array($res1)){ 
$types[] = $type['user_type_id']; 
} 
$resType = $types[0]; 
if($resType == "1"){ 
$sql = "SELECT account FROM users WHERE uid = ".$user->uid." "; 
$res = db_query($sql); 
while($row = db_fetch_array($res)){ 
$rows[] = $row['account']; 
} 
$rows = drupal_map_assoc($rows); 
return $rows; 
} 
else { 
$sql2 = "SELECT title FROM node WHERE type = 'accounts' "; 
$res = db_query($sql2); 
while($row2 = db_fetch_array($res)){ 
$rows2[] = $row2['title']; 
} 
return $rows2; 
} 
Questions connexes