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
alebo
Príjemca: meno1; meno2; meno3
EDIT: bezpredmetné..
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 *
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
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"]);
alebo
$meno=explode("; ", $_POST["meno"]);
Len ako ďalej s INSERT do db ? Keď to nechám tak ako to je, tak to pochopí, že ich je viac alebo treba úpravu ?
ahoj
Profil *
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 *
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 *
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
alebo
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.
Dám to sem komplet. Skús na to pozrieť a zistiť, kde je problém a ako ho vyriešiť:
$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 *
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0