Почему две записи $ _POST не определены при обращении к моему коду, а остальные в порядке? - PullRequest
0 голосов
/ 03 мая 2011

Я работаю над PHP и базами данных для задания, и мне нужна помощь в написании кода.Форма передается в process.php для обработки (код для обоих приведен ниже).Я получаю предупреждение о неопределенном индексе для $_POST['CustomerID'] и $_POST['BodyStyle'] при запуске process.php (точное местоположение указано в коде), и информация, введенная для этих полей в форме, не будет вставлена ​​или обновленабаза данных.Остальные поля работают как задумано, не генерируют ошибок и хранятся в базе данных.Что не так?Как я могу это исправить?

Process.php:

<?php

$dbname = "cars";
$dbuser = "carsuser";
$dbpass = "carspass250";

$dbconnect = odbc_connect($dbname,$dbuser, $dbpass)
or die ("Could not connect. <br>");

$opcode = (int) $_POST["opcode"];
$recno = (int) $_POST["recno"];   

if ( ($opcode < -1) || ($opcode > 1) )
    {
    echo "Invalid data passed from form! <br>";
    exit();
    }

if (($opcode == 0) || ($opcode == 1))
   {
    $CustomerID = $_POST['CustomerID'];  //Undefined Index
    $year = $_POST['year'];
    $make = $_POST['make'];
    $model = $_POST['model'];
    $BodyStyle = $_POST['BodyStyle'];  //Undefined Index
    $color = $_POST['color'];

if (!all_fields_ok($CustomerID, $year, $make, $model, $BodyStyle, $color))
   {
   exit();
   }
    }

if ($opcode == -1)    
    $SqlStatement = "DELETE from Vehicle WHERE VehicleID = $recno";

if ($opcode == 0)      
   {
   $SqlStatement = "UPDATE Vehicle SET ".
    "CustomerID = '$CustomerID', ". 
    "Year = '$year',  ".
    "Make = '$make', ".
    "Model = '$model', ".
    "BodyStyle = '$BodyStyle', ". 
    "Color = '$color' ".
    "WHERE VehicleID = $recno";
    }                

if ($opcode == 1)
   {
   $SqlStatement = "INSERT INTO Vehicle ". 
     "(CustomerID, Year, Make, Model, BodyStyle, Color) ".  
     "VALUES ('$CustomerID', '$year', '$make', '$model', '$BodyStyle', '$color')";
    }

print $SqlStatement."<br>";
$recs = odbc_exec($dbconnect, $SqlStatement)
    or die ("Could not locate database");

print "Database Updated! <br>";
print "<a href=listall.php>Return to List</a> ";

function all_fields_ok($CustomerID, $year, $make, $model, $BodyStyle, $color )
   {
   $errormsg = "";
   $flag = 0;

   if ( (!is_numeric($CustomerID)) )
      {
      $errormsg = $errormsg."Input:  $CustomerID <br>";
      $errormsg = $errormsg."Only numbers are aloud <br><br>";
      $flag=1;
      } 

    if(!(is_numeric($year)) || (!(strlen($year)==4)))
      {
      $errormsg = $errormsg."Input:  $year <br>";
      $errormsg = $errormsg."Please enter a four-digit year <br><br>";
      $flag=1; 
      }

  if  ((!ctype_alpha($make))  )
      {
      $errormsg = $errormsg."Input:  $make <br>";
      $errormsg = $errormsg."Please enter the make of the vehicle, characters only<br>        <br>";
      $flag=1; 
      }

   if  (!(ctype_alnum($model)) )
      {
      $errormsg = $errormsg."Input:  $model<br>";
      $errormsg = $errormsg."Please enter the model of the vehicle, numbers and     characters aloud <br><br>";
      $flag=1; 
      }

  if ((!ctype_alpha($BodyStyle))  )
      {
      $errormsg = $errormsg."Input:  $BodyStyle <br>";
      $errormsg = $errormsg."Please enter the bodystyle of the vehicle, characters only     <br><br>";
      $flag=1;
      }

   if ((!ctype_alpha($color))  )
      {
      $errormsg = $errormsg."Input:  $color <br>";
      $errormsg = $errormsg."Please enter the color of the vehicle, characters only.     <br><br>";
      $flag=1; 
      }  

    if ($flag == 1)
        {
        echo "Data not trustworthy.  Please revise input and try again. <br><br>";
        echo $errormsg;
        return false; 
        }
    else
        return true;  
   }
?>

Форма:

<?php

$dbname = "cars";
$dbuser = "carsuser";
$dbpass="carspass250";

$dbconnect = odbc_connect($dbname,$dbuser, $dbpass)
    or die ("Could not connect. <br>");

$opcode = (int) $_POST["opcode"];
$recno = (int) $_POST["recno"]; 

if ( ($opcode < -1) || ($opcode > 1) )
    {
    echo "Invalid data passed from form! <br>";
    exit();
    }

if ($opcode == 0)
   {

   $SqlStatement = "SELECT * from Vehicle WHERE VehicleID = $recno";
   $recs = odbc_exec($dbconnect, $SqlStatement)
    or die ("Could not execute query");

   $row = odbc_fetch_array($recs) ;

    $VehicleID = $row['VehicleID'];
    $CustomerID = $row['CustomerID'];
    $year = $row['Year'];
    $make = $row['Make'];
    $model = $row['Model'];
    $BodyStyle = $row['BodyStyle'];
    $color = $row['Color'];
    }
else   
   {
    $recno = 0;
    $VehicleID = 0;
    $CustomerID = "";
    $year = "";
    $make = "";
    $model = "";
    $BodyStyle = "";
    $color = "";
  }

print "<h1>Vehicle Record </h1>";
print "<form action=process.php method=post>   \n";

print "<table>";     
 if ($opcode == 0)  
        print "<tr><td> Record Number:</td><td align=left>$recno</td>   </tr>\n";  
 else
        print "<tr><td> Record Number: </td><td align=left>New Record</td>   </tr>\n";  

 print "<tr><td> Customer ID: </td>";
 print "<td> <input type=text name=CustomerID value=\"$CustomerID\"></td></tr>   \n";
 print "<tr><td> Year: </td>";
 print "<td> <input type=text name=year value=\"$year\"></td></tr>   \n";
 print "<tr><td> Make: </td>";
 print "<td> <input type=text name=make value=\"$make\"></td></tr>   \n";   
 print "<tr><td> Model: </td>";
 print "<td> <input type=text name=model value=\"$model\"></td></tr>   \n"; 
 print "<tr><td> Style: </td>";
 print "<td> <input type=text name=BodyStyle value=\"$BodyStyle\"></td></tr>   \n"; 
 print "<tr><td> Color: </td>";
 print "<td> <input type=text name=color value=\"$color\"></td></tr>   \n"; 

 print "<input type=hidden name=opcode value=$opcode>   \n";
 print "<input type=hidden name=recno value=$recno>   \n";
 print "<tr><td> <input type=submit value='Submit Record'></td><td></td></tr>   \n   \n";
print "</table>";
print "</form>";

odbc_close($dbconnect);
?>

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Переменные в ваших данных $ _POST определяются атрибутами входного имени, поэтому, если вы скажете это

<input name="customer" ... />
<input name="style"  ... />

, вам нужно искать

$_POST['customer']
$_POST['style']

, поэтому либо измените свойПоиск POST или ваши входные имена, и приведите их в соответствие.

Кроме того, вы должны проверить ваши html-стандарты, значения атрибутов должны быть между "", и вы должны закрыть все теги либо либо завершить их с />

0 голосов
/ 03 мая 2011

Исправьте этот столбец ... в нем не должно быть пробела.

"Body Style = '$BodyStyle', ". 
0 голосов
/ 03 мая 2011

вы не получаете переменные CustomerID и BodyStyle из ваших данных POST, что-то не так с запросом (вашей формой или чем-то, что вы используете)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...