Query Insert New User

15 contenuti / 0 new
Ultimo contenuto
Query Insert New User

ho la necessità di creare un nuovo utente da una pagina php che contiene queste variabili:

$nome_utente
$password
$email

come faccio da questo file a fare una query di insert per creare un nuovo utente?

grazie

insert into nometabella ....
è una query come le altre, ma cosa ha la pagina di registrazione di drupal che no nti piace

mi serviva creare un tasto che una volta cliccato creasse un utente con queste 3 variabili

Studia php e questa cosa la fa già drupal di base, prima devi sapere php, html e css poi puoi farlo.
Ed è un form base quello.

Il fatto è che non è semplice creare una query esatta per un nuovo utente perchè i campi sono:

uid name pass mail mode sort threshold theme signature created access login status timezone language picture init data signature_format timezone_name timezone_id

ESEMPIO:

INSERT INTO `avdrupal_users` VALUES('', 'nomeuten', '5d9f71b71b207b9e665820c0dce67bdb', '[email protected]', 0, 0, 0, '', '', 1307199912, 1307357027, 1307357027, 1, NULL, 'it', '', '[email protected]', 'a:8:{s:13:"form_build_id";s:37:"form-e0530f856fc5b976d465aeb67b9fc1d8";s:7:"captcha";s:0:"";s:11:"captcha_sid";s:3:"150";s:16:"captcha_response";s:5:"me6ie";s:7:"contact";i:0;s:17:"mimemail_textonly";i:1;s:14:"picture_delete";s:0:"";s:14:"picture_upload";s:0:"";}', 1, '', 0);

Quindi generare le variabili time, la pwd md5, l'array serializzato dei dati....., insomma una cosa macchinosa.
Prova con questa (dal manager del db):

INSERT INTO `rc_users` VALUES('', 'user1', '24c9e15e52afc47c225b757e7bee1f9d', '[email protected]', 0, 0, 0, '', '', 0, 1320245034, 1320245034, 0, 1, '3600', 'it', '', '[email protected]', 'a:1:{s:13:"form_build_id";s:37:"form-887439fd935bcc34c457c87a39e59154";}');

Ricorda che il prefisso rc_ è da cambiare in base al tuo, la password è user1 e una volta entrato nel sito la cambi. Diciamo che è come se questo utente fosse creato dall'amministratore e non in fase di registrazione.

La query Mysql:

mysql_query("INSERT INTO rc_users VALUES('', 'user1', '24c9e15e52afc47c225b757e7bee1f9d', '[email protected]', 0, 0, 0, '', '', 0, 1320245034, 1320245034, 0, 1, '3600', 'it', '', '[email protected]', 'a:1:{s:13:"form_build_id";s:37:"form-887439fd935bcc34c457c87a39e59154";}')") or die(mysql_error());

La query Postgres:

$conn = pg_pconnect("dbname=tuonomedb");
if($insert_query = pg_query($conn, "INSERT INTO rc_users VALUES('', 'user1', '24c9e15e52afc47c225b757e7bee1f9d', '[email protected]', 0, 0, 0, '', '', 0, 1320245034, 1320245034, 0, 1, '3600', 'it', '', '[email protected]', 'a:1:{s:13:"form_build_id";s:37:"form-887439fd935bcc34c457c87a39e59154";}')")) {
    echo 'Inserito !<br />';
} else {
    die("Errore nella query: " . pg_last_error($conn));
}

Ps: è solo una parte di codice, quella in qui premi il bottone la devi farla ma si tratta di un form post.
Ciao, fammi sapere

grazie 1000 sei stata di enorme aiuto provo e ti faccio sapere!!!

È un'eresia fare delle query secche su DB per aggiungere un utente. Può essere giustificato solo se sei obbligato a farlo da un software esterno scritto in qualche altro linguaggio.
Se lo fai da un modulo drupal DEVI usare http://api.drupal.org/api/drupal/modules--user--user.module/function/use... o comunque qualcosa preso da quell'API.

Angelo Turetta

come già detto esiste già una pagina per creare utenti.
vedere anche
http://drupal.org/project/ucreate

mi serve necessariamente una query di insert perchè un'altra applicazione mi passa i parametri in post io da quelli devo creare un nuovo utente.

certo, prendi tutti i parametri del post e generi un oggetto come serve per user_save.
Se usi il DB direttamente te ne pentirai, presto o tardi.

Angelo Turetta

Io penso che si possa senza generazione di errori e vi spiego il perchè:

le query che ho postato sono quelle generate quando l'amministratore genera un nuovo utente in admin/user/user/create

Se mi date un valido motivo che non possano funzionare allora mi correggo, ma dato che ho già testato questa opzione, mi permetto di proporla e condividerla.

Poi il programmatore fa quello che gli serve: si chiama open source.
Mi sbaglio?

Ciao ciao

Perché vanno usate le api di drupal e non query dirette altrimenti in un cambio di versione diventi matto a rifare tutto e se c'è uno strumento è meglio usarlo, altrimenti non si usa drupal ma si fa a mano.

danzisiweb wrote:
Poi il programmatore fa quello che gli serve: si chiama open source.
Mi sbaglio?

Il fatto è che, se qualcuno chiede consiglio su come fare una cosa, io cerco di rispondere con il metodo più corretto rispetto all'ambiente che stiamo usando: Drupal.
Se il codice in questione gira dentro un modulo drupal, NON È CORRETTO USARE QUERY DIRETTE. Dove è possibile, bisogna usare le API. Se le API non fanno quello che serve (e può succedere), occorre scrivere delle query rispettose dello strato DB di Drupal, es: (preso dal codice di user_save)
<?php
 $success
= db_query('INSERT INTO {users} (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $s) . ')', $values);
?>

che permettono di adattarsi senza patemi a prefissi di tabelle, diversi motori DB, ecc..

Poi, ognuno fa quello che gli pare. Di certo non lo fermo io... :)

Angelo Turetta

Il motivo principale per non fare una query diretta al db per creare un utente è che così ti perdi tutto il meccanismo degli hook di drupal. Metti che a un certo punto vuoi usare il modulo Rules per farti mandare una mail tutte le volte che un utente viene creato (sia dal tuo pulsante che dalla form di registrazione standard di drupal), con il tuo metodo questo non funziona perché facendo la insert sul db non permetti agli altri moduli di inserirsi nel flusso di creazione dell'utente.