-1

回答 これは興味深いですね。基本的に、私が思っていたこととは関係ありませんでした。私のデータベースの id フィールドが何らかの形で台無しになっていて、新しい行を挿入しようとするたびに 2 番目の番号 0 の主キーを入力しようとしていたことが判明しました。そのため、id 列を削除して再作成し、自動インクリメントとしてマークし、そこにデータを入力しないようにして、中断することなく自動インクリメントできるようにしました。今では問題なく動作しているようです

でも、それを与えてくれたみんなに感謝します!

更新 されたので、通知の問題は処理されます。現在の問題は、まだ空白の白い画面で立ち往生しており、データベースに実際に情報が入力されていないことです。見たり考えたりできるエラーはありませんが、データベースに何も挿入していません。PODか何かで動くべきだとみんなに言われましたが、ゼロから始める時間がありません。無数の変更を行った後、白い画面を引き起こしている可能性のある何かを誰かが考えることができれば、私は自分自身を濡らします XD

コードを現在実行しているものに更新しました。何か案は?私はロープの終わりにいます TT

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

$hostname = "myHostName";
$username = "PreRegCustomers";
$dbname = "PreRegCustomers";
$password = "myPassword";
$usertable = "CustomerInfo";

//connect to mysql
$link_id = mysql_connect($hostname, $username, $password);
if (!$link_id) {
    die("Unable to connect to database! Please try again later. error:".mysql_errno());
}
//make sure DB exists
if (!mysql_select_db($dbname)) die ("Connected to mysql but could not connect to the DB. error:".mysql_errno());

//avoid sql_injection
$firstName = mysql_real_escape_string($_POST['firstName']);
$lastName = mysql_real_escape_string($_POST['lastName']);
$streetAddress = mysql_real_escape_string($_POST['streetAddress']);
$city = mysql_real_escape_string($_POST['city']);
$state = mysql_real_escape_string($_POST['state']);
$zip = mysql_real_escape_string($_POST['zip']);
$country = mysql_real_escape_string($_POST['country']);
$email = mysql_real_escape_string($_POST['email']);
$phone = mysql_real_escape_string($_POST['phone']);
$badgeName = mysql_real_escape_string($_POST['badgeName']);

//write the query
$sql = "INSERT INTO $usertable 
    (firstName, lastName, streetAddress, city, state, zip, country, email, phone, badgeName) 
    VALUES ('$firstName', '$lastName', '$streetAddress', '$city', '$state', '$zip', '$country', '$email', '$phone', '$badgeName')";

//execute the query
mysql_query($sql); 
?>

元の投稿:


だから私はphpにかなり慣れていません。2 日前のように、Web フォームを使用して、go daddy でホストされている MySQL データベースにデータを挿入しようとしています。私はさまざまなことを試しました.PHPが有効で動作していることはわかっています.DNSを持っています.死の白い画面が表示されていましたが、コードをいくつか変更した後、次のような通知が表示されました.

注意: 未定義のインデックス: 国 /home/content/85/11323785/html/devTest/insert2.php の 26 行目

私の知る限り、データベースにまだ何も挿入されていないことを除いて、通知を無視できるはずです。.phpアドレスバーにファイルが表示された空白の白い画面と、 1 つの通知が表示されます。

どんな助けも素晴らしいでしょう!私のコードは次のとおりです。

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

$hostname = "myHostName";
$username = "PreRegCustomers";
$dbname = "PreRegCustomers";
$password = "myPassword";
$usertable = "CustomerInfo";

//connect to mysql
$link_id = mysql_connect($hostname, $username, $password);
if (!$link_id) {
    die("Unable to connect to database! Please try again later. error:".mysql_errno());
}
//make sure DB exists
if (!mysql_select_db($dbname)) die ("Connected to mysql but could not connect to the DB. error:".mysql_errno());

//avoid sql_injection
$firstName = mysql_real_escape_string($_POST['firstName']);
$lastName = mysql_real_escape_string($_POST['lastName']);
$streetAddress = mysql_real_escape_string($_POST['streetAddress']);
$city = mysql_real_escape_string($_POST['city']);
$state = mysql_real_escape_string($_POST['state']);
$zip = mysql_real_escape_string($_POST['zip']);
$country = mysql_real_escape_string($_POST['country']);
$email = mysql_real_escape_string($_POST['email']);
$phone = mysql_real_escape_string($_POST['phone']);
$badgeName = mysql_real_escape_string($_POST['badgeName']);

//write the query
$sql = "INSERT INTO $usertable 
    (firstName, lastName, streetAddress, city, state, zip, country, email, phone, badgeName) 
    VALUES ('$firstName', '$lastName', '$streetAddress', '$city', '$state', '$zip', '$country', '$email', '$phone', '$badgeName')";

//execute the query
mysql_query($sql); 
?>
4

1 に答える 1

2

まず、kuddo は入力をサニタイズします。
PDO を使用することをお勧めします。正しいことを行うのが簡単になるからです。

入力漏れのチェック
関数 を使用して値が設定されているかどうかをチェックできisset()ます。

if !(isset($_POST['country'])){ inform user about missing input

または、 の null 値を気にしない場合は$country、警告をオフにすることができます。

error_reporting(E_ALL ^ E_NOTICE); 

実際のエラーは別の場所にあります。メッセージは、値が含まれて
いることを警告しているだけであることに注意してください。 DB で問題がなければ挿入は行われますが、country 列が として定義されているため、null 入力を受け入れない可能性が高くなります。 すべての必須フィールドが入力されていることを確認するか、適切なデフォルト値がある場合は自分で入力する必要があります。 $countrynull
NOT NULL

データベース定義でデフォルト値を設定することもできます。

ヒント: PDO
を使用してください pdo を使用すると、クエリは次のようになります。

//No escaping needed with PDO.
$sql = "INSERT INTO $usertable 
(firstName, lastName, streetAddress, city, state, zip, country, email, phone, badgeName) 
VALUES (:firstName, :lastName, :streetAddress, :city, :state, :zip, :country, :email, :phone, :badgeName)";
$statement = $db->prepare($sql);
$statement->execute(array(':firstName' => $firstName, 
                          ':lastName' => $lastName,
                          ':streetAddress' => $streetAddress,
                          ':city' => $city, 
                          ':state' => $state,
                          ':zip' => $zip,
                          ':country' => $country,
                          ':email' => $email,
                          ':phone' => $phone,
                          ':badgeName' => $badgeName));

詳細については、http: //php.net/manual/en/book.pdo.php
を参照 してください。

ホワイトスクリーンの問題 ホワイトスクリーンの問題
はありません。php に何も表示するように指示していないため、表示されません。

セグメントを次のように終了します。

//execute the query
mysql_query($sql);  <<-- this command does not generate output.

したがって、出力が必要な場合は、そこに何かを配置する必要があります。

$result = mysql_query($sql);   
if (!$result) {
  die('Invalid query: '.mysql_error());
} else {
  echo('Success, row has been inserted');
} 
于 2013-10-09T00:11:45.827 に答える