2014-02-27 4 views
0

Кажется, что-то здесь не хватает. Каждый отдельный стол, который я нахожу в Google или StackOverflow, на основе того, что я вижу, показывает, что мой код верен. ОДНАКО, каждый раз, когда я нажимаю «Отправить», он просто очищает страницу и возвращает меня к вершине. Я попытался свести его к основным полям (без функций), но это ничего не изменило.Проблемы с моей формой

Вот моя форма:

<form acction="/php/newcarcode.php" method="post"> 

        <table style="width:575px"> 
          <tr> 
           <th>Currently Own</th> 
           <td><input type="checkbox" name="own"></td> 
           <td></td> 
          </tr> 
         <tr> 
          <th style="width:175px">Year</th> 
          <td style="width:375px"><input type="text" name="year" style="width:340px"></td> 
          <td style="width:25px"></td> 
         </tr> 
         <tr> 
          <th>Make</th> 
          <td><select name="dropdown" style="width:344px"><?php make() ?></select></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Model</th> 
          <td><select name="dropdown" style="width:344px"><?php model() ?></select></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Trim</th> 
          <td><input type="text" name="trim" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Purchased</th> 
          <td><input type="date" name="purchased" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Engine</th> 
          <td><select name="engine" style="width:344px"><?php engine() ?></select></td> 
          <td><a href="newengine.php"><img src="/images/addnew.png" width="33px" height="25px"></a></td> 
         </tr> 
         <tr> 
          <th>Drivetrain</th> 
          <td><select name="drivetrain" style="width:344px"><?php drivetrain() ?></select></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Transmission</th> 
          <td><select name="trans" style="width:344px"><?php trans() ?></select></td> 
          <td><a href="newengine.php"><img src="/images/addnew.png" width="33px" height="25px"></a></td> 
         </tr> 
         <tr> 
          <th>Driver</th> 
          <td><select name="driver" style="width:344px"><?php driver() ?></select></td> 
          <td><a href="newengine.php"><img src="/images/addnew.png" width="33px" height="25px"></a></td> 
         </tr> 
         <tr> 
          <th>Type</th> 
          <td><select name="dropdown" style="width:344px"><?php type() ?></select></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Doors</th> 
          <td><input type="number" name="doors" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Color</th> 
          <td><input type="text" name="color" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Cost</th> 
          <td><input type="number" name="cost" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Sale Price</th> 
          <td><input type="number" name="sale" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Profit</th> 
          <td><input type="number" name="profit" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Profile Pic</th> 
          <td><input type="text" name="profile" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Photo Album</th> 
          <td><input type="text" name="album" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th>Thumbnail Pic</th> 
          <td><input type="text" name="thumbnail" style="width:340px"></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th style="height: 75px">Notes</th> 
          <td><textarea type="text" name="notes" style="width:340px" rows="4"></textarea></td> 
          <td></td> 
         </tr> 
         <tr> 
          <th style="height: 75px">Mods</th> 
          <td><textarea type="message" name="mods" style="width:340px" rows="4"></textarea></td> 
          <td></td> 
         </tr> 

        </table> 

        <br> 

        <input type="submit" value="Submit"> 

       </form> 

А потом вот страница PHP, что он звонит:

<?php 

$con = mysql_connect("server", "mycaradmin", "SuperSecretPassword") or die(mysql_error()); 
mysql_select_db("mycars") or die(mysql_error()); 

$year  = $_POST[year]; 
$make  = $_POST[make]; 
$model  = $_POST[model]; 
$trim  = $_POST[trim]; 
$engine  = $_POST[engine]; 
$trans  = $_POST[trans]; 
$doors  = $_POST[doors]; 
$type  = $_POST[type]; 
$color  = $_POST[color]; 
$drivetrain = $_POST[drivetrain]; 
$driver  = $_POST[driver]; 
$own  = $_POST[own]; 
$purchase = $_POST[purchase]; 
$sale  = $_POST[sale]; 
$profit  = $_POST[profit]; 
$profile = $_POST[profile]; 
$notes  = $_POST[notes]; 
$mods  = $_POST[mods]; 
$album  = $_POST[album]; 

$sql = " INSERT INTO mycars.vehicles (
        VYear, 
        VMakeID, 
        VModelID, 
        VTrim, 
        VEngineID, 
        VTransID, 
        VNumDoors, 
        VTypeID, 
        VColor, 
        VDrivetrainID, 
        PeopleID, 
        VCurrentlyOwn, 
        VPurchasePrice, 
        VSalePrice, 
        VProfit, 
        VAttachments, 
        VNotes, 
        VModifications, 
        VAlbum, 
        VDateOfPurchase 
       ) 

      VALUES (
         '$year', 
         '$make', 
         '$model;', 
         '$trim', 
         '$engine', 
         '$trans', 
         '$doors', 
         '$type', 
         '$color', 
         '$drivetrain', 
         '$driver', 
         '$own', 
         '$purchase', 
         '$sale', 
         '$profit', 
         '$profile', 
         '$notes', 
         '$mods', 
         '$album', 
        )" 
      ; 

if (!mysql_query($con,$sql)) 
    { 
     die('Error: ' . mysql_error($con)); 
    } 
    echo "1 record added"; 

mysql_close($con); 

>

ли, кажется, не имеет значения, что я могу изменить, я? получить те же результаты. Я недоумеваю.

+0

"

+0

form acction ... – OllyBarca

+2

Кроме того, вы должны действительно использовать MySQLi, старый MySQL API устарел с PHP 5.5.0 и будет удален в будущее. – OllyBarca

ответ

2

У вас нет котировки на ваших $_POST переменных:

$_POST[year]; должен быть $_POST['year'];

+0

Нужны ли одиночные или двойные кавычки? Я всегда забываю, что использовать где. – JeremyThePHPNoob

+0

Это не имеет значения, просто нужны кавычки. – Grashlok

1

также у вас есть дополнительная запятая после последнего '$ альбома' в вашем SQL заявление

1

В этом коде есть несколько вопросов:

  1. Вы указали свойство имени Make и Model как «выпадающее меню», которое никогда не используется.
  2. Ваш код открыт для SQL-инъекций и других проблем безопасности.
  3. Вам нужно приложить ключи в случае ассоциативных массивов в PHP в одинарных или двойных кавычках, как это:

    $ в год = $ _POST [ «год»];

  4. Вы также создаете действие, скорее всего, это опечатка.
0

Я знаю, что это является дополнительным актуальным и, вероятно, будет забито ... Никогда не используйте библиотеку mysql, но вместо этого используйте mysqli или PDO. Вы также не проверяете ввод данных для предварительного SQL, JavaScript или HTML-инъекций.

У вас также есть лишняя точка с запятой и запятая в инструкции вставки.

Рассмотрим изменения ваши строки, которые выглядят как:

$year  = $_POST[year]; 

Для линий, которые выглядят что-то вроде:

$year = filter_var($_POST['year'], FILTER_SANITIZE_INT); 

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

И ваша база данных вещи:

$db = new mysqli(server", "mycaradmin", "SuperSecretPassword") or die(); 
$stmnt = $db->prepare('INSERT INTO mycars.vehicles (
       VYear, 
       VMakeID, 
       VModelID, 
       VTrim, 
       VEngineID, 
       VTransID, 
       VNumDoors, 
       VTypeID, 
       VColor, 
       VDrivetrainID, 
       PeopleID, 
       VCurrentlyOwn, 
       VPurchasePrice, 
       VSalePrice, 
       VProfit, 
       VAttachments, 
       VNotes, 
       VModifications, 
       VAlbum, 
       VDateOfPurchase 
      ) 

     VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'); 
$stmnt->bindparam('ssssssssssssssssssss',    '$year', 
        $make, 
        $model, 
        $trim, 
        $engine, 
        $trans, 
        $doors, 
        $type, 
        $color, 
        $drivetrain, 
        $driver, 
        $own, 
        $purchase, 
        $sale, 
        $profit, 
        $profile, 
        $notes, 
        $mods, 
        $album) or die($stmnt->error); 

$stmnt->execute()or die($stmnt->error); 
$stmnt->close(); 
$db->close(); 

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

+0

Что делают эти утверждения? – JeremyThePHPNoob

+0

Редактирование выделено жирным шрифтом, чтобы вкратце объяснить функции. –

0

Параметрируйте свои запросы. Это предотвратит внедрение SQL.

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