E-posta formu dan mysql veritabanına takılı değildir

4 Cevap php

Benim sitelerden biri için bir bülten var ve e-posta mysql veritabanına gönderilen olamaz.

Here is the html form code: subscribe

        <h2>newsletter</h2>
        <br /><input type="text" name="email" value="" id="email" />

        <input type="button" name="submit" onclick="submit_it()" value="OK" />

        <script type="text/javascript" charset="utf-8">

            function submit_it() {

                var cate_value = $('#cate').val();
                var email_value = $('#email').val();

                $.post("subscribe.php", { email: email_value , cate: category_value }, function(response) {

                    if (response!='') {alert(response)};
                    alert('ok');

                });

            }

        </script>


</body>

And here is the php processing code:

$host = "localhost";
$user = "some_user";
$password = "some_pass";
$database = "news";


$server = mysql_connect($host, $user, $password);
$connection = mysql_select_db($database, $server);


function sql_quote($value) {

    $value = str_replace('<?','',$value);
    $value = str_replace('script','',$value);

    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    if (!is_numeric($value)) {
        $value = "'" . mysql_real_escape_string($value) . "'";
    } else {
        if ((string)$value[0] == '0') {
            $value = "'" . mysql_real_escape_string($value) . "'";
    }}
    return $value;
}



$q = "INSERT INTO emails (email,cate) VALUES (".sql_quote($_POST['email']).",".$_POST['cate'].")";

mysql_query($q);

>

Ben o iş yapmak için çalışıyoruz son 5hrs için bu ile kandırıyorlar oldum ve ben sadece bunu anlamaya olamaz çünkü herhangi bir yardım çok takdir artı ben artık ona bakamıyorum. Gözlerim şimdi zarar. lol Tekrar teşekkürler.

4 Cevap

Hobodave anlaşılacağı gibi kesinlikle kodunuzu yeniden gerekir. Ben bir şey olsa, db yapılandırma ile yanlış olduğunu düşünüyorum. Lütfen sorguyu yürütmek için, arada bu deneyin:

$result = mysql_query($q);
if( $result ){
    echo( 'OK' );
} else {
    echo( 'Invalid query: ' . mysql_error() );
}

Sizin PHP sql_quote fonksiyonu str_replace () filtreleme var olan very saflık olur. Bu bypass ve veritabanı istenmeyen veri eklemek için saçmadır.

Ben aşağıdaki kod yenkimliken yazma öneririz:

<?php
$host = "localhost";
$user = "some_user";
$password = "some_pass";
$database = "newsletter";

$server = mysql_connect($host, $user, $password);
$connection = mysql_select_db($database, $server);

function sql_quote($value)
{
    if (get_magic_quotes_gpc()) {
        $value = stripslashes($value);
    }
    return mysql_real_escape_string($value);
}

$email = $_POST['email'];
$category = $_POST['category'];
if (filter_var($email, FILTER_VALIDATE_EMAIL) 
    && FALSE !== filter_var($category, FILTER_VALIDATE_INT)
) {
    $q = sprintf("INSERT INTO emails (email, category) VALUES ('%s', '%s')",
        sql_quote($email),
        sql_quote($category)
    );
    // execute query
} else {
    // Do what you want with invalkimlik data
}

Ben de aşağıdaki değişiklikleri öneririm:

Edit:

Neden bu form gönderme işlemek için AJAX kullanıyor? Ben herhangi bir yarar görmüyorum. Sen sadece bir form göndererek, özel bir şey yapmıyoruz.

Ben tamamen AJAX kaldırma ve niyetiyle olarak sadece Gönder düğmesini kullanarak öneririm.

Eğer olsa ısrar ederseniz, en azından geçici olarak test basitleştirmek için kaldırabilirsiniz.

Sen Sorguda sözdizimi hatası var bu deneyin

$email = sql_quote($_POST['email']);
$category = $_POST['category'];
$q = "INSERT INTO emails (email,category) VALUES ('$email','$category')";

Eğer veri için anahtar olarak data kullanmak zorunda.

 $.ajax(url: "ajax_subscribe.php", 
         method : 'POST',
         data: { email: email_value , category: category_value },           
         success: function(response) {

                if (response!='') {alert(response)};
                alert('Thank You !');

            });