3

HTML フォームがあります。フィールドが空の場合、DB のフィールドが実際には NULL になり、フィールドに NULL という単語が含まれないように設定できるようにしたいと考えています。このコードを使用すると役立つと思いましたが、フィールドに NULL という単語が表示されるだけです。PHP コード:

<pre>
<?php
            if (isset($_POST['oc_item'])) { 
            $oc_item = mysql_escape_string($_POST['oc_item']);
            $oc_itemdesc = (!empty($_POST['oc_itemdesc'])) ? $_POST['oc_itemdesc'] : NULL;

           $sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc)
            VALUES(''$oc_item','$oc_itemdesc')";

        mysql_query($SQL);
        if (mysql_query($sql)) {
            echo '<strong><em>Your data has been submitted</em></strong><br /><br />';
                } else {
            echo '<p>Error adding submitted info: ' . mysql_error(). '</p>';
        }
        }
        ?></pre>

HTML コード:

<pre>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

        <table>
        <tr>
            <td>Item Name</td>
            <td><input class="forms" type="text" size="50" maxlength="50" name="oc_item" /></td>
        </tr>
        <tr>
            <td>Item Description</td>
            <td><input class="forms" type="text" size="50" maxlength="50" name="oc_itemdesc" /></td>
        </tr>
</table>

        <p><input type="submit" value="Submit item" /></p>
        </form></pre>

フィールドを実際にNULLにして、フィールドに NULL という単語を含めないようにしたい。前もって感謝します。

4

4 に答える 4

1

$sql を出力すると、挿入されていることがわかります, 'NULL'

コードを変更して、作業「NULL」( '' 引用符なし)を挿入するか、そのパラメーターをまったく挿入しないようにする(, 'NULL'文字列の一部全体を削除する)必要があります。

于 2012-06-29T16:31:18.207 に答える
1

MySQL データベースに NULL を書き込みたい場合は、引用符なしで NULL を配置する必要があります。

このような:

INSERT INTO table (column, column2) VALUES ('mystring', NULL);

これを手動で行う場合は、クエリの if 条件を作成する必要があるため、常に少し手間がかかります。

覚えておいてください: PHP null!= MySQL NULL. 両者はお互いをまったく知りません。

しかし、私はまだ疑問に思っています、それはすべて質問名と何の関係があるのでしょうか? (そうでない場合は選択)

次のようにコードを記述できます。

$oc_item = mysql_escape_string($_POST['oc_item']);
$oc_itemdesc = (isset($_POST['oc_itemdesc']) && trim($_POST['oc_itemdesc']) != '') ? "'" . mysql_escape_string($_POST['oc_itemdesc']) . "'" : 'NULL';

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc)
        VALUES('" . $oc_item . "', " . $oc_itemdesc . ")";
# sorry for adding " . all the time, but I dislike variables within strings :D

しかし、SQL クエリ自体から離れて MySQL 文字列を引用符で囲む義務が移動するため、私はそれがあまり好きではないことを認めなければなりません。

于 2012-06-29T16:31:41.560 に答える
0

これを試して:

$oc_itemdesc = (!empty($_POST['oc_itemdesc'])) ? "'".$_POST['oc_itemdesc']."'" : "NULL";

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item',$oc_itemdesc)";

現状では、'NULL'代わりにNULL追加しているので、値の代わりに単語を追加しています。

$_POST['oc_itemdesc']サイドノート:説明にアポストロフィを入れると挿入ステートメントが完全に破棄されるため、注意して適切にエスケープ/エンコードします。例: 次 I don't like thisのようになります。

$sql = "INSERT INTO catalog_dev (oc_item,oc_itemdesc) 
    VALUES('$oc_item','I don't like this')";//MYSQL Error

PPS:現状では、2回挿入しています:

mysql_query($SQL);//insert 1
if (mysql_query($sql)) {//insert 2
于 2012-06-29T16:33:24.253 に答える