Autor Zpráva
senior
Profil
Príjemný deň,
neviem vyriesiť problém, aby mi ľudia nepísali do 2 polí formulára rovnaký obsah.
Ďakujem za pomoc.
martin1312
Profil
No neviem, čo je na tom ťažké, porovnáš obsah oboch polí, ak sú rovnaké tak vypíšeš nejaké upozornenie. Nenapísal si, či to potrebuješ v PHP, JavaScript alebo v niečom inom, takže lepšia odpoveď asi nie je.
senior
Profil
martin1312:
Formulár je v PHP. No neviem s tym pohnúť.
Potrebujem porovnať 2 inputy, jeden s name=text a druhy s name=text2
martin1312
Profil
<?php
if( trim($_POST['text']) == trim($_POST['text2']) )
    //chyba
else
    //pokracovanie v spracovani formularu
senior
Profil
martin1312:
Ďakujem veľmi pekne.
Vedel som, že je to treba urobiť cez podmienku, ale nič mi nefungovalo. Idem to hneď vyskúšať.
senior
Profil
martin1312:
Nepodarilo sa mi to rozchodiť :-(
peta
Profil
senior: Tak to mas asi chybu v kodu. V kodu, ktery jsi nedal k dispozici. Kod od martin1312 vypada funkcni. On ho dal k dispozici a je mozne jeho kod zkoumat a hledat chyby.
senior
Profil
peta:
Tu je kód, kde treba vložiť tú podmienku:
...
 $message .= "\nDATUM: ".date('d.m.Y, H:i');

    $kon = cs_mail ($to, $subject, $message, "From: $from\n");

    if ($kon) {
        header("Location: ".$_POST[redirect]);
    } else {
        include "formerror4.php";    
    } 

?>

Stránka "formerror4.php" je stránka s chybovým hlásením.
martin1312
Profil
posli kod s tou vlozenou podmienkou, som zvedavy, kde to davas...
senior
Profil
martin1312:

...

$message .= "\nDATUM: ".date('d.m.Y, H:i');

    if( trim($_POST['text']) == trim($_POST['text2']) )
    //chyba
    
    else

    $kon = cs_mail ($to, $subject, $message, "From: $from\n");

    if ($kon) {
        header("Location: ".$_POST[redirect]);
    } else {
        include "formerror4.php";    
    } 

?>
RockFire
Profil
Lépe to asi bude takto:

<?php

$message .= "\nDATUM: ".date('d.m.Y, H:i');

if( trim($_POST['text']) == trim($_POST['text2']) )
    include "formerror4.php"; 
else {
    cs_mail ($to, $subject, $message, "From: $from\n");
    header("Location: ".$_POST['redirect']);
}
 
?>

Nevím, jak přesně funguje funkce cs_mail, předpokládám, že ji máte správně.
senior
Profil
RockFire:
Ani toto riešenie nefunguje, chyba bude niekde inde.
Funkcia cs_mail je v poriadku, pretože s inými podmienkami funguje normálne.
Ukážka jednej z podmienok:
...    
$message .= "\nDATUM: ".date('d.m.Y, H:i');

    if ($_POST["kod"] != "0000") {       
    include "formerror1.php";    
    exit;  
    }  

    $kon = cs_mail ($to, $subject, $message, "From: $from\n");

    if ($kon) {
        header("Location: ".$_POST[redirect]);
    } else {
        include "formerror1.php";    
    } 

?>
RockFire
Profil
senior:
Funguje, teď jsem to dokonce velmi zjednodušeně naprogramoval, a jde to. Popiš přesně chybu, nevím, co znamená nefunguje.
senior
Profil
RockFire,

Server vypíše túto hlášku:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ']' in /domains1/gh739400/public/www_root/form4.php on line 52

Riadok 52:
header("Location: ".$_POST['redirect']);
RockFire
Profil
senior:
Někde je chyba v uvozovkách. Můžete poslat celý skript, nebo alespoň rozsah řádků 50-52?
peta
Profil
Co treba poslat cely kod? Pripadne vyuzit link na http://jsfiddle.net/ ? Kdyz to das do casti s JS, tak ti to jaksi obarvi a obarveni by mohlo prozradit problem s uvozovkami. kde se to jeste obarvuje urcite dobre, kde spatne a kde si nejsi jisty. Pripadne pspad umi obarvovani.
Jinak by tam mohl byt problem i se zavorkami u nove podminky.
if (podm) {nic} else {$kon=cs_mail...;}
Pak mas
    if ($kon) {
Jenze kon je treba undefined.
$_POST[redirect]);
O konstante redirect nevime z toho kousku nic. Mozna to mela byt promenna $redirect nebo index 'redirect'? Prispevek [#11] RockFire, on ti to tam spravil a v nasledujicim kousku kodu to mas zase spatne.

Treba by mozna stalo za to si to prepsat takto, at vis, ze podminka funguje spravne a problem je jinde:
<?php
    if( trim($_POST['text']) == trim($_POST['text2']) )
    {
    echo 'chyba';
    }    
    else
    {
    echo 'proslo';
     $kon = cs_mail ($to, $subject, $message, "From: $from\n");
    }
?>
senior
Profil
RockFire, peta:
Ďakujem vám veľmi pekne za ochotu a váš čas. Nie som žiadny guru v PHP a preto som poprosil o pomoc, pretože v mojom veku (66) ide už iba o hobby. Keďže sa mi to nepodarilo ani s vašou pomocou vyriešiť, tak som to vzdal, aj keď by mi to pomohlo.

Nechápem prečo to s jednou podmienkou funguje viď. [#12] - keď sa zadá správne číslo kodu, zobrazí sa stránka o úspešnom odoslaní a keď sa zadá nesprávny kód, tak sa zobrazí stránka s chybovou hláškou.
Chcel som iba vylepšiť stránku [#12] o podmienku [#3].
Prajem príjemný večer.
Petr__
Profil *
senior:
Myslím, že se zbytečně vzdáváte příliš brzo, čímž jste navíc promrhal dosavadní snahu ostatních. Přidání jedné primitivní podmínky je prkotina. Asi děláte chybu, kterou si neuvědomujete, takže ji nejste schopen ani interpretovat. Proto tu už několikrát zazněla výzva k zaslání nejlépe CELÉHO kódu VČETNĚ vámi vložené podmínky. Nechcete to ještě zkusit?
senior
Profil
Tu je celý kód:
<?php
 if ($_POST["website"] != "") {
    exit ("Toto vyplnil robot.");
  }

// ******************************************************************************************

    function autoUTF($s)
    {   
    // detect UTF-8                         
    if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s))
    return $s;
    // detect WINDOWS-1250
    if (preg_match('#[\x7F-\x9F\xBC]#', $s))
    return iconv('WINDOWS-1250', 'UTF-8', $s);
    // assume ISO-8859-2
    return iconv('ISO-8859-2', 'UTF-8', $s);
    }

    function cs_mail ($to, $subject, $message, $head = "")
    {  $subject = "=?utf-8?B?".base64_encode(autoUTF ($subject))."?=";
    $head .= "MIME-Version: 1.0\n";
    $head .= "Content-Type: text/plain; charset=\"utf-8\"\n";
    $head .= "Content-Transfer-Encoding: base64\n";
    $message = base64_encode (autoUTF ($message));
    return mail ($to, $subject, $message, $head);
    }

// ******************************************************************************************

$recipents = array("peter@centrum.sk"); // Email adresy, na ktore bude formular odoslany. V uvodzovkach, oddelene ciarkami
$ignoreElements  = array("redirect", "odoslat");        // Polia z formulara, ktore budu ignorovane
$to = implode(", ", $recipents);
$from =  $_POST['Email'];                // Odosielatel
$subject = $_POST['Result'];
$message =$_POST['Sprava'];
$formerror1 = "Odoslanie prihlášky bolo neúspešné.<br>Pravdepodobne ste uviedli nesprávny kód.<br>Skúste prihlášku odoslať znova!";

foreach ($_POST as $key=>$value){
if (($value !="") && (!in_array($key, $ignoreElements))){
$message .= "\n".$key.": ".$value;
}
}
$message .= "\nIP: ".$_SERVER['REMOTE_ADDR'];
$message .= "\nDATUM: ".date('d.m.Y, H:i');

    if ($_POST["kod"] != "0000") {       
    include "formerror1.php";  
    exit;  
    }  

    $kon = cs_mail ($to, $subject, $message, "From: $from\n");

    if ($kon) {
        header("Location: ".$_POST[redirect]);
    } else {
        include "formerror1.php";    
    } 

?>
V riadku 31 to má byť v jednom riadku. Neviem prečo to roztrhlo na 2 riadky.
peta
Profil
if( trim($_POST['text']) == trim($_POST['text2']) )
Takova podminka v kodu neni uvedena. Takze je to kod bez te podminky? Tam preci chyba neni, ne? Proc tam mame hledat chybu, kdyz tam zadna neni?
zalamovani kodu forem si nevsimej. Je to na dva radky, ale cislo radku je stale 31 :)
senior
Profil
peta:
Tu sú pokusy [#4], [#10], [#11] vložiť tú podmienku a keďže nefunguje, tak som to zmazal.
Kód na [#19] je plne funkčný. Potrebujem do neho vložiť podmienku [#3]. To je všetko. Doteraz všetky rady zlyhali :.(
Petr__
Profil *
A co má nastat v případě, že se inputy text a text2 rovnají? Nemá se odeslat e-mail? Má se odeslat email jen s hodnotou jednoho inputu? Nebo?
senior
Profil
Petr_,
Ak by bol text v inputoch text a text2 rovnaký, tak by sa formulár nemal odoslať a mala by sa zobraziť stránka s chybovou hláškou (formerror1.php).

Rovnako to funguje v podmienke
if ($_POST["kod"] != "0000") {       
    include "formerror1.php";  
    exit;  
    }  

to znamená, že ak sa napíše iný kód ako 0000 (napr. 1111), tak sa zobrazí stránka formerror1.php.
martin1312
Profil
tak to pridaj k tej existujúcej podmienke:
<?php
if ($_POST["kod"] != "0000" || trim($_POST['text']) == trim($_POST['text2'])) {       
    include "formerror1.php";  
    exit;  
    }
Petr__
Profil *
OK, tak tu zmíněnou část změňte na:

if ($_POST["kod"] != "0000" AND trim($_POST['text']) == trim($_POST['text2'])) {       
    include "formerror1.php";  
    exit;  
    }  

a mělo by to dělat co chcete.


martin1312 byl dříve (a lépe). Ještě má oprava:


if ($_POST["kod"] != "0000" OR trim($_POST['text']) == trim($_POST['text2'])) {       
    include "formerror1.php";  
    exit;  
    }  
senior
Profil
martin1312: Petr_:
Ďakujem veľmi pekne za pomoc. Vy ste veľkí supermani ;-)
Večer sa hneď do toho pustím a dám vedieť ako to funguje.
senior
Profil
martin1312:
podmienka if ($_POST["kod"] != "0000" OR trim($_POST['text']) == trim($_POST['text2'])) { funguje presne ako som chcel.
Ďakujem všetým za pomoc, ochotu a čas, ktorý venovali môjmu problému.
martin1312
Profil
Radi sme pomohli.
Inak ešte iba dodám, že:
AND sa môže zapísať ako &&
OR sa môže zapísať ako ||
ak by si náhodou nevedel, prečo to tam je.
senior
Profil
martin1312:
Ďakujem veľmi pekne za info. Priznám sa, že o tej informácii som ani netušil.
Ja som iba taký obyčajný samouk, za mňa sa to v škole neučilo a som rád, že som sa naučil zasa niečo nové.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0