1

問題は、フルネーム/アドレスを挿入したいだけです。次の列を持つユーザー テーブルを作成しました: id (プライマリ)、フルネーム (一意)、アドレス (一意)。

コードは次のとおりです。

<?php $username = "root";
$password = "artislife23";
$hostname = "localhost"; 

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
or die("Unable to connect to MySQL");
//select a database to work with
$selected = mysql_select_db("test",$dbhandle) 
or die("Could not select examples");?>
<body>

<div class="container">
<div class="content">
<h1><?php if(($selected!=null)){
echo "Database is on lock.";}
if(($dbhandle!=null)){
echo "Connected to MySQL<br>";
}?></h1>
<form method="post" action="input.php">
<tr><td>Name</td><td><input type="text" name="fullname" size="20"></td></tr>
<tr><td>Address</td><td><input type="text" name="address" size="40"></td></tr>
<tr><td></td><td align="right"><input type="submit" value="Submit"></td>

これがinput.phpです

<?php
$postr="INSERT INTO users 
(fullname, address) VALUES('$_POST[fullname]','$_POST[address]')";
$result = mysql_query($postr);
echo "$result";?>

私が確認できるのは、単一の空白のエントリがテーブルに挿入されたことだけです。ここで何か間違ったことをしていますか?私が望むのは、フォーム データをユーザー テーブルに正常に挿入することだけです。

4

2 に答える 2

0
$_POST['fullname']

POSTに引用符がありません。

于 2013-09-11T17:58:58.870 に答える
0

それが機能しない理由は、PHP が変数と同じように配列を文字列に展開しないためです。変化する:

$postr="INSERT INTO users (fullname, address) VALUES('$_POST[fullname]','$_POST[address]')";

に:

$postr="INSERT INTO users (fullname, address) VALUES('".$_POST['fullname']."','".$_POST['address']."')";

配列キーの引用符もありませんでした。

その他の注意事項:

  1. あなたのコードはSQL インジェクションに対して広く開かBobby'; DROP TABLE users;--れています。
  2. mysql_*()関数は非推奨です。時間をかけて PDO または MySQLi を学習してください。これらには、前述のように SQL インジェクションを簡単に回避できる「パラメーター化されたクエリ」と呼ばれる優れた機能があります。
  3. 個人の氏名または住所を一意にすることは設計ミスであると仮定して、「現実世界」のプロジェクトでこれを行わないでください。

編集

文字列に配列を埋め込むための代替構文:

$string = "Fee fie {$foo['bar']}.";
于 2013-09-11T17:59:23.817 に答える