e-shop

@Real@

Новичок
Есть 2 файла:
PHP:
<?php

function ClearData ($data, $type="sring")
{
    switch ($type)
    {
        case "string" :
            return mysql_real_escape_string (trim (strip_tags($data)));
        case "int" :
            return (int)$data; // приводим полученные данные к типу - число
    }
}

function save ($author, $title, $pubyear, $price)
{
    $sql = "INSERT INTO catalog(
                                author,
                                title,
                                pubyear,
                                price
                                ) 
                         VALUES(
                                '$author',
                                '$title',
                                $pubyear,
                                $price
                               )";
    mysql_query ($sql) or die (mysql_error());
   
    
}
PHP:
// подключение библиотек
	require "eshop_db.inc.php";
	require "eshop_lib.inc.php";
	
        //получения и фильтрация данных из форм
        cleardata ($a = $_POST ["author"]);
        cleardata ($t = $_POST ["title"]);
        cleardata ($pyb = $_POST ["pubyear"], "int");
        cleardata ($pr = $_POST ["price"], "int");
        //сохранения нового товара в БД
        save ($a, $t, $pub, $pr);    
        
        header('Location:  add2cat.php');

Но при добавлении данных выдает ошибку
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 25 )' at line 10
В моем случаи я отправлял 25 отправлял в поле price.
Не огу понять почему?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
cleardata ($a = $_POST ["author"]);
cleardata ($t = $_POST ["title"]);
cleardata ($pyb = $_POST ["pubyear"], "int");
cleardata ($pr = $_POST ["price"], "int");
//сохранения нового товара в БД
save ($a, $t, $pub, $pr);
До одного места такой ескейпинг
Сам догадаешься почему или подсказать

www.phpfaq.ru/debug
пункт номер 2
 

Redjik

Джедай-мастер
//получения и фильтрация данных из форм
cleardata ($a = $_POST ["author"]);
cleardata ($t = $_POST ["title"]);
cleardata ($pyb = $_POST ["pubyear"], "int");
cleardata ($pr = $_POST ["price"], "int");
//сохранения нового товара в БД
это круто!!! Жалко в индусский код нельзя это...
продолжу намек Mr_Max,
PHP:
$a = $_POST ["author"]
выражение в скобочках равно true
 

@Real@

Новичок
Как я понял, сдель лишние переменные
Сделал так
PHP:
cleardata ($_POST ["author"]);
        cleardata ($_POST ["title"]);
        cleardata ($_POST ["pubyear"], "int");
        cleardata ($_POST ["price"], "int");
        //сохранения нового товара в БД
        save ($_POST ["author"], $_POST ["title"], $_POST ["pubyear"], $_POST ["price"]);
И работает.
Подскажите как это правильно делать.
Пы.СЫ сильно не пинайте. Несколько дней php учу
 

@Real@

Новичок
Еще попробовал так:
PHP:
$a = $_POST ["author"];
        $t = $_POST ["title"];
        $pyb = $_POST ["pubyear"];
        $pr = $_POST ["price"];
        
        cleardata ($a);
        cleardata ($t);
        cleardata ($pyb, "int");
        cleardata ($pr, "int");
        //сохранения нового товара в БД
        save ($a, $t, $pyb, $pr);
Тоже работает.
 

@Real@

Новичок
Так, что-ли делать?
PHP:
if (mysql_real_escape_string (trim (strip_tags($a))) and mysql_real_escape_string (trim (strip_tags($t))) and mysql_real_escape_string (trim (strip_tags($pyb))) and mysql_real_escape_string (trim (strip_tags(pr))))
{
            save ($a, $t, $pyb, $pr);
            header('Location:  add2cat.php');
}
Вы мне логику подскажите, а код я сам поробую написать.
 

SkyLine

Новичок
Как я понял, сдель лишние переменные
Сделал так
PHP:
cleardata ($_POST ["author"]);
        cleardata ($_POST ["title"]);
        cleardata ($_POST ["pubyear"], "int");
        cleardata ($_POST ["price"], "int");
        //сохранения нового товара в БД
        save ($_POST ["author"], $_POST ["title"], $_POST ["pubyear"], $_POST ["price"]);
И работает.
Подскажите как это правильно делать.
Функция cleardata получает данные, обрабатывает их и возвращает результат. Данные передали, функция их обработала, а результат получать не нужно?
В данном случае переменные, которые передаются в функцию не меняются.

Пы.СЫ сильно не пинайте. Несколько дней php учу
Учить нужно начинать с теории...
 

@Real@

Новичок
Пробую по малу разобраться.
Сделал код так
PHP:
$a = cleardata ($_POST ["author"]);
        $t = cleardata ($_POST ["title"]);
        $pyb = cleardata ($_POST ["pubyear"], "int");
        $pr = cleardata ($_POST ["price"], "int");
        save ($a, $t, $pyb, $pr);
        header('Location:  add2cat.php');
Отправляю значения:

А в БД не заносится 2 значения. А еменно:
author и title
 

SkyLine

Новичок
Я уже понял, что туда приходит - NULL
Но вот почему...
Попробуй вывести запрос в функции save и посмотри, что с ним не так...
Проверь какие значения возвращает функция в 1 и 2 вызовах...
На самом деле причин может быть куча
 

@Real@

Новичок
Рою faq на верность, а оказываетmся опечатка((( в названии параметра функции
PHP:
function ClearData ($data, $type="sring")
{
    switch ($type)
    {
        case "string" :
            return mysql_real_escape_string (trim (strip_tags($data)));
        case "int" :
            return (int)$data; // приводим полученные данные к типу - число
    }
}
надо
PHP:
function ClearData ($data, $type="string")
{
    switch ($type)
    {
        case "string" :
            return mysql_real_escape_string (trim (strip_tags($data)));
        case "int" :
            return (int)$data; // приводим полученные данные к типу - число
    }
}
 
Сверху