Почему мои данные не отправляются в базу данных MySQL? - PullRequest
0 голосов
/ 04 августа 2011

У меня есть страница движка PHP, которая обрабатывает данные, введенные в форму, с переменными строками.PHP генерирует электронную почту и должен также ввести данные в таблицу MySQL, которая уже создана.Электронная почта работает нормально, но по какой-то причине в мою базу данных MySQL не поступают никакие данные.Я уверен, что все настройки для базы данных и таблицы являются правильными.Я также не вижу никаких сообщений об ошибках.Мой код состоит из следующего:

HTML для формы:

<form method="post" name="booking" action="bookingengine.php">
    <fieldset>
        <h2>Waged/Organisation Rate</h2>
       <p>
            <input type="text" name="name[]">
            <input type="text" name="email[]">
            <input type="text" name="organisation[]">
            <input type="text" name="position[]">
        </p>
        <p><span class="add">Add person</span></p>
    </fieldset>

    <fieldset>
        <h2>Unwaged Rate</h2>
        <p>
            <input type="text" name="name2[]">
            <input type="text" name="email2[]">
        </p>
        <p><span class="add">Add person</span></p>
    </fieldset>

    <p><input type="submit" name="submit" id="submit" value="Submit and proceed to payment page" class="submit-button" /></p>

</form>

connection.php:

<?php

$hostname = "localhost";
$database = "****";
$username = "****";
$password = "****";
$connection = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);

?>

bookingengine.php:

<? include 'connection.php'; ?>

<?php

$emailFrom = "****";
$emailTo = "****";
$subject = "Booking for Soteria Conference";

$body = "The following people have booked for the Soteria Conference in Derby:" . "\n\n" . "Waged/Organisation Rate:" . "\n\n";
$row_count = count($_POST['name']);
$row_count2 = count($_POST['name2']);

 $values = array();

 for($i = 0; $i < $row_count; $i++) {
     // variable sanitation...
     $name = trim(stripslashes($_POST['name'][$i]));
     $email = trim(stripslashes($_POST['email'][$i]));
     $organisation = trim(stripslashes($_POST['organisation'][$i]));
     $position = trim(stripslashes($_POST['position'][$i]));

     // this assumes name, email, and telephone are required & present in each element
     // otherwise you will have spurious line breaks. 
     $body .= "Name: " . $name . "    Email: " . $email . "  Organisation: " . $organisation . "   Position: " . $position . "\n\n";

     //prepare the values for MySQL
     $values[] = '(' . $name . ',' . $email . ',' . $organisation . ',' . $position . ')';
}

mysql_select_db($database, $connection);

$query = "INSERT INTO conference (Name, Email, Organisation, Position) VALUES " . implode(',', $values);

 $values = array();

 $body .= "Unwaged Rate:" . "\n\n";

 for($i = 0; $i < $row_count; $i++) {
     // variable sanitation...
     $name = trim(stripslashes($_POST['name'][$i]));
     $email = trim(stripslashes($_POST['email'][$i]));

     // this assumes name, email, and telephone are required & present in each element
     // otherwise you will have spurious line breaks. 
     $body .= "Name: " . $name . "    Email: " . $email . "\n\n";

     //prepare the values for MySQL
     $values[] = '(' . $name . ',' . $email . ')';
}
$query = "INSERT INTO conference (Name, Email) VALUES " . implode(',', $values);

// send email 
$success = mail($emailTo, $subject, $body, "From: <$emailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=/conference/payment.html\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

Кто-нибудь может определить, почему данные не отправляются в базу данных MySQL?

Спасибо,

Ник

Текущий код:

for($i = 0; $i < $row_count; $i++) {
     // variable sanitation...
     $name = trim(stripslashes($_POST['name'][$i]));
     $email = trim(stripslashes($_POST['email'][$i]));
     $organisation = trim(stripslashes($_POST['organisation'][$i]));
     $position = trim(stripslashes($_POST['position'][$i]));

     // this assumes name, email, and telephone are required & present in each element
     // otherwise you will have spurious line breaks. 
     $body .= "Name: " . $name . "    Email: " . $email . "  Organisation: " . $organisation . "   Position: " . $position . "\n\n";

     //prepare the values for MySQL
     $values = "'" . $name . "','" . $email . "','" . $organisation . "','" . $position . "'";
}

mysql_select_db($database, $connection);

$query1 = "INSERT INTO conference (Name, Email, Organisation, Position) VALUES " . $values;

$result1 = mysql_query($query1);
if (!$result1) {
  die('Invalid query: ' . mysql_error());
}

Ответы [ 3 ]

3 голосов
/ 04 августа 2011

Я полагаю, вы не выполняли свои запросы после установки операторов вставки.

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

Возьмем, к примеру, ваше первое значение запроса ...

$query = "INSERT INTO conference (Name, Email, Organisation, Position) VALUES (" . $values . ")";

Это на самом деле не выполнение запроса, а просто его определение.Вы должны сделать дополнительный шаг, выполнив его через mysql_query(), как это ...

mysql_query($query);

Само собой разумеется, вы должны изучить стерилизацию своих данных перед их вставкой в ​​базу данных.Удачи!

Редактировать: Изменить эту строку ...

$values[] = '(' . $name . ',' . $email . ',' . $organisation . ',' . $position . ')';

На это.Как видите, вам нужны кавычки вокруг ваших отдельных значений, и в этом случае нет необходимости в массиве.Просто используйте строку.Вы также можете удалить implode() из строки запроса и просто сослаться на переменную.

$values = "('" . $name . "','" . $email . "','" . $organisation . "','" . $position . "')";
2 голосов
/ 04 августа 2011

Отсутствует mysql_query($query); или другая функция , которая выполняет запрос . Вы строите свой запрос с помощью $query = ..., но тогда вы не используете эту переменную.

Вы можете добавить что-то вроде этого:

$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}

Подробнее см .: http://www.php.net/manual/en/function.mysql-query.php

Кроме того, в запросе отсутствуют апострофы для значений:

Ваш код:

 $values[] = '(' . $name . ',' . $email . ',' . $organisation . ',' . $position . ')';

Должно быть так:

 $values[] = '(\'' . $name . '\',\'' . $email . '\',\'' . $organisation . '\',\'' . $position . '\')';

или

 $values[] = "('" . $name . "','" . $email . "','" . $organisation . "','" . $position . "')";

В противном случае значения будут интерпретироваться как имена полей.

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