2015-08-05 2 views
0

Я не могу заставить свой код работать. Я новичок в php/mysql, но я уверен, что делаю большинство вещей прямо здесь. Я не получаю никаких ошибок. С приведенным ниже кодом, если я помещаю информацию в feilds и нажимаю кнопку, экран появляется, чтобы обновляться, но когда я проверяю базу данных mysql, которую я создал, этой информации нет. Я знаю, что мое соединение с базой данных работает, потому что у меня есть поддельные данные, уже введенные в базу данных, и веб-страница тянет ее и отображает ее просто отлично.Использование php для отправки пользовательской информации в базу данных mysql

db.php - это отдельный файл, который содержит форматированный PHP-код для подключения к базе данных (сервер, имя пользователя, пароль), который, как я знаю, работает, потому что я также извлекаю данные на веб-страницу. И если это необходимо, мой сервер настроен для php 4.0.10.7, и я не могу изменить это, к сожалению.

Итак, вот мой код:

<div class="a" id="add_customer"> 
<form id="customerdata" name="customerdata"> 
<input type="text" align="center" id="name" name="NAME" placeholder="Customer Name"> 
<input type="text" align="center" id="address" name="ADDRESS" placeholder="Address"> 
<b>Paid?:</b> 
<select id="PAID" name="PAID"> 
<option value="select">Make a Selection</option> 
<option value="yes">Yes</option> 
<option value="no">No</option> 
</select> 
<input type="text" align="center" id="comments" name="COMMENTS" placeholder="Comments"> 
<input type="submit" id="submit" name="submit" value="Add Customer"> 
</form> 
</div> 


<?php 
if(isset($_POST['submit'])) 
{ 
include('db.php'); 
$database="mysql_database"; 

$con = mysql_connect($server,$username,$password); 

$sql="INSERT INTO mysql_database (NAME, ADDRESS, PAID, COMMENTS) 
VALUES 
('$_POST[NAME]','$_POST[ADDRESS]','$_POST[PAID]','$_POST[COMMENTS]')"; 
$a=mysql_query($sql); 

if (!$a) 
{ 
die("Error addding record. " . mysql_error()); 
} 
else 
{ 
echo "1 record added"; 
} 
mysql_close($con); 
} 
?> 
+0

Это может быть много вещей, какова ваша ошибка SQL? –

+1

Просто подтверждая в своем фрагменте кода, у вас есть имя вашей базы данных так же, как имя вашей таблицы? – Menztrual

+0

Действительно ли ваше имя столбца в верхнем регистре? Имена столбцов чувствительны к регистру. Также как переданные значения. –

ответ

1
<div class="a" id="add_customer"> 
<form id="customerdata" name="customerdata" method="post"> 
<input type="text" align="center" id="name" name="name" placeholder="Customer Name"> 
<input type="text" align="center" id="address" name="address" placeholder="Address"> 
<b>Paid?:</b> 
<select id="paid" name="paid"> 
<option value="select">Make a Selection</option> 
<option value="yes">Yes</option> 
<option value="no">No</option> 
</select> 
<input type="text" align="center" id="comments" name="comments" placeholder="Comments"> 
<input type="submit" id="submit" name="submit" value="Add Customer"> 
</form> 
</div> 


<?php 
if(isset($_POST['submit'])) 
{ 
include('db.php'); 
$database="mysql_database"; 

$con = mysql_connect($server,$username,$password); 
$name = $_POST['name']; 
$address= $_POST['address']; 
$paid= $_POST['paid']; 
$comments= $_POST['comments']; 
$sql="INSERT INTO mysql_database (NAME, ADDRESS, PAID, COMMENTS) 
VALUES 
('$name','$address','$paid','$comments')"; 
$a=mysql_query($sql); 

if (!$a) 
{ 
die("Error addding record. " . mysql_error()); 
} 
else 
{ 
echo "1 record added"; 
} 
mysql_close($con); 
} 
?> 
+0

Все подали замечательный совет. У меня есть намного больше чтения, чтобы полностью изучить все это. – Rage

0
<?php 
    include('db.php'); //include db first 

    $con = mysql_connect($server,$username,$password); //connect to db 

    if(isset($_POST['submit'])) { 
    $database="mysql_database"; //I think this will not work. 
    $sql="INSERT INTO $database (NAME, ADDRESS, PAID, COMMENTS) VALUES ('$_POST[NAME]','$_POST[ADDRESS]','$_POST[PAID]','$_POST[COMMENTS]')"; 
//Try this 
$sql = "INSERT INTO (your_db_name) (NAME, ADDRESS, PAID, COMMENTS) VALUES ('".$_POST['name']."','".$_POST['address']."','".$_POST['paid']."','".$_POST['comments']."')"; //I used concantenation here 

    $a=mysql_query($sql); 
    } 

    if (!$a) { 
    die("Error addding record. " . mysql_error()); 
    }else{ 
    echo "1 record added"; 
    } 
    mysql_close($con); 
?> 
Try this piece of code. 
1
  1. mysql_* функции устарели, используйте mysqli_*.
  2. Входы не дезинфицированы или escaped, поэтому уязвим для SQL injection.
  3. Вы неверно ссылаетесь на переменные POST. В вашем коде вы буквально вставляете '$ _POST [NAME]'.
  4. В какую таблицу вы вставляете? Это должно быть после INSERT INTO.

Вы должны установить все продезинфицировать входов POST в отдельные переменные, однако, это то, что ваш текущий код может выглядеть следующим образом:

$con = mysqli_connect($server,$username,$password,$database); 

$sql="INSERT INTO table_name (NAME, ADDRESS, PAID, COMMENTS) 
VALUES 
('".mysqli_real_escape_string($_POST['NAME'])."','".mysqli_real_escape_string($_POST['ADDRESS']."','".mysqli_real_escape_string($_POST['PAID']."','".mysqli_real_escape_string($_POST['COMMENTS']."')"; 
$a=mysqli_query($con,$sql); 

if ($a) 
{ 
echo "1 record added"; 
} 
mysqli_close($con); 
0

Вы не включили базу данных при установлении соединения. Сделайте это:

$con = mysql_connect($server,$username,$password,$database); 

Затем на вашем запросе INSERT, вместо имени базы данных, измените его на имя таблицы

INSERT INTO mysql_table_name... 

И использовать mysqli_real_escape_string() для предотвращения SQL injections, прежде чем связать значения запроса.

$name = mysqli_real_escape_string($con,$_POST["NAME"]); 

и принять к сведению, что mysql_* API уже deprecated и вы должны использовать mysqli prepared statement вместо этого.

Вы можете попробовать код ниже, если хотите перейти к подготовленному заявлению. Не нужно санировать вручную значения, подготовленный оператор сделает это за вас.

<?php 

    /* ESTABLISH YOUR CONNECTION */ 
    $con = new mysqli($server,$username,$password,$database); 

    if($stmt = $con->prepare("INSERT INTO mysql_table_name (NAME, ADDRESS, PAID, COMMENTS) VALUES (?,?,?,?)")){ /* CHECK IF THE QUERY IS TRUE */ 
    $stmt->bind_param("ssss",$_POST["NAME"],$_POST["ADDRESS"],$_POST["PAID"],$_POST["COMMENTS"]); /* BIND THE PASSED ON VALUES TO YOUR QUERY */ 
    $stmt->execute(); /* EXECUTE THE QUERY */ 
    $stmt->close(); 
    } /* END OF PREPARED STATEMENT */ 

?> 
0

ли это меняет

  1. Insert MySQL функция

    INSERT INTO <tbale_name> ...... 
    
  2. MySQL DB Select

    mysql_select_db('database_name') 
    
  3. Убедитесь, что имя таблицы и имя базы данных правильно (mysql_database)

  4. убедитесь include('db.php'); содержит $server, $username, $passwordпеременных определены

  5. Убедитесь поля ввода name="" являются заглавными буквами (name="NAME" или name="Name"). Bcz Вы используете определение $_POST[NAME] как заглавное.

  6. Не просто использовать $_POST[NAME], T его будет причиной дляSQL Injection. Используйте mysql_real_escape_string

    $name = mysql_real_escape_string($_POST['name']); 
    
  7. Не используйте MySQL, BCZ This extension is deprecated as of PHP 5.5.0, and will be removed in the future

Так Финальный код будет

<?php 
    if(isset($_POST['submit'])) 
    { 
     include 'db.php'; 

     $database="mysql_database"; 

     $con = mysql_connect('$server','$username','$password'); 
     mysql_select_db($database); 

     $name = mysql_real_escape_string($_POST['name']); 
     $address = mysql_real_escape_string($_POST['address']); 
     $paid = mysql_real_escape_string($_POST['paid']); 
     $comments = mysql_real_escape_string($_POST['comments']); 


     $sql="INSERT INTO <table_name> (name, address, paid, comments) VALUES('$name','$address','$paid','$comments')"; 

     $a = mysql_query($sql); 

     if (!$a) 
     { 
      die("Error addding record. " . mysql_error()); 
     } 
     else 
     { 
      echo "1 record added"; 
     } 

     mysql_close($con); 
    } 
?> 
0

Ваш <form> тег отсутствует атрибут method, который по умолчанию установлен в GET. Таким образом, вы проверяете существование $_POST["submit"], но этого не может быть, потому что вместо этого вы должны использовать $ _GET.

Попробуйте указать method="POST" в первую очередь.

Тем не менее, вы должны серьезно следить за всеми хорошие советы уже приведенные в этой теме про устаревшего mysql расширения PHP (т.е. использовать mysqli вместо этого) и возможные атаки SQL инъекций предупреждение, используя подготовленные заявления с mysqli.

Использование this и this в качестве точек входа в mysqli подготовленных заявлений и this SO post в качестве краткого обсуждения о том, почему подготовленные заявления являются инъекции SQL контрмеры.

Смежные вопросы