2013-05-23 2 views
1

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

Вот код, который работает:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '201'"); 


while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 

Когда я изменить его на этом он не делает:

$beam_num = $_POST['Beam Number']; 

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '$beam_num'"); 

while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 
+2

попробуйте напечатать значение '$ _POST ['Beam Number']' перед запросом и проверить, является ли его пустым или нет. –

+0

Вы используете MySQLi, поэтому вы должны использовать подготовленные заявления! http://php.net/manual/en/mysqli.prepare.php –

ответ

4

Затем $_POST['Beam Number'] пуст.

Также вы никогда не должны вводить какой-либо пользовательский ввод, такой как сообщение о получении данных непосредственно в запрос. Google sql injection и способы его предотвращения.

Попробуйте отладить $_POST['Beam Number']. Вы должны увидеть, что он пуст, и тогда вам нужно выяснить, почему он пуст.

Редактировать Если есть значение, то отлаживайте строку запроса, предварительно поместив ее в переменную.

error_log($beam_num); 

$query = "SELECT cost_ft FROM Beams WHERE number = '$beam_num'"; 

error_log($query); 

$sql_beam = mysqli_query($link,$query); 

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

+0

Есть ценность там, глядя вверх инъекции сейчас, спасибо – user2407883

+0

собирается показать мое невежество, как мне отлаживать $ _POST ['Beam Number']? – user2407883

+0

Я включил это в мое редактирование, используя 'error_log()'. Отладка переменной просто означает проверить ее значение в определенной точке вашего кода. Если вы не знаете, где находится ваш журнал ошибок, то просто эхо-значение для вашего браузера, если вы разрабатываете lcoalyl, тогда ищите, как его найти. –

0

Изменить свою вторую строку в этом:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '". $beam_num ."'"); 
+0

Это не имеет значения. – Kermit

+0

Это приведет к тому, что точно такая же строка не будет. Насколько я могу судить по его синтаксису. Необходимо оценить переменную в строке с двойными кавычками. –

1

Переменные в работе запроса лучше всего, когда заключенные в фигурные скобки, как это:

$beam_num = $_POST['Beam Number']; 

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = '{$beam_num}'"); 

while($row = mysqli_fetch_array($sql_beam)) 
{ 
    echo "<p>" . $row['cost_ft'] . "</p>"; 
    echo "<br>"; 
} 

Это должно решить эту проблему, если это не так, то попробуйте следующее:

$sql_beam = mysqli_query($link,"SELECT cost_ft FROM Beams WHERE number = $beam_num"); 

я, что в одном моих кодов, и это сработало.

+0

Backticks предназначены для стола и колонок; одинарные кавычки предназначены для нецелых переменных, которые вы передаете. В этом случае кавычки были правильными изначально. – andrewsi

+0

хорошо редактирование это! благодаря! – pattyd

+0

Спасибо за помощь andrewsi и pattyd. Это оказалось проблемой с формой, а не с php. – user2407883

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