2013-11-01 4 views
0

У меня есть база данных с двумя таблицами: «пользователи» и «расходы». Таблица ПОЛЬЗОВАТЕЛИ: id - первичный, автоматический приращение; имени пользователя пароля, и т.д. ...Запись значений в другую таблицу из базы данных

Таблица РАСХОДЫ: идентификатора (это не Autoincrement), имени пользователя, сумма, дата причина -> других полей.

Я использую функцию под названием getuserfields(), чтобы получить поля из таблицы USERS (она хранится в файле core.php я требуется в каждом PHP):

if (!function_exists('getuserfield')) { 
    function getuserfield($field) { // 
     //echo $_SESSION['user_id']; 
     $query = "SELECT `$field` FROM `users` WHERE `id`='".$_SESSION['user_id']."'"; 
     /*$query2 = "SELECT `$field` FROM `expenses` WHERE `id`='".$_SESSION['user_id']."'";*/ 
     if ($query_run = mysql_query($query)) { 
      if($query_result = mysql_result($query_run, 0, $field)){ // get the result form the query, row 0 (1 row) cause that is gonna return 1 row/ 
        return $query_result; 
       } 

      } 
    } 
} 

В моей index.php файл я объявленные переменные:

if (loggedin()){ 
    $firstname = getuserfield('firstname'); 
    ..... 
    $spent = getuserfield('spent');  //until here they work as these are variables from users table 

    $ammount = getuserfield('ammount'); //the following are variables from expenses table, and are not working 
    $date = getuserfield('date'); 
    $reason = getuserfield('reason'); 
    $username = getuserfield('username'); 

Я пытаюсь записать их в базу данных с помощью этой функции:

$query = "INSERT INTO `expenses` VALUES (id,'".mysql_real_escape_string($username)."','".mysql_real_escape_string($ammount)."','".mysql_real_escape_string($date)."','".mysql_real_escape_string($reason)."')"; 
if ($query_run = mysql_query($query)) { 
    header ('Location: register_success.php'); 
    } else { 
    echo 'Sorry, we couldn\'t add your expense for the moment.'; 
    } 

Конечно, я получаю эхо-сообщение из запроса, которое запускается, когда запрос не выполняется. Я использую _POST, чтобы получить их из формы, которая выглядит следующим образом:

<form action="register.php" method="POST"> 
<strong>Add expense</strong> <br/> 
Ammount: <br/> 
<input type="text" placeholder="Ammount" name="ammount" value="<?php echo isset($_POST['ammount'])?$_POST['ammount']:null; ?>"><br/> 
Date: <br/> 
<input type="date" placeholder="Enter Date" name="date" value="<?php echo isset($_POST['date'])?$_POST['date']:null; ?>"><br/> 
Reason of expense: <br/> 
<input type="text" placeholder="Reason for expense" name="reason" value="<?php echo isset($_POST['reason'])?$_POST['reason']:null; ?>"><br/> 
<input type="submit" name="Submit"> 
</form> 

Я совершенно новый, так ... никаких sugestions? Спасибо

+0

Кроме того, сообщение об ошибке «Извините, мы не смогли добавить ваши расходы на данный момент». появляется, когда загружается индексный файл, и должен только тогда, когда я нажимаю кнопку отправки. – Cataneo

+0

Действительно ли вы выполняете отдельный запрос для каждой переменной? Почему бы не сделать один «select *», а затем получить доступ к '$ row ['field']'? – Barmar

+0

вы используете очень плохой метод для получения ваших пользовательских данных. Извлеките данные один раз вместо запуска запроса для каждого поля. – Ibu

ответ

1

id не является переменной в запросе на расходы. Вы должны добавить сообщения об ошибках в свои запросы, чтобы помочь вам отладить их в будущем.

$query = mysql_query(" 
    INSERT INTO 
     `expenses` 
    VALUES 
    (
    $id, 
    '".mysql_real_escape_string($username)."', 
    '".mysql_real_escape_string($ammount)."', 
    '".mysql_real_escape_string($date)."', 
    '".mysql_real_escape_string($reason)."' 
    )") 
or die ('Sorry, we couldn\'t add your expense for the moment: ' . mysql_error()); 

header ('Location: register_success.php'); 

Кроме того, вы действительно должны использовать mysqli или pdo, mysql is deprecated as of php 5.5.x, так что вы должны спасти себя неприятности переписывания все в будущем.

+0

Я вижу, я заменил его на это, и я получаю сообщение об ошибке: Примечание: Неопределенная переменная: id в C: \ xampp \ htdocs \ spr \ index.php в строке 89 К сожалению, мы не смогли добавить ваши расходы для момент: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' csmarand ',' ',' ',' ')' в строке 5. Связано ли это с PDO, MySQLi, к которому все относятся? Будет ли он работать, если я заставлю логин заменить? – Cataneo

+0

Нет, это потому, что $ id не определен. Если это не таблица с автоматическим приращением, вам нужно назначить что-то переменной $ id. Если это таблица с автоматическим приращением, вам не нужно передавать идентификатор, но тогда вам нужно будет указать список полей. – Jade

+0

ОК, я смотрел PDO и нашел новый способ подключения к моей БД. Сначала я использовал это для подключения: ....... Теперь я подключаюсь следующим образом: .... но я догадываюсь, что мне все равно придется внести много изменений для работы кода. Как заменить оператор IF? – Cataneo

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