PHP kullanarak MySQL veritabanı ikili onay kutusunu değerleri ekleme

4 Cevap php

Ben PHP için yeni değilim, ve PHP ve MySQL kullanarak temel bir CMS oluşturma. Ben veritabanına karşısında benim HTML sayfasından onay kutusunu bilgi almak için mücadele ediyorum.

Nasıl değerler ikili 0 veya 1 değerleri olarak görünmesini sağlayabilirsiniz?

Aşağıdaki gibi HTML belgesi yazılır:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Create your news page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
        <fieldset>
            <legend>Checked components will show in the page</legend>
            <form method="POST" action="http://*********.php">
                <span class="label">Header</span>
                <input type="checkbox" name="header" value="HEADER">
                <br>
                <span class="label">Footer</span>
                <input type="checkbox" name="footer" value="FOOTER">

                <hr>
                <span class="label">Local news</span>
                <input type="checkbox" name="local" value="LOCALNEWS">
                <br>
                <span class="label">National news</span>
                <input type="checkbox" name="national" value="NATIONALNEWS">
                <br>
                <span class="label">International news</span>
                <input type="checkbox" name="international" value="INTERNATIONALNEWS">
                <p>
                <input type="submit">
            </form>
        </fieldset>
    </body>
</html>

Aşağıdaki gibi PHP belge yazılır:

<?php
    $user="user_***";
    $password="*********";
    $database="dbxyz";
    mysql_connect("localhost", $user, $password);
    mysql_select_db($database, $db_handle);
    mysql_select_db("dbxyz");
    if(isset($_POST['layout']))
    {
        foreach($_POST['layout'] as $value {
            $insert="INSERT INTO layout (header, footer, local, national, international) VALUES ('$value')";
            mysql_query($insert);
        }
    }
?>

4 Cevap

You are supposed to put all the values in the query at once.
It can be done like that:

$values = array(
    'header'        => null,
    'footer'        => null,
    'local'         => null,
    'national'      => null,
    'international' => null
);

foreach (array_intersect_key($_POST, $values) as $key => $value) {
    $values[$key] = mysql_real_escape_string($value);
}

mysql_query("INSERT INTO layout (header, footer, local, national, international) VALUES ('$values[header]', '$values[footer]', '$values[local]', '$values[national]', '$values[international]')");

Ayrıca, mysql_real_escape_string çağrı dikkat edin. Bu SQL enjeksiyonlar için kullanılabilir, parametresinin tüm karakterleri kaçar.

Onay kutularını bir formda işaretli değilse form gönderildiğinde, sonra anahtar / değer çifti gönderilmez, böylece her ayarlanmış olup olmadığını kontrol etmeniz gerekir. Yani:

$header = isset($_POST['header']) ? 1 : 0;

Bu değişken 'başlık' kutusu işaretli ise, başka o 0 olacak 1 olacak.

$header        = isset($_POST['header']) ? 1 : 0;
$footer        = isset($_POST['footer']) ? 1 : 0;
$local         = isset($_POST['local']) ? 1 : 0;
$national      = isset($_POST['national']) ? 1 : 0;
$international = isset($_POST['international']) ? 1 : 0;

$insert = "INSERT INTO layout (header, footer, local, national, international)
           VALUES ($header, $footer, $local, $national, $international)";

mysql_query($insert);

Ben MySQL 'BOOL'-veri türü için arıyorsanız düşünüyorum ...

Edit: Your code is actually loaded with syntax/code errors... I don't believe this actually runs. Can you paste the original here?

(1), 'on' ile $ _POST ['nameOfCheckboxField'] karşılaştırarak teslim üzerine onay kutusunu durumunu kontrol tablo tinyint değerleri depolar alanı yapmak, doğru değerlendirir eğer, db alanına 1 koymak , aksi takdirde 0 koydu.