Invio Email usando Array associativo

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Intanto buonasera a tutti

scrivo anche qui sperando che qualcuno possa aiutarmia risolvere un semplice problema che mi sta facendo dannare

pongo lo script

Codice:
<?php   // apro in lettura il file  
 $fp =  fopen("email.txt", "r");   
while(! feof($fp)) {     
// leggo una riga del file   
  $row = fgets($fp, 4096);     
// creo un  array dei campi della riga     
// usando il carattere , come separatore     
 $field =  split(",", $row);     
$field[0]=$nome;     
$field[1]=$email;   
  if ($utentex=$nome ) { 
$nome=$email;     
}  
 }   
 fclose($fp);

dopo il comando close c'è tutto il php per inviare l'email dove in $indirizzo mettendo un indirizzo email l'email viene spedita regolarmente

in pratica in $indirizzo invece di mettere l'indirizzo email voglio inserire la variabile $email che deve essere ricavata dallo script quotato......in pratica lo script quotato apre un file txt diviso in
Utentex,indirizzoemailx
utentey,indirizzoemaily

la variabile $utentex e presenet in un menù a tendina e proviene da un altra pagina php

devo dire che ho fatto molte prove tra cui una prova per verificarla con
Codice:
echo $nome
dopo la funzione if e così mi stampa a video il nome dell'utente x ma se metto
Codice:
echo $email
niente mi dà pagina bianca

quindi sono convinto che sbaglio la sintassi dell'array associativo ho fatto molte prove

Codice:
$array[$nome]=$email
$ciao=array($nome=$email)
etc.
ma niente di niente

sono un neofita del php e sopratutto autodidatta ma la sintassi dell'array con l'uso delle variabili non è molto chiara

qualcuno saprebbe aiutarmi a sistemare il codice?

Grazie dell'attenzione e spero che qualcuno possa aiutarmi
 
PHP:
$field[0]=$nome;
$field[1]=$email;
Uno degli errori è sicuramente quì... quindi una cosa per volta.
Devi invertire l'ordine di assegnamento.
In php l'ordine è: $nuova_variabile = $variabile_esistente quindi:
PHP:
$nome = $field[0];
$email = $field[1];

E non mi stancherò mai di dirlo: INDENTARE IL CODICE.
 
PHP:
$field[0]=$nome;
$field[1]=$email;
Uno degli errori è sicuramente quì... quindi una cosa per volta.
Devi invertire l'ordine di assegnamento.
In php l'ordine è: $nuova_variabile = $variabile_esistente quindi:
PHP:
$nome = $field[0];
$email = $field[1];

E non mi stancherò mai di dirlo: INDENTARE IL CODICE.

jan sei come una luce nel buio :beer:

ok questa cosa che hai spiegato mi sarà molto utile per il futuro, ho già invertito come da te suggerito però adesso se nella parte finale del codice per verificare se funziona inserisco

Codice:
echo $email;     
}  
else{ 
echo $nome;     
}  
 }

ci sono due cose che non funzionano

A)finalmente riesco a visualizzare anche il $field[1] però non me lo visualizza in funzione del $nome ma vedo tutta la colonna stessa cosa dicasi del nome

il database è strutturato così

Codice:
utentex,indirizzoemailx
utentey,indirizzoemaily

B) c'è da dire che nella pagina1.php ci sono 3 menù a tendina in uno c'è la lista dell'utentew che da un altro menù inserisce dei dati e decide di inviarli tramite terzo menù a utentex quindi facendo delle prove ho notato che anche quando apro solo l'utentew mi appare la colonna degli indirizzi mentre lo script deve visualizzarmi solo l'email (che poi andrà ad inserire in $indirizzo dello script per inviare l'email)dell'utentex

Può darsi che non vada bene il comando split ma provando con explode mi fà la stessa cosa

Spero in un tuo aiuto per sistemare sta cosa dell'array

P.s.. Cosa intendi epr INDENTARE il codice?

Grazie per l'aiuto :beer:
 
Passo due.
Elimina:
PHP:
if ($utentex=$nome ) { 
$nome=$email;     
}
e sostituiscilo con:
PHP:
$array_utenti[$nome] = $email;
oppure con:
PHP:
$array_utenti[] = array('nome' => $nome, 'email' => $email);
I codici sono differenti ma fanno più o meno la stessa cosa... dipende dalle tue esigenze.

Il primo codice lo puoi richiamare con:
PHP:
$array_utenti['nome_del_tuo_utente']
e ti restituisce l'email.

Nel secondo caso lo richiami con:
PHP:
$array_utenti[0]['nome']
e restituisce il nome oppure con:
PHP:
$array_utenti[0]['email']
e restituisce l'email.
Nel secondo caso al posto dello 0 (zero) devi mettere l'indice dell'array (che parte da 0).

Non l'ho testato ma dovrebbe funzionare...
Chiaramente puoi utilizzare e quindi sostituire quel codice con entrambi i modi che ti ho dato... l'importante è che cambi il nome a una delle due variabili perchè altrimenti si sovrappongono.

Per quanto riguarda il "cosa intendi per indentare il codice"... ti consiglio di leggere questo articolo: Indentazione.
 
:beer::beer::beer::beer::beer::beer::beer::beer::beer:

funziona sei un grande

però ti prego stammi dietro altri due minuti

A) quando faccio echo $array etc

mi visualizza più volte l'indirizzo email dell'utente segnato come mai?

es: mioindirizzo@xxxx.itmioindirizzo@xxxx.itmioindirizzo@xxxx.itmioindirizzo@xxxx.it

B)al posto di $array_utenti['nomeutente'] devo mettere $arrai_utenti[$variabile] dove la $variabile altro non è che $utentex proveniente da pagina1.php provando però mji dà pagina bianca e non mi visualizza l'email sai dirmi come mai?

Grazie grazie grazie ero da due settimane qua sù mi stai risollevando il morale :beer:
 
Strano... potresti postare l'url del file?
Se è in locale... caricalo su qualche server!


in utente2 clicca utentex

poi riguardo al punto B

la sintassi $array_utenti[$variabile] è corretta? se si come mai mi visualizza pagina bianca ?

devo forse richiamare la variabile con $utentex=$_POST[$utentex] ? se si in quale riga va inserita?

@ eliminato l'indirizzo visto che ho capito il motivo
 
Ultima modifica:
in utente2 clicca utentex

poi riguardo al punto B

la sintassi $array_utenti[$variabile] è corretta? se si come mai mi visualizza pagina bianca ?

devo forse richiamare la variabile con $utentex=$_POST[$utentex] ? se si in quale riga va inserita?

ok trovato il problema

in pratica sistemato il discorso della variabile facendo delle prove ho trovato il perchè ripete l'indiirzzo email o meglio in che modo pesa l'indirizzo

esempio:

nel file email.txt mettiamo caso ci siano 10 rige e l'utente x è alla 1^riga
lo script ripete l'indirizzo email fino alla fine del file per tot righe ossia 10 volte mentre se viene selezionato l'utente y che è alla 7^riga lo script ripete l'indirizzo email fino la fine del file quindi 3 volte e così via

probabilmente dipende dalla while(!feof) che legge l'intero file almeno credo

come si può ovviare al problema?


come si può ovviare al problema?
 
Prova a usare questo codice:
PHP:
$file = file('email.txt');
for ($i = 0; count($file) > $i; $i++) {
  $file[$i] = str_replace("\n", '', $file[$i]);
  $field = explode(',', trim($file[$i]));
  $nome = $field[0];
  $email = $field[1];
  $array_utenti[] = array('nome' => $nome, 'email' => $email);  
}
Non l'ho testato eh...
 
Prova a usare questo codice:
PHP:
$file = file('email.txt');
for ($i = 0; count($file) > $i; $i++) {
  $file[$i] = str_replace("\n", '', $file[$i]);
  $field = explode(',', trim($file[$i]));
  $nome = $field[0];
  $email = $field[1];
  $array_utenti[] = array('nome' => $nome, 'email' => $email);  
}
Non l'ho testato eh...


:crying::crying:

niente dà lo stesso risultato e ripete l'indirizzo email con lo stesso criterio

credo che si dovrebbe modificare la while dandogli l'istruzione di fermarsi a leggere finchè trova la riga contenente l'utente x ho letto qualcosa in giro mi rimetto in ricerca se poi magari trovi qualcosa te fammi sapere

:beer:
 
Mi spiace, ma quel codice l'ho appena testato e funziona perfettamente.
Contenuto del file email.txt:
Codice:
jaco,jacopo.nuzzi@jaydns.com
prova,prova@email.it
paris,paris@hilton.com
ferrari,info@ferrari.it
Se si richiama $array_utenti con entrambi i modi che ti ho segnalato funziona.

Se non ti funziona, cerca di spiegarti meglio, così magari si cerca di capire di che cosa sei in cerca.
 
Mi spiace, ma quel codice l'ho appena testato e funziona perfettamente.
Contenuto del file email.txt:
Codice:
jaco,jacopo.nuzzi@jaydns.com
prova,prova@email.it
paris,paris@hilton.com
ferrari,info@ferrari.it
Se si richiama $array_utenti con entrambi i modi che ti ho segnalato funziona.

Se non ti funziona, cerca di spiegarti meglio, così magari si cerca di capire di che cosa sei in cerca.

:beer::beer:

sei un GENIO avevi ragine funziona avevo sbaglito ad indirizzare il file

scusami avevo creato una nuova cartella ma l'action del form della pagina1.php era ancora indirizzata alla cartella vecchia

GRAZIE se eri donna ti mandavo un bacio :tifoso: erano diversi giorni se non settimane che ci lavoravo su

lo script nel complesso sarà molto più articolato quindi spero di poter contare nel tuo aiuto anche nelle prossime problematiche


intanto adesso provo ad accorpare questo script a quello epr inviare l'email sperando mi riconosca la variabile $email per la scelta dell'indirizzo

ciao e GRAZIE ancora
 
a proposito per la felicità ho dimenticato uina cosa forse la più importante:

potresti spiegarmi concettualmente come funziona quel codice?
 
La funzione file() apre un file e crea un array con ogni singola riga del file.
I ciclo for lavora su ogni riga del file singolarmente.
La funzione replace() l'ho usato per evitare che ci sia l'a-capo.
La funzione explode() separa una stringa tramite un carattere a scelta.
E il resto te l'avevo già spiegato prima!
 
La funzione file() apre un file e crea un array con ogni singola riga del file.
I ciclo for lavora su ogni riga del file singolarmente.
La funzione replace() l'ho usato per evitare che ci sia l'a-capo.
La funzione explode() separa una stringa tramite un carattere a scelta.
E il resto te l'avevo già spiegato prima!

grazie sei proprio un GRANDE quindi all fine questo codice val bene per altre occasioni e si potrebbe usare anche epr popolare una select.
 
Ovviamente sì!
Basta cambiare il codice...
Se hai bisogno di altro chiedi pure... (dopo aver fatto magari una bella ricerchina su google :P) ovviamente aprendo un'altra discussione e non in questa!

Bye :byebye:
 
Ovviamente sì!
Basta cambiare il codice...
Se hai bisogno di altro chiedi pure... (dopo aver fatto magari una bella ricerchina su google :P) ovviamente aprendo un'altra discussione e non in questa!

Bye :byebye:

tranquillo non è mia abitudine cercare la pappa pronta diceva mio nonno:

"Se trovi un affamato pesca per lui e lo avrai sfamato per un giorno insegnagli a pescare e lo avrai sfamato epr sempre"

quindi cerco sempre di arrivarci da solo poi ovviamente facendo le cose solo epr passione e non per lavoro e non avendo studiato il php ogni tanto mi serve uno spunto

oggi te me ne hai dato da mangiare :mavieni:

thank
 

Discussioni simili