Невозможно выполнить SQL INSERT-запрос (mysql_query) в PHP-скрипте. PHP / MySQL - чувствительный ко времени - PullRequest
0 голосов
/ 19 августа 2011

ОБНОВЛЕНИЕ: СЕЙЧАС РАЗРЕШЕНО - Спасибо всем!

Исправлено: у меня был столбец с именем "Refer_by", и в моем коде он называется "refer_by_id" - поэтому он пытался вставить в столбец, который не сделалсуществует - как только я это исправлю, решил работать!

У меня осталось мало времени для работы над этим проектом.Часы тикают.

Я пытаюсь вставить $ php_variables в ТАБЛИЦУ, называемую "клиенты".

Я часами пытался заставить этот скрипт работать, и я заставил его работать один раз, но потом я понял, что забыл поле, поэтому мне пришлось добавить еще один столбец в таблицу, и когда яобновил скрипт, он перестал работать.Я вернулся, но теперь он все еще не работает, и я просто слишком расстраиваюсь.

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

if (!isset($_COOKIE["user"]))
{
    header ("Location: ./login.php");
}

else
{
    include ("./source.php");
    echo $doctype;
}

$birthday = $birth_year . "-" . $birth_month . "-" . $birth_day;
$join_date = date("Y-m-d");

$error_type = 0;

$link = mysql_connect("SERVER", "USERNAME", "PASSWORD");

if (!$link)
{
    $error = "Cannot connect to MySQL.";
    $error_type = 1;
}

$select_db = mysql_select_db("DATABASE", $link);

if (!$select_db)
{
    $error = "Cannot connect to Database.";
    $error_type = 2;
}

if ($referred_by != "")
{
    $result = mysql_query("
    SELECT id FROM clients WHERE referral_code = $referred_by
    ");

    if (!$result)
    {
        $error = "Cannot find referral.";
        $error_type = 3;
    }

    while ($row = mysql_fetch_array($result))
    {
        $referred_by_id = $row['id'];
    }
}

else
{
    $referred_by_id = 0;
}

$first_name = mysql_real_escape_string($_POST['first_name']);
$last_name = mysql_real_escape_string($_POST['last_name']);
$birth_month = mysql_real_escape_string($_POST['birth_month']);
$birth_day = mysql_real_escape_string($_POST['birth_day']);
$birth_year = mysql_real_escape_string($_POST['birth_year']);
$email = mysql_real_escape_string($_POST['email']);
$address = mysql_real_escape_string($_POST['address']);
$city = mysql_real_escape_string($_POST['city']);
$state = mysql_real_escape_string($_POST['state']);
$zip_code = mysql_real_escape_string($_POST['zip_code']);
$phone_home = mysql_real_escape_string($_POST['phone_home']);
$phone_cell = mysql_real_escape_string($_POST['phone_cell']);
$referral_code = mysql_real_escape_string($_POST['referral_code']);
$referred_by = mysql_real_escape_string($_POST['referred_by']);
$organization = mysql_real_escape_string($_POST['organization']);
$gov_type = mysql_real_escape_string($_POST['gov_type']);
$gov_code = mysql_real_escape_string($_POST['gov_code']);

$test_query = mysql_query
("
INSERT INTO clients (first_name, last_name, birthday, join_date, email, address, city, state, zip_code,
phone_home, phone_cell, referral_code, referred_by_id, organization, gov_type, gov_code)
VALUES ('".$first_name."', '".$last_name."', '".$birthday."', '".$join_date."', '".$email."', '".$address."', '".$city."', '".$state."', '".$zip_code."',
'".$phone_home."', '".$phone_cell."', '".$referral_code."', '".$referred_by_id."', '".$organization."', '".$gov_type."', '".$gov_code."')
");

if (!$test_query)
{
    die(mysql_error($link));
}

if ($error_type > 0)
{
    $title_name = "Error";
}

if ($error_type == 0)
{
    $title_name = "Success";
}

?>


<html>
    <head>
        <title><?php echo $title . " - " . $title_name; ?></title>
        <?php echo $meta; ?>
        <?php echo $style; ?>
    </head>
    <body>
        <?php echo $logo; ?>
        <?php echo $sublogo; ?>
        <?php echo $nav; ?>
        <div id="content">
            <div id="main">

                <span class="event_title"><?php echo $title_name; ?></span><br><br>

                <?php

                if ($error_type == 0)
                {
                    echo "Client was added to the database successfully.";
                }

                else
                {
                    echo $error;
                }

                ?>

            </div>
            <?php echo $copyright ?>
        </div>
    </body>
</html>

Ответы [ 3 ]

2 голосов
/ 19 августа 2011

Определенно не работает как есть. Похоже, у вас есть ошибка 500, так как у вас есть еще с пропущенным, если:

else
{
    $referred_by_id = 0;
}

В противном случае вам необходимо опубликовать схему БД.

Кроме того, обратите внимание, что вы действительно проделали долгий путь с этим кодом, который затрудняет чтение и поддержку. Вам также не хватает каких-либо проверок для внедрения SQL-кода ... вам действительно нужно пропустить вещи через mysql_real_escape_string (и действительно, вы должны использовать mysqli, так как интерфейс mysql был в основном устаревшим несколько лет назад).

$keys = array('first_name',
    'last_name',
    'birthday', 
    'join_date', 
    'email', 
    'address', 
    'city', 
    'state', 
    'zip_code',
    'phone_home', 
    'phone_cell', 
    'referral_code', 
    'referred_by_id', 
    'organization', 
    'gov_type', 
    'gov_code');

$_REQUEST['birthdate'] = $_REQUEST['birth_year'].'-'.$_REQUEST['birth_month'].'-'.$_REQUEST['birth_day'];
$_REQUEST['join_date'] = date('Y-m-d',time());

$params = array();
foreach ($keys as $key)
{
    $params[] = mysql_real_escape_string($request[$key]);
}

$sql = 'INSERT INTO clients ('.implode(',', $keys).') ';
$sql .= ' VALUES (\''.implode('\',\'', $params).'\') ';
0 голосов
/ 19 августа 2011

В строке 81 произошла ошибка:

else
{
    $referred_by_id = 0;
}

До этого я не видел конструкцию IF, внесите соответствующие исправления и снова запустите сценарий.

0 голосов
/ 19 августа 2011

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

Любые кавычки в данных приведут к проблемам (включая безопасность внедрения SQL)отверстия).Вы должны обернуть каждый $ _POST [] функцией mysql_real_escape_string (), например:

$first_name = mysql_real_escape_string($_POST['first_name']);

EDIT: дальнейшая отладка ...

Как кто-то предложил (извините, не могу найти комментарий), попробуйте:

<code>$sql = "
    INSERT INTO clients (first_name, last_name, birthday, join_date, email, address, city, state, zip_code,
    phone_home, phone_cell, referral_code, referred_by_id, organization, gov_type, gov_code)
    VALUES ('".$first_name."', '".$last_name."', '".$birthday."', '".$join_date."', '".$email."', '".$address."', '".$city."', '".$state."', '".$zip_code."',
        '".$phone_home."', '".$phone_cell."', '".$referral_code."', '".$referred_by_id."', '".$organization."', '".$gov_type."', '".$gov_code."'
    )";

// Debug:
print "<pre>". $sql ."
"; mysql_query ($ sql);

При отправке формы оператор SQL должен быть распечатан. Возьмите этот оператор SQL и попробуйте выполнить его непосредственно вMySQL, чтобы увидеть, работает ли он или генерирует ошибку.

...