Autor Zpráva
luboxxx
Profil
Dobrý den,
narazil jsem na problém, při kterém se mi nedaří uložit proměnné z formuláře do mysql db.
Zaslání e-mailu mi pomocí phpmaileru funguje .. jen ještě potřebuju, aby se email s dalšími proměnnými uložily do db..

<?php
if( isset($_POST) ){
    
    //form validation vars
    $formok = true;
    $errors = array();

    //form data
    $jmeno = mysql_real_escape_string($_POST['jmeno']);    
    $email = mysql_real_escape_string($_POST['email']);
    
    //validate form data
    
    //validate jmeno is not empty
    if(empty($jmeno)){
        $formok = false;
        $errors[] = "Nevyplnili jste svoje jméno.";
    }
    
    //validate email address is not empty
    if(empty($email)){
        $formok = false;
        $errors[] = "Nevyplnili jste položku email.";
    //validate email address is valid
    }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $formok = false;
        $errors[] = "Vložený email není platný.";
    }
        
    //send email if all is ok
    if($formok){

        require "phpmailer/class.phpmailer.php";
        $mail = new PHPMailer();

        $body = file_get_contents('contents.html');
        $body = eregi_replace("[\]",'',$body);
        $mail->IsSMTP(); // telling the class to use SMTP
        $mail->Host       = "localhost"; // SMTP server
        $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                                   // 1 = errors and messages
                                                   // 2 = messages only
        $mail->SMTPAuth   = true;                  // enable SMTP authentication
        $mail->SMTPSecure = "tls";                 // sets the prefix to the servier
        $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
        $mail->Port       = 587;                   // set the SMTP port for the GMAIL server
        $mail->Username   = "";  // GMAIL userjmeno
        $mail->Password   = "";            // GMAIL password

        $mail->CharSet="utf-8";
        $mail->SetFrom('jmeno@yourdomain.com', 'neco');
        $mail->AddReplyTo("jmeno@yourdomain.com","neco");
        $mail->Subject = "subejctí";
        $mail->AltBody = "Pokud se obsah emailu nezobrazil, zkuste prosím použít jiný komatibilní prohlížeč emailu."; // optional, comment out and test
        $mail->MsgHTML($body);

        $address = $email;
        $mail->AddAddress($address, "adresnanejaka"); // jon doe

        if(!$mail->Send()) {  // odešleme e-mail
            $formok = false;
            $errors[] = "Došlo k chybě při odeslání e-mailu.<br>" . $mail->ErrorInfo;        
        }
        else{
            //echo 'E-mail byl v pořádku odeslán.';
    mysql_connect("localhost", "", "")or die(mysql_error()); // Connect to database server(localhost) with username and password.
    mysql_select_db("db_email_adres")or die(mysql_error()); // Select registration database.
    //sumbission data
    $ip= $_SERVER['REMOTE_ADDR'];
    $datum = date('d/m/Y');
    $cas = date('H:i:s');    
    $kod=md5(uniqid(rand()));    
    // ulozeni dat z pormenycha  inputu do MySQL DB

    mysql_query("INSERT INTO zaslat_info (zi_datum, zi_cas, zi_ip, zi_kod, zi_na_email) VALUES ('$datum','$cas','$ip','$kod','$email')");
            
        }
    
    }
    
    //what we need to return back to our form
    $returndata = array(
        'posted_form_data' => array(
            'jmeno' => $jmeno,
            'email' => $email,
        ),
        'form_ok' => $formok,
        'errors' => $errors
    );
        
    
    //if this is not an ajax request
    if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
        //set session variables
        session_start();
        $_SESSION['cf_returndata'] = $returndata;
        
        //redirect back to form
        header('location: ' . $_SERVER['HTTP_REFERER']);
    }
}

struktura db tabulky:
-- ----------------------------
-- Table structure for `zaslat_info`
-- ----------------------------
DROP TABLE IF EXISTS `zaslat_info`;
CREATE TABLE `zaslat_info` (
  `zi_id` int(11) NOT NULL AUTO_INCREMENT,
  `zi_datum` date NOT NULL,
  `zi_cas` time NOT NULL,
  `zi_ip` varchar(30) NOT NULL,
  `zi_kod` varchar(100) NOT NULL,
  `zi_souhlas` varchar(1) NOT NULL DEFAULT '0',
  `zi_na_email` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`zi_id`,`zi_na_email`,`zi_kod`,`zi_ip`,`zi_souhlas`)
) ENGINE=MyISAM AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of zaslat_info
-- ----------------------------
INSERT INTO `zaslat_info` VALUES ('1', '2012-02-13', '19:42:41', '127.0.0.1', 'valid=snca9a93db544202bea5af5a4e13ab8979e5198f16', '0', 'test@test.cz');

Kdyby se někomu podařilo najít v čem je problém a mohl by mi napsat řešení byl bych velice vděčný. I když ten hlavní problém je mezi židlí a klávesnicí:/
Keeehi
Profil
Vypíše se někde nějak chyba? Dostanete se vůbec do příslušného bloku?

Můžete zkusit za mysql_query přidat ještě:
echo mysql_errno() . ": " . mysql_error(). "\n";
luboxxx
Profil
Keeehi:
Děkuji za odpoveď..

tak jsem to teď zkoušel přidal jsem
<?php
error_reporting(E_ALL);
//vyzaduje php 5.3+ nastaveni casoveho spasma, jinak vypisuje chybu
date_default_timezone_set("Europe/Prague");
if( isset($_POST) ){

a pod mysql_query()..
echo mysql_errno($link) . ": " . mysql_error($link). "\n";, ale přesto nehlasi a ani nevypisuje žádnou chybu.. a když aktulizuju tabulku zaznamu tak se neprida do db.. i kdyz na email dojde odpoveď

takže problém přetrvává.. jinak k db mam local pristup .. jiné formuláře co jsme zkoušel tak se mi normálně uloží do db.. ale u tohohle opravdu netuším.. zkoušel jsem hodně možností a ani google mi nejak nemuze pomoct tak už jsem zoufalý.. nerad bych kvuli tomu uložení do db přepisoval vetšinu z kodu to si myslim ze by bylo zbytecny ale opravdu nedaří se mi dojít na to v čem by mohl být zakopaný pes..
Keeehi
Profil
luboxxx:
Buď se povede INSERT a tudíž data budou v tabulce, nebo se objeví nějaká chyba v mysql_error();

Pokud se neobjeví, tak kontrolujete třeba tabulku ve špatné databázi, nebo má prohlížeč nacachovanou stránku, kde jste ještě výpis mysql_error().
luboxxx
Profil
Keeehi:
Deprecated: Function eregi_replace() is deprecated in C:\web\www\HTML5FORM_DB\process.php on line 41

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\web\www\HTML5FORM_DB\phpmailer\class.phpmailer.php on line 1471

Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\web\www\HTML5FORM_DB\phpmailer\class.phpmailer.php on line 1475
Incorrect date value: '12/03/2012' for column 'zi_datum' at row 1


AAA Tak už jsem to opravil... děkuju ti mnohokrát| Keeehi | za čas a nervy :) fakt thx

přikládám opravený řešení
<?php
error_reporting(E_ALL);
//error_reporting(E_STRICT);
//vyzaduje php 5.3+ nastaveni casoveho spasma, jinak vypisuje chybu
date_default_timezone_set("Europe/Prague");
if( isset($_POST) ){
    
    //form validation vars
    $formok = true;
    $errors = array();

    //form data
    $jmeno = mysql_real_escape_string($_POST['jmeno']);    
    $email = mysql_real_escape_string($_POST['email']);
    
    //validate form data
    
    //validate jmeno is not empty
    if(empty($jmeno)){
        $formok = false;
        $errors[] = "Nevyplnili jste svoje jméno.";
    }
    
    //validate email address is not empty
    if(empty($email)){
        $formok = false;
        $errors[] = "Nevyplnili jste položku email.";
    //validate email address is valid
    }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $formok = false;
        $errors[] = "Vložený email není platný.";
    }
        
    //send email if all is ok
    if($formok){

        require "phpmailer/class.phpmailer.php";
        $mail = new PHPMailer();

        $body = file_get_contents("contents.html");
        $body = eregi_replace("[\]","",$body);
        $mail->IsSMTP(); // telling the class to use SMTP
        $mail->Host       = "localhost"; // SMTP server
        $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
                                                   // 1 = errors and messages
                                                   // 2 = messages only
        $mail->SMTPAuth   = true;                  // enable SMTP authentication
        $mail->SMTPSecure = "tls";                 // sets the prefix to the servier
        $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
        $mail->Port       = 587;                   // set the SMTP port for the GMAIL server
        $mail->Username   = "";  // GMAIL userjmeno
        $mail->Password   = "";            // GMAIL password

        $mail->CharSet="utf-8";
        $mail->SetFrom("jmeno@yourdomain.com", "nazev");
        $mail->AddReplyTo("jmeno@yourdomain.com","nazev");
        $mail->Subject = "predmet";
        $mail->AltBody = "Pokud se obsah emailu nezobrazil, zkuste prosím použít jiný komatibilní prohlížeč emailu."; // optional, comment out and test
        $mail->MsgHTML($body);

        $address = $email;
        $mail->AddAddress($address, "nazev"); // jon doe

        if(!$mail->Send()) {  // odešleme e-mail
            $formok = false;
            $errors[] = "Došlo k chybě při odeslání e-mailu.<br>" . $mail->ErrorInfo;        
        }
        else{
            //echo 'E-mail byl v pořádku odeslán.';
    mysql_connect("localhost", "root", "error404")or die(mysql_error()); // Connect to database server(localhost) with username and password.
    mysql_select_db("db_email_adres")or die(mysql_error()); // Select registration database.

           $ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
            $datum = mysql_real_escape_string(date("Y-m-d"));
            $cas = mysql_real_escape_string(date("H:i:s"));            
            $kod = mysql_real_escape_string(md5(uniqid(rand())));    
    
                // ulozeni dat z pormenycha  inputu do MySQL DB
             mysql_query("INSERT INTO zaslat_info (zi_datum, zi_cas, zi_ip, zi_kod, zi_jmeno, zi_na_email) VALUES ('$datum','$cas','$ip','$kod','$jmeno','$email')")or die(mysql_error());
        }
    
    }
    
    //what we need to return back to our form
    $returndata = array(
        'posted_form_data' => array(
            'jmeno' => $jmeno,
            'email' => $email,
        ),
        'form_ok' => $formok,
        'errors' => $errors
    );
        
    
    //if this is not an ajax request
    if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
        //set session variables
        session_start();
        $_SESSION['cf_returndata'] = $returndata;
        
        //redirect back to form
        header('location: ' . $_SERVER['HTTP_REFERER']);
    }
}
Keeehi
Profil
No a je to. Na řádku 70 má být:
$datum = date('Y-m-d');

nebo datum a čas můžete vynechat a v dotazu mít jen:
mysql_query("INSERT INTO zaslat_info (zi_datum, zi_cas, zi_ip, zi_kod, zi_na_email) VALUES (NOW(),NOW(),'$ip','$kod','$email')");
luboxxx
Profil
Keeehi:
jasně no ten zkrácený zápis se mi líbí ještě víc vidíš.. to se hodí :) super děkuju ještě to předělám .. zasluhuješ pochvalu před nastoupeným sborem :) thx
Keeehi
Profil
luboxxx:
Ještě by šlo jeden sloupeček ubrat a z toho druhého vytvořit sloupeček s typem datetime.
luboxxx
Profil
Keeehi:
no já bych právě pak chtěl 2sloupce zvlášť, aby se to dalo filtrovat zvlaš podle data a zvlášť podle času.. proto pro mě bude snadnější to mít takhle odělený než to mít v jednom a potom to třeba pomocí regex složitě kombit, abych to moch filtrovat.. ale rozumím jak to myslíš kdybych to chtěl zjednošit určitě to použiju:) Každopádně cenný rady si cením nad sůl:)
Keeehi
Profil
luboxxx:
I v jednom sloupci se to dá dobře filtrovat. A to bez použití regulárů. MySQL má řadu funkcí na práci s datem a časem.
luboxxx
Profil
Keeehi:
Díky.. přidávám do oblíbených záložek :) prostuduju MySQL víc do hloubky...

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: