PHP form doğrulama sorunu göndermek?

5 Cevap php

Benim kod mysql veritabanına 1999 gibi bir yıl kaydetmek için varsayalım ama bunu alışkanlık edilir. Bu kullanıcı sadece sayıları girmiş ve en az 4 sayı şey doğru girildi uzun veya olmadığını olup olmadığını görmek için kontrol eder ama alışkanlık doğru yıl kaydetmek? Ben bu sorunu nasıl düzeltebilirim.

Burada PHP kodudur.

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
    $year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));
} else if($_POST['year'] && strlen($_POST['year']) < 4) {
    echo '<p class="error">year is not correct!</p>';
}  else if($_POST['year'] == NULL) {
  // do something
}

Kod olacak burası.

    if (mysqli_num_rows($dbc) == 0) {
            $mysqli = mysqli_connect("localhost", "root", "", "sitename");
            $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, year) 
                                         VALUES ('$user_id', '$year')");
    }

    if ($dbc == TRUE) {
            $dbc = mysqli_query($mysqli,"UPDATE users 
                                         SET year = '$year' 
                                         WHERE user_id = '$user_id'");

            echo '<p class="changes-saved">Your changes have been saved!</p>';

    }

    if (!$dbc) {
            print mysqli_error($mysqli);
            return;
    }

İşte kod birlikte olduğunu.

if (isset($_POST['submit'])) { 

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
    $year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));
} else if($_POST['year'] && strlen($_POST['year']) < 4) {
    echo '<p class="error">year is not correct!</p>';
}  else if($_POST['year'] == NULL) {


    if (mysqli_num_rows($dbc) == 0) {
            $mysqli = mysqli_connect("localhost", "root", "", "sitename");
            $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, year) 
                                         VALUES ('$user_id', '$year')");
    }

    if ($dbc == TRUE) {
            $dbc = mysqli_query($mysqli,"UPDATE users 
                                         SET year = '$year' 
                                         WHERE user_id = '$user_id'");

            echo '<p class="changes-saved">Your changes have been saved!</p>';

    }

    if (!$dbc) {
            print mysqli_error($mysqli);
            return;
    }


    }

}

Sorun bu hat üzerinde olmak zorundadır.

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
$year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));

5 Cevap

Eğer $ _POST ["yıl"] == null sadece sorguyu çalıştırın. Bunu size yapmak istiyorum ne emin misin?

Belki böyle bir şey ilk bloğunu değiştirin:

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
    $year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));
} else if($_POST['year'] && strlen($_POST['year']) < 4) {
    echo '<p class="error">year is not correct!</p>';
}  

if (isset($year)) {

Öncelikle, bir error_log($_POST['year']); veya echo $_POST['year']; yere mantık ifadesi yukarıda $_POST['year'] gönderilirken ne kontrol edin.

İkincisi, aslında, ben sterilize çalışıyoruz tahmin ediyorum sadece $year değişkeni bu kodu yazılı herhangi bir sorunuz yok.

Eğer if / else deyimi zincirinin bir mantık hatası var gibi üçüncü görünüyor.

Bu deneyin.

if (isset($_POST['submit'])) 
{ 

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
    $year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));
} else if($_POST['year'] && strlen($_POST['year']) < 4) {
    echo '<p class="error">year is not correct!</p>';
}  else if($_POST['year'] == NULL) {

} else {
    if (mysqli_num_rows($dbc) == 0) {
            $mysqli = mysqli_connect("localhost", "root", "", "sitename");
            $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, year) 
                                         VALUES ('$user_id', '$year')");
    }

    if ($dbc == TRUE) {
            $dbc = mysqli_query($mysqli,"UPDATE users 
                                         SET year = '$year' 
                                         WHERE user_id = '$user_id'");

            echo '<p class="changes-saved">Your changes have been saved!</p>';

    }

    if (!$dbc) {
            print mysqli_error($mysqli);
            return;
    }


    }

}

Siz form elemanından $ yıla yıl sizin kaçtı dize değeri geçen gibi görünüyor ama onunla bir şey yapıyor olması görünmüyor (en azından göstermek) olduğunu?

Nerede veritabanına koymak için kod nedir?

Gibi bir şey:

$mysqli->query("insert into table (ColumnName) values ('$year')";

SİZİN kod örneği GÜNCELLEME SONRA DÜZENLE:

Senin yıl null SADECE IF DB kodu yayınlanıyor. David / Josh tarafından gösterildiği gibi kodunuzu değiştirin. :-)

Ben David doğru olduğunu düşünüyorum. Eğer Yukarıda verilen tüm kodunu değiştirmeyi deneyin:

if (isset($_POST['submit'])) 
{ 
    if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {
        $year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));
    } else if($_POST['year'] && strlen($_POST['year']) < 4) {
        echo '<p class="error">year is not correct!</p>';
    } else {
        // echo 'Year is blank' or whatever you like here
    }

    // if $_POST['year'] was entered correctly, $year will now
    // have an assigned value and the mysql query will exit
    if (isset($year)) {
        if (mysqli_num_rows($dbc) == 0) {
                $mysqli = mysqli_connect("localhost", "root", "", "sitename");
                $dbc = mysqli_query($mysqli,"INSERT INTO users (user_id, year) 
                                             VALUES ('$user_id', '$year')");
                // uncomment below to see the query
                // echo "INSERT INTO users (user_id, year) VALUES ('$user_id', '$year')";
        }
        // I'd suggest changing this if ($dbc) { to:
        else {
                $dbc = mysqli_query($mysqli,"UPDATE users 
                                             SET year = '$year' 
                                             WHERE user_id = '$user_id'");
                // uncomment below to see the query
                // echo "UPDATE users SET year = '$year' WHERE user_id = '$user_id'";
                echo '<p class="changes-saved">Your changes have been saved!</p>';
        }
        if (!$dbc) {
                print mysqli_error($mysqli);
                return;
        }


        }
    }
}

Ayrıca, yerine bir if-else deyimi daha bloklar, bu ne sorgu bile idam edildiğini şekilde mümkün olmadığını orijinal sorgu her iki tayininde içinde olduğunu düşünüyor. Yukarıdaki kod yani sorguları en az bir yürütecek, bir if-else onu değiştirir. Ben ne olursa olsun özgün kod niyet olduğuna inanıyorum.

O still çalışma değilse, sorguları yankı ve aslında veritabanına gönderilen neler olduğunu görmek için satırları yorumsuz.

Emin verilerinizi sterilize aşırı çalışıyoruz:

if(isset($_POST['year']) && intval($_POST['year']) && strlen($_POST['year']) == 4) {

Güzel. Bu değer aslında sunulan verilere mevcut olup olmadığını görmek için iyi, ve orada alandaki sayısal değer çeşit, ama eğer ...

$year = mysqli_real_escape_string($mysqli, $purifier->purify(htmlentities(strip_tags($_POST['year']))));

Tüm bu etkisi sayısal olmayan hiçbir şey orada var olduğunu sağlamak için ise, o zaman neden sadece böyle bir şey yapamaz:

$year = null;
if (isset($_POST['year'])) {
    $year = preg_replace('/\D/', '', $_POST['year']) // replace anything non-numeric with nothing
    if ($year < 1000) {
        $year = null;
    )
}

Bu herhangi bir teşebbüs veya html sql kurtulmak veya javascript enjeksiyon, saf sayısal veri var sağlamak ve aynı zamanda varlık y10k, y100k, vs .. uyumlu en az 4 haneli bir yıl var, hem de var olmasını sağlar alır .

$ Yıl temizlenmiş oldu sonra, sonra bu gibi veritabanına sopa:

if (!isnull($year)) {
    $sql = <<<EOF
INSERT INTO users (user_id, year) 
VALUES ($user_id, $year)
ON DUPLICATE KEY UPDATE
    year=VALUES(year);
EOF;
    $stmt = mysqli_query($sql) or die("Query error: " . mysqli_error()):
}