Member 13710355 Ответов: 2

Чего мне не хватает в моем PHP-коде?


Привет, я новичок в PHP и MySQl, я создаю веб-сайт, который может просматривать базу данных, добавлять данные в базу данных и удалять данные из базы данных. Я написал код для страницы формы, которая позволяет пользователю добавлять данные в базу данных.

Код не содержит никаких ошибок, форма появляется, Вы можете ввести данные и нажать кнопку Отправить без каких-либо проблем. Но на самом деле он не добавляет введенную информацию в базу данных.

Вот код для моего "New.php"






<title>New Record

	

	
		
	<?php
     if(isset($_POST["ID"])){
	
    $ID = $_POST['ID'];
	$ProductName = $_POST['ProductName'];
	$Price = $_POST['Price'];
	$Stock = $_POST['Stock'];
	 }
	
	// if there are any errors, display them
    $error='';
	if ($error != '');
	 
	{

	echo '<div style="padding: 4px; color: red">'.$error.'</div>';
//if assist
	}

	?>

	

	<div>
	   
	ID:  <br>

	ProductName:  <br>

	Price:   <br>
	
	Stock:   <br>

	

	</div>

	

	

	

	<?php
	
	//connect to database
		 $con = mysqli_connect("localhost","root","");
		 if (!$con) 
		 {
			 mysqli_select_db("stationaryonlinecustomers", $con);
		 }

	
	// check if the form has been submitted. If it has, start to process the form and save it to the database

	if (isset($_POST['submit']))

	{

	// get form data, making sure it is valid

	$ID = mysqli_real_escape_string($con, htmlspecialchars($_POST['ID']));

	$ProductName = mysqli_real_escape_string($con,htmlspecialchars($_POST['ProductName']));

    $Price = mysqli_real_escape_string($con,htmlspecialchars($_POST['Price']));
       
    $Stock = mysqli_real_escape_string($con,htmlspecialchars($_POST['Stock']));
      
	}

	// check to make sure both fields are entered
    $ID='';
	if ($con == '' || $ID == '' || $ProductName == '' || $Price == '' || $Stock =='')

	{

	// generate error message

	$error = 'ERROR: Please fill in all required fields!';
	
	}

	else{
	// save the data to the database

	$u = mysql_query($con, "INSERT productorders SET ID='".$ID."', ProductName='".$ProductName."', Price='".$Price."', Stock='".$Stock."'");
	

	// once saved, redirect back to the view page

	header("location:View.php");


	// if the form hasn't been submitted, display the form

	renderForm('','','');

	}

	?></

Что я упускаю ?

Что я уже пробовал:

Youtube tutorials, учебники с разных сайтов и книг по PHP и MySql

Richard MacCutchan

Вы должны проверить возвращаемое значение из вашего вызова mysql_query.

2 Ответов

Рейтинг:
2

Patrice T

$u = mysql_query($con, "INSERT productorders SET ID='".$ID."', ProductName='".$ProductName."', Price='".$Price."', Stock='".$Stock."'");

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Рейтинг:
1

Jochen Arndt

Вы смешиваете mysql и mysqli. Линия

$u = mysql_query($con, "INSERT productorders SET ID='".$ID."', ProductName='".$ProductName."', Price='".$Price."', Stock='".$Stock."'");
должно быть
$u = mysqli_query($con, "INSERT productorders SET ID='".$ID."', ProductName='".$ProductName."', Price='".$Price."', Stock='".$Stock."'");

Вы также должны проверить возвращаемое значение, хранящееся в переменной $u... Если это так FALSE, операция вставки не удалась, и вы можете получить сообщение об ошибке, позвонив по телефону mysqli_error($con).