2015-05-07 4 views
0

Я не могу понять, что не так с моим кодом. Я пытаюсь заставить его принять отМои данные не сохраняются в моей базе данных

<form id="contact-form" action="emails.php" method="post"> 
    <input placeholder="Please enter your email address" name="emailz" type="email" tabindex="2" required> 
    <input type="submit" name="submit" id="contact-submit" value="Subscribe"> 
</form> 

и сохраните его в моей базе данных.

Вот мой PHP-файл:

$servername = "localhost"; 
$username = "poweilup"; 
$password = "bloop"; 
$dbname = "poweilup_emails"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$insert = "INSERT INTO emails(addressEmail) VALUES($_POST '$emailz')"; 
$conn->close(); 
+2

Где вы когда-нибудь видели что-нибудь подобное этому 'VALUES ($ _ POST '$ emailz')'? – AbraCadaver

+0

Не говоря уже о том, что вы настраиваете запрос, но не запускаете его? Также не использовать подготовленные заявления и вставлять данные POST непосредственно в вашу базу данных? – icecub

+1

Я понятия не имею, что я делаю, ребята. У меня около 30 минут PHP-кодирования, и я просто собрал случайные вещи, которые я нашел в Интернете. – prefights

ответ

1

Чтобы использовать MySQLi безопасным способом, лучше всего использовать Prepared Statements. Это не позволит вашим пользователям вставлять SQL-инъекцию или, возможно, по ошибке, вставлять символы, которые могут вызвать проблемы на вашем сервере MySQL.

Как вы можете видеть в приведенном ниже скрипте, я сначала готовлю SQL-запрос, используя заполнитель «?» для переменной item. После того, как я привяжу параметр (переменную) к этому заполнителю.

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

<?php 

/* DB Info */ 
$servername = "localhost"; 
$username = "poweilup"; 
$password = "bloop"; 
$dbname = "poweilup_emails"; 

/* MySQLi Object */ 
$conn = new mysqli($servername, $username, $password, $dbname); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/* Prepare query */ 
if ($stmt = $conn->prepare("INSERT INTO emails (addressEmail) VALUES (?)")){ 

    /* Bind POST data */ 
    $stmt->bind_param("s", $_POST['emailz']); 

    /* Run query */ 
    $stmt->execute(); 

    /* Close statement */ 
    $stmt->close(); 
} 

/* Close connection */ 
$conn->close(); 

?> 
+0

Что такое ':?' Должно быть? 'mysqli' использует только'? '. – tadman

+0

@tadman Yup. Виноват. Я привык использовать 'PDO()' себя. Вот почему я его перепутал. – icecub

+0

Названные заполнители PDO намного удобнее, это правда. – tadman

1

Вот как вы делаете вставку -

$servername = "localhost"; 
$username = "poweilup"; 
$password = "bloop"; 
$dbname = "poweilup_emails"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$stmt = $conn->prepare("INSERT INTO `emails`(`addressEmail`) VALUES(?)"); 
$stmt->bind_param('s', $email); 

$email = $_POST('emailz'); 
$stmt->execute(); 

Прежде всего подготовить запрос и оставить заполнители для переменных элементов. Вы bind each parameter(variable), а затем объявите их. Наконец, вы выполняете запрос.

+0

Пробовал это и получил «Неустранимая ошибка: вызов функции-члена prepare() для не-объекта в /home/poweilup/public_html/emails.php в строке 18» – prefights

+0

Также означает включение [отчет об исключении] (http://php.net/manual/en/class.mysqli-sql-exception.php) - хорошая идея. – tadman

-1

Сначала проверьте, если пользователь не пропустил ничего:

if (isset($_POST['emailz']) { //code here.. }; 

В разделе code here... сохраните значение emailz в переменной, как это:

$emailz = $_POST['emailz']; 

Конечно это может быть небезопасно для более важных данных, таких как пароли. Затем вы должны использовать функцию hash().

Для вставки переменной в БД, попробуйте следующее:

$query = "INSERT INTO `user` (emailz) VALUES ('$emailz')"; $result = mysql_query($query);  //inserts the variable in the DB. 
+0

** ПРЕДУПРЕЖДЕНИЕ: ** Без [надлежащего SQL-экранирования] (http: // bobby-tables.com/php) это [чрезвычайно опасно] (http://bobby-tables.com/). Вы также используете ужасный интерфейс 'mysql_query', когда вопрос использует' mysqli'. – tadman

+0

Дать это выстрел. Тем не менее, я заметил, что вы положили «& _POST» вместо «$ _POST» в первой строке. – prefights

+0

извините, я быстро набрал текст! –

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