无法将表单数据插入数据库

时间:2013-10-08 23:26:24

标签: php mysql

回答 这很有趣。基本上它与我的想法没有关系。事实证明,我的数据库中的id字段以某种方式搞砸了,并且每次我尝试插入新行时它都试图输入第二个数字0主键。所以我删除了id列并重新创建它,确保将其标记为自动递增,并且也不在其中输入任何数据,以便它可以自动递增而不会中断。现在它似乎工作得很好 facepalm

感谢所有人给了它一个打击!

已更新 因此,通知的问题得到了解决。现在的问题是我仍然遇到一个空白的白色屏幕,我没有实际进入我的数据库的信息。我没有可以看到或想到的错误,但它只是没有在数据库中插入任何内容。每个人都告诉我,我应该移动做POD或其他什么,但我没有时间从头开始。如果有人能想到任何可能导致白色屏幕的事情,那么我已经做了无数次的改变我会弄湿自己XD

我已将代码更新为当前正在运行的代码。有任何想法吗?我在绳子尽头T.T

<?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,我已经得到了死机的白屏但是在对我的代码进行了一些更改之后我只是得到一个通知说:

  

注意:未定义的索引:第26行/home/content/85/11323785/html/devTest/insert2.php中的国家/地区

据我所知,我应该可以忽略一个通知,除了它仍然没有在我的数据库中插入任何东西。我只是在地址栏中看到一个空白的白色屏幕,其中包含我的.php文件和一个通知。

任何帮助都会很棒!我的代码如下。

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

1 个答案:

答案 0 :(得分:2)

首先,kuddo正在对你的输入进行消毒 最好使用PDO,因为它可以更容易地做正确的事情。

检查输入缺失
您可以使用isset()功能检查是否设置了值。

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

或者,如果您不介意$country的空值,则可以关闭警告:

error_reporting(E_ALL ^ E_NOTICE); 

真正的错误在其他地方
请注意,该消息只是警告您$country包含null值 如果您的数据库正常,插入仍然会发生,但很可能国家/地区列被定义为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');
} 
相关问题