3

SQL の複数のエントリを 1 つのフィールドに格納するにはどうすればよいですか? たとえば、フィールドフォンでは、ユーザーがプライベート、ホーム、ビジネスなどのより多くの電話を入力できるようにしたいと考えています.

どうすればtratフォームを作成でき、どのようにSQLにデータを保存できますか?

php で serialize() 関数を使用して保存できると思いますが、フォームを作成してその情報を収集するにはどうすればよいですか?

Form:

Home Phone: 321321333
Other: 333213213
Add Another

また、ユーザーが Home Phone の代わりに Home Tel を入れたい場合や、Other の代わりに Pager を入れたい場合は、名前フィールドを編集できるようにしたいと思います。

ヘルプはありますか?お願いします?

4

3 に答える 3

3

1つのフィールドに複数の値を格納することはありません。複数の電話番号を許可する正規化された構造が必要です。ここでは1:nの関係が適切です。

ユーザー(userId PK)
userPhone(userId FK、phoneType、phoneNumber(userId、phoneType PK))
于 2013-03-13T03:34:35.427 に答える
2

と を使用json_encode()json_decode()て、データの保存とアクセスを行うことができます。

保存用。

$phone_number = array("Home Phone" => "321321333", "Other" => "333213213");
$encoded = json_encode($phone_number);

アクセスするため。

$result = mysqli_fetch_assoc($sql);
$decoded = json_decode( $result['phone_number_mysql_fields'] );

PHPserialize関数を使用して、MySQL に配列とオブジェクトを格納できます。

于 2013-03-13T03:37:34.080 に答える
1

serialize()あなたが言ったように、ユーザー。ただし、機能する別のボタンを追加するには、JavaScript が必要です。フォームは次のとおりです。

<form action="action.php" method="post">
    <div id="phoneNumbers">
        <input type="text" value="home phone">: <input type="text" name="0-value" value="(xxx)xxx-xxxx">
    </div>
    <button onclick="addAnother();">Add Another Phone Number</button>
    <input type="submit>
</form>

これがJavaScriptです(ページのheadタグに入れます):

<script type="text/javascript">
    var nums=0;
    function addAnother(){

        document.getElementById('phoneNumbers').innerHTML+='<input type="text" name="'+++nums+'-name">: <input type="text" name="'+nums+'-value">';

    }
</script>

action.php は次のとおりです。

<?php
$arrayOfNums=array();
foreach($_POST as $curVal){
    array_push($arrayOfNums,$curVal);
}
$serializedArray=serialize($arrayOfNums);
#now do whatever code you have to add serializedArray to your database. It is a string, so this is easy.
?>

これで、データベースにシリアル化された配列ができました。それだけunserialize()で、次のような配列が得られ、名前と値が交互に表示されます: 'home tel','(324)444-4356','work tel','(444)546-5678' など。これはテストされていません。失敗したら私。

于 2013-03-13T04:02:18.370 に答える