Autor | Zpráva | ||
---|---|---|---|
Duchaplny Profil |
Zdravím,
vytvoril som si jednoduchú poštu pre súkromnú komunikáciu medzi užívateľmi. Mám to robené klasicky cez formuláre (napíš novú správu) a výpis je cez cyklus while . Všetko funguje ako má, keď sa posiela pošta jednotlivcom. Akurát neviem, ako spraviť to, aby som napísanú poštu mohol posielať viacerým naraz a oddeľovať ich napr. čiarkou abo bodkočiarkou.
Príjemca: meno1, meno2, meno3 Príjemca: meno1; meno2; meno3 Asi sa to bude musieť nejak rozdeliť a kontrolovať každé meno zvlášť, či existuje. Tu už však neviem ako pokračovať. |
||
ahoj Profil * |
#2 · Zasláno: 31. 3. 2012, 11:41:23
Nechápu, jak ta funkce souvisí s otázkou. Poštu máš předpokládám v databázi. Při poslání zprávy musíš rozeznat, že má zpráva jít několika lidem a pak ji prostě přidáš do tabulky v patřičném počtu exemplářů. jednotlivá jména (ať už budou odděena čárkou nebo středníkem) získáš pomocí explode.
|
||
Duchaplny Profil |
#3 · Zasláno: 31. 3. 2012, 11:51:47
ahoj:
Napísal som to pre istotu, bo si nie som istý, či na tom záleží alebo nie. Čiže takéto niečo by mohlo stačiť ? $meno=explode(", ", $_POST["meno"]); $meno=explode("; ", $_POST["meno"]); |
||
ahoj Profil * |
#4 · Zasláno: 31. 3. 2012, 12:01:45
Duchaplny:
Nevím, jakoým způsobem ten řetězec $_POST["meno"] skládáš a co v něm vlastně je, takže bych to udělal spíš takhle: $wrk = $_POST["meno"]; $wrk = str_replace ( ",", ";", $wrk ); $arr = explode (";", $wrk); foreach($arr as $item) { $sql = "INSERT INTO posta ( komu, ..... ) VALUES ( '".trim($item)."', .... )"; $res = mysql_query($sql); } |
||
Duchaplny Profil |
ahoj:
$_POST["meno"] prevádzam na ID užívateľa a to zapisujem do db cez string $prijemca . Tvoj príklad som skúsil a mám tam niekoľko problémov. Keď skúšam poslať poštu 1 osobe, tak to ide, ale keď použijem "," alebo ";" a píšem viacerým, tak mi to vypíše, že zadané meno nie je registrované.
Zapísal som to takto: $hromadna_posta = (int) $prijemca; // $prijemca obsahuje ID užívateľa, v tomto príklade napr. "1" $hromadna_posta = str_replace (",", ";", $hromadna_posta); $hromadne = explode (";", $hromadna_posta); foreach ($hromadne as $prijmatel) {mysql_query ("INSERT INTO posta (..., prijemca) values ('"..."', '".trim($prijmatel)."');", $GLOBALS["result"]);} |
||
ahoj Profil * |
#6 · Zasláno: 31. 3. 2012, 13:50:58
Duchaplny:
V tom kódu co píšeš, žádná hláška "nie je registrované" není. Chybu máš ale už na prvním řádku, kde řetězec (např "1,2,3,4,5") převádíš na integer. Výsledkem je nula. Že se snažíš to ošetřit, je chvályhodné, ale musíš to udělat až potom, co ten řetězec rozlámeš na čísla. |
||
Duchaplny Profil |
ahoj:
tú hlášku som písal hneď v prvom príspevku u tej funkcie, ktorá kontrolovala mena v db a sám si mi napísal "Nechápu, jak ta funkce souvisí s otázkou.", tak som to zmazal. Tá ochrana nebude jediný problém, pretože do výsledku (keď zadám viacerých príjemcov) mi neprejde ani $prijemca ani $hromadna_posta či $prijmatel . Proste sú to prázdne stringy, takže chyba bude zrejme niekde inde. Jediná $hromadne mi vypíše vo výsledku Array.
EDIT: Chyba bude v tomto: $prijemca získavam týmto spôsobom:
$uzivatel=mysql_fetch_assoc(mysql_query("SELECT id FROM uzivatelia WHERE meno='".$_POST[meno]."'")); $prijemca=$uzivatel[id]; |
||
ahoj Profil * |
#8 · Zasláno: 31. 3. 2012, 14:43:00 · Upravil/a: ahoj
Duchaplny:
Dáváš sem kousky kódu a píšeš o něčem, co je mimo něj. Když z toho kódu v [#5] vyhodíš ten první řádek a někde nad tím bude zadáno, že $hromadna_posta = "1,2,3", tak to fungovat bude. Co a jak do $hromadna_posta nebo $prijemca dáváš ty, to netuším. Podívej se, co nad tím máš. Duchaplny: > EDIT: Chyba bude v tomto: $prijemca získavam týmto spôsobom: > > $uzivatel=mysql_fetch_assoc(mysql_query("SELECT id FROM uzivatelia WHERE meno='".$_POST[meno]."'")); > $prijemca=$uzivatel[id]; To chyba je. Ten dotaz nebo něco, co ho nahradí, musí být až uvnitř toho cyklu foreach ($hromadne as $prijmatel) |
||
Duchaplny Profil |
ahoj:
Takto to zadávam do formulára: Príjemca: user1, user2 Príjemca: user1; user2 Výsledok: Uvedené meno nie je registrované. // Keď zadám jedno meno, tak to odošle, keď dám 2+, tak táto hláška. $dorucena=mysql_fetch_assoc(mysql_query("SELECT id FROM uzivatelia WHERE meno='".$_POST[meno]."'")); $prijemca="$dorucena[id]"; function menovdb ($meno) {$vysledok=mysql_query("SELECT meno FROM uzivatelia WHERE meno='".$_POST["meno"]."'", $GLOBALS["result"]); return (boolean) mysql_num_rows($vysledok);} if (!menovdb($_POST["meno"])) echo "Uvedené meno nie je registrované."; else $hromadna_posta="$prijemca"; $hromadna_posta=str_replace (",", ";", $hromadna_posta); $hromadne=explode (";", $hromadna_posta); foreach ($hromadne as $prijmatel) {mysql_query ("INSERT INTO posta (..., prijemca) values ('"..."', '".trim($prijmatel)."');", $GLOBALS["result"]);} |
||
ahoj Profil * |
#10 · Zasláno: 31. 3. 2012, 17:18:21
Duchaplny:
Tvůj styl psaní by rozplakal i racka chechtavýho. - Odsazuj text tak, aby ti odsazování pomáhalo s orientací. Tak jak odsazuješ, je to k ničemu. - Ve větvích if..else používej chlupaté závorky { . Vždycky. - Nastuduj si používání uvozovek a apostrofů - Nemotej funkce mezi ostatní php $hromadna_posta=$_POST['meno']; $hromadna_posta=str_replace (",", ";", $hromadna_posta); $hromadne=explode (";", $hromadna_posta); $qry = "SELECT meno FROM uzivatelia WHERE meno IN (".implode(",", $hromadne).")"; $res = mysql_query($qry); $cnt = mysql_num_rows($res); if ($cnt > 0 ) { while ($row=MySQL_Fetch_Array($res)): $meno = $row["meno"]; $ssql = "INSERT INTO posta ( prijemca .... ) VALUES ( '".$meno."', .. )"; $vysledek2 = mysql_query( $ssql); endwhile; }; |
||
Duchaplny Profil |
#11 · Zasláno: 31. 3. 2012, 21:38:07
ahoj:
- odsadzovanie mi plne vyhovuje, vyznám sa v tom a príde mi to oveľa prehľadnejšie a pohodlnejšie, čo je nakoniec rozhodujúce. - v if..else zátvorky používam len na nevyhnutných miestach, v tomto mám chyby, ale kým to funguje, tak to moc neriešim. - apostrofy a úvodzovky mrknem, tie viem, že mám zle, na veľa miestach ich nepoužívam vôbec.. to doriešim, až dokončím úplne všetko. - funkciu som dal len sem na toto fórum pred podmienku a to len kvôli prehľadnosti, inak ich mám vždy na začiatku pred scriptami. Ten script, čo si napísal mi robí dve chyby. 1. mysql_num_rows vráti Warning: mysql_num_rows() expects parameter 1 to be resource - keď píšem 1 užívateľovi
2. Uvedené meno nie je registrované. - keď píšem 2+ užívateľom. Navyše si to celé napísal tak, že to rieši meno. Ja však meno vložím do sql, aby som získal ID a podľa ID to posielam, nie podľa mena. |
||
Časová prodleva: 12 let
|
0