2015-02-04 3 views
1

Итак, я исправил свою ошибку, но я все еще получаю сообщение об ошибке. Я не использую MySQLi, но я хотел бы помочь моему другу получить что-то, что работает на его сайт, который он создает.Php MySQLi Неопределенные значения (переменные)

<?php 

if(isset($_POST['submit'])) 
{ 
$firstname = filter($_POST['firstname']); 
$lastname = filter($_POST['lastname']); 
$age = filter($_POST['age']); 
} 

$db = new MySQLi('localhost', 'root', '', 'register'); 
    if ($db->connect_error) { 
      $message = $db->connect_error; 
      die($message); 
    } 


    $sql = 'SELECT * FROM users'; 
    $result = $db->query($sql); 
    if ($db->error) { 
      $message = $db->error; 
      die($message); 
    } 

    $db->query("INSERT INTO users (firstname,lastname,age) 
    VALUES ('".$firstname."', '".$lastname."', '".$age."')"); 

    mysqli_close($db); 

?> 

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form action="confirmation.php" method="POST"> 
First Name:<br /> 
<input type="text" name="firstname" placeholder="First name" /> 
Last Name:<br /> 
<input type="text" name="lastname" /> 
Age:<br /> 
<input type="text" name="age" /> 
Submit:<br /> 
<input type="submit" name="submit" /> 
</form> 
</body> 
</html> 

Это ошибка, мы получаем ->

(!) Notice: Undefined variable: firstname in C:\wamp\www\website\register.php on line 25 
Call Stack 
# Time Memory Function Location 
1 0.0008 244952 {main}() ..\register.php:0 

(!) Notice: Undefined variable: lastname in C:\wamp\www\website\register.php on line 25 
Call Stack 
# Time Memory Function Location 
1 0.0008 244952 {main}() ..\register.php:0 

(!) Notice: Undefined variable: age in C:\wamp\www\website\register.php on line 25 
Call Stack 
# Time Memory Function Location 
1 0.0008 244952 {main}() ..\register.php:0 

Когда я делаю это в старом MySQL я не получаю нет такой ошибки, как это так, я очень смущен, так как он работает для меня, когда я это делаю, но с SQLi я получаю ошибку.

+1

Вы выполняете свой запрос, прежде чем назначать значения своим переменным. Это очевидно и то, что не работает независимо от того, какой API вы используете. –

+0

О, вау, я не могу поверить, что я пропустил это. Да, я понимаю, почему это вообще не сработает, спасибо, Джон, за то, что указали это. – GrimmRP

+0

Можете ли вы показать, что делает 'filter()'? – Darren

ответ

1

Этот кодовый блок должен быть первым, перед выполнением любого запроса MySQL.

if(isset($_POST['submit'])) 
{ 
    $firstname = filter($_POST['firstname']); 
    $lastname = filter($_POST['lastname']); 
    $age = filter($_POST['age']); 
} 

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

Таким образом:

<?php 

if(isset($_POST['submit'])) 
{ 
    $firstname = filter($_POST['firstname']); 
    $lastname = filter($_POST['lastname']); 
    $age = filter($_POST['age']); 
    $db = new MySQLi('localhost', 'root', '', 'register'); 
    if ($db->connect_error) { 
      $message = $db->connect_error; 
      die($message); 
    } 


    $sql = 'SELECT * FROM users'; 
    $result = $db->query($sql); 
    if ($db->error) { 
      $message = $db->error; 
      die($message); 
    } 

    $db->query("INSERT INTO users (firstname,lastname,age) 
    VALUES ('".$firstname."', '".$lastname."', '".$age."')"); 

    mysqli_close($db); 
} 

?> 
+1

Это все еще ошибка, так как вы всегда выполняете запрос, установлены ли значения или нет. –

+0

Да, я все еще получаю ошибку. Я обновил сообщение или вопрос. Я надеюсь, что это поможет объяснить мою ошибку, которую я получаю, ее значение (значение) part – GrimmRP

+0

Пожалуйста, просмотрите обновленный блок кода из @Sphinxxx - его оператор if() правильно инкапсулирует остальную часть кода запроса, поэтому запрос не выполняется, если это не форма представления формы $ _POST. –

0

Дайте этот выстрел:

<?php 

if(isset($_POST['submit'])) 
{ 
$firstname = filter($_POST['firstname']); 
$lastname = filter($_POST['lastname']); 
$age = filter($_POST['age']); 


$db = new MySQLi('localhost', 'root', '', 'register'); 
    if ($db->connect_error) { 
      $message = $db->connect_error; 
      die($message); 
    } 


    $sql = 'SELECT * FROM users'; 
    $result = $db->query($sql); 
    if ($db->error) { 
      $message = $db->error; 
      die($message); 
    } 

    $db->query("INSERT INTO users (firstname,lastname,age) 
    VALUES ('".$firstname."', '".$lastname."', '".$age."')"); 

    mysqli_close($db); 
} 
else { die("No post data was submitted"); } 
?> 
1

Вы должны убедиться, что поля на самом деле есть данные в них.

$required = array(
    'firstname', 
    'lastname', 
    'age' 
); 

$missing = array(); 
foreach($required as $item) { 
    if(!isset($_POST[$item}) || empty($_POST[$item])) { 
     $missing[] = $item; 
    } 
} 

if(!empty($missing)) { 
    die("You need to supply the required fields. (" .implode(", ", $missing). ")"); 
} else { 
    // run the query here. 
} 

Как вы можете видеть, мы запускаем $required массива для обеспечения значения устанавливается в $_POST суперглобальных и не пустые. Поскольку мы требуем от них этого.

Я все еще, однако думаю, что ваша filter() функция имеет что-то делать. Не могли бы вы это поставить?

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