2016-03-23 2 views
0

Похоже, что это мой день. Если вам станет лучше, вы, вероятно, поможете мне сохранить свою работу (как дизайнер GRAPHIC, но люди, похоже, забывают о программировании, это не то же самое ...).Использование ввода из формы в качестве переменной для извлечения данных из базы данных MySQL

Итак, мой предыдущий вопрос был успешно принят, и теперь все работает. Тем не менее, я хотел бы иметь возможность установить переменную SOMETHING в этой форме с текстовым полем ввода (если я ввожу имя продукта, он отображает все его данные).

Что я теперь, с переменной HARDCODED:

<?php 
$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbname = 'test'; 
$dbpass = ''; 
$dbcharset = 'utf8'; 

$dsn = "mysql:host=$dbhost;dbname=$dbname;charset=$dbcharset"; 
$opt = [ 
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, 
    PDO::ATTR_EMULATE_PREPARES => false, 
]; 
$pdo = new PDO($dsn, $dbuser, $dbpass, $opt); 

$sql = 'SELECT Name, id, Variant, dim1 FROM products WHERE Name=?'; 
$stmt = $pdo->prepare($sql); 
$stmt->execute(["SOMETHING"]); 
$data = $stmt->fetchAll(PDO::FETCH_GROUP); 
?> 


<?php 

foreach($data as $name => $products) { 

     echo $name .'<br>'; 

foreach($products as $row) { 
     echo $row['Variant'] .'<br>'; 
} 


} 


?> 

Этот файл называется testdb.php, я также имею test.php, где я создал поле для ввода:

<html> 
<body> 

<form name='form' method='post' action="testdb.php"> 

Name: <input type="text" name="SOMETHING" id="SOMETHING"><br/> 

<input type="submit" name="submit" value="Submit"> 

</form> 
</body> 
</html> 

Я пытался определить в testdb.php это нравится:

$something = $_POST['SOMETHING']; 

с другими переменными, но это только дает мне пустой результат , Есть идеи? Еще раз спасибо!

+0

Изменить '$ stmt-> выполнить ([ "НЕЧТО"]);' 'TO $ stmt-> выполнить ($ _POST ["SOMETHING"]); ' – Saty

+0

' $ stmt-> execute (["SOMETHING"]); 'вы выполняете строку, а не контент из этой формы. Вам нужно будет получить его из POST-массива: '$ stmt-> execute ($ _ POST ['SOMETHING']);' должен делать трюк. – Qirel

ответ

-1

Если вы хотите использовать переменную $_POST['SOMETHING'], вы можете поместить его в исполнение запроса:

$stmt->execute([$_POST['SOMETHING']]); 

Не забудьте проверить переменную POST перед: никогда не доверяйте ввод пользователя! ;)

EDIT: Как говорит @Qirel, проверка переменной не является необходимым, используя подготовленное заявление

+1

OP использует подготовленные заявления, поэтому он не доверяет его пользовательскому вводу ;-) – Qirel

+0

Просто играя с кодом прямо сейчас, он не возвращает никаких ошибок, но также и никаких данных ... Полученная страница полностью пуста , если я вручную не введу конкретную переменную для выполнения ... Любые идеи? :) –

+0

Проверьте, правильно ли вы отправили POST-версию на сервер (с 'echo'' $ ['SOMETHING'] '). – ellirdnaw