2009-08-19 8 views
2

Ich bin neu in PHP und erstelle ein Basis-CMS mit PHP und MySQL. Ich habe Schwierigkeiten, die Checkbox-Informationen von meiner HTML-Seite in die Datenbank zu bekommen.Hinzufügen von binären Checkbox-Werten zur MySQL-Datenbank mit PHP

Wie kann ich die Werte als binäre 0 oder 1 Werte erscheinen lassen?

Das HTML-Dokument wird wie folgt geschrieben:

<!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> 

Und das PHP-Dokument wird wie folgt geschrieben:

<?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); 
     } 
    } 
?> 

Antwort

0

Ich glaube, Sie suchen die BOOL'-Datentyp‘MySQL. ..

Bearbeiten: Ihr Code ist tatsächlich mit Syntax/Code-Fehler geladen ... Ich glaube nicht, dass dies tatsächlich ausgeführt wird. Kannst du das Original hier einfügen?

0

Machen Sie das Feld, das die Werte in Ihrer Tabelle TINYINT (1) speichern wird, überprüfen Sie den Status des Kontrollkästchens beim Senden durch Vergleichen von $ _POST ['nameOfCheckboxField'] mit 'on', wenn es wahr ergibt, setzen Sie 1 Geben Sie andernfalls 0 in das Feld db ein.

2

Sie sollen alle Werte gleichzeitig in die Abfrage einfügen.
Es kann so geschehen:

$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]')"); 

Beachten Sie auch, die mysql_real_escape_string Anruf. Es entkernt alle Zeichen seines Parameters, die für SQL-Injektionen verwendet werden können.

+0

Und ja sein, wie die vorherigen Poster gesagt haben, sollten Sie das Kontrollkästchen konvertieren Werte auf 1 oder 0 und dann in einem Tinyint-Feld speichern. –

2

Wenn Kontrollkästchen in einem Formular nicht aktiviert sind, wird das Schlüssel/Wert-Paar beim Übergeben des Formulars nicht gesendet. Daher müssen Sie überprüfen, ob jedes Formular festgelegt ist. Also:

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

Diese Variable wird 1 sein, wenn die ‚Header‘ Feld aktiviert wurde, sonst wird es 0.

$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);