2015-05-22 5 views
3

У меня есть код, который работает, когда я использую его на странице, но Im пытается сделать это функцией. Я не могу заставить его работать, кажется, что переменные $ customer и $ system arent отправляются в код. Даже если я напечатаю его в Raw. Любая идея, что не так? $ Клиент - это имя клиента, $ system может быть «Source» или «Target».

function status_total($customer, $system){ 
     $sql_customer  = "SELECT * FROM `Customer` WHERE Cust_Name = '$customer' LIMIT 0,1"; 
     $customer_selection = mysqli_query($conn,$sql_customer); 
     $customer_row  = mysqli_fetch_assoc($customer_selection); 
     $env_lines   = $customer_row["Env_Lines"]; 
     $cust_id   = $customer_row["Cust_ID"]; 
     $sql_last_records = "SELECT * FROM $system WHERE Cust_ID = $cust_id ORDER BY Time DESC LIMIT $env_lines"; 
     $record_selection = mysqli_query($conn, $sql_last_records);    

     $result = mysqli_fetch_all($record_selection, MYSQLI_ASSOC); 
     $states = array_column($result, "Stat"); 

     if($states == array_fill(0, count($states), "Run")) { 
      echo "Success"; 
     } else 
      echo "Fail"; 

    } 

https://gist.github.com/R2D2-05/78d81566e4bf0eafd1fa

+1

Я не могу видеть ваши $ сопп и $ sql_customer переменные определены в функции ., это должна быть проблема. Я не копаюсь в других проблемах, например, вы, скорее всего, не получите желаемого результата, запрошенного только с именем Клиента в случае дублирования имен клиентов и ограничения возвращаемых данных. – smozgur

+1

... или копаться в других вопиющих проблемах, таких как ** Уязвимости SQL Injection ** или связанные с производительностью проблемы, такие как извлечение * each * столбца в таблице (с помощью SELECT *), когда нам нужно только два столбца , – spencer7593

+0

yup Это была одна из ошибок @smozgur, thnx. Я не думал, что мне нужно включить $ conn, потому что у меня есть это на моей странице config.php, которая включена в эту страницу функции. Php – R2D2

ответ

4

Проблема с кодом является $conn переменная, которая обрабатывается локальной переменной внутри функции. Вы должны:

function status_total($customer, $system){ 
     global $conn; 

     $sql_customer  = "SELECT * FROM `Customer` WHERE Cust_Name = '$customer' LIMIT 0,1"; 
     $customer_selection = mysqli_query($conn,$sql_customer); 
     $customer_row  = mysqli_fetch_assoc($customer_selection); 
     $env_lines   = $customer_row["Env_Lines"]; 
     $cust_id   = $customer_row["Cust_ID"]; 
     $sql_last_records = "SELECT * FROM $system WHERE Cust_ID = $cust_id ORDER BY Time DESC LIMIT $env_lines"; 
     $record_selection = mysqli_query($conn, $sql_last_records);    

     $result = mysqli_fetch_all($record_selection, MYSQLI_ASSOC); 
     $states = array_column($result, "Stat"); 

     if($states == array_fill(0, count($states), "Run")) { 
      echo "Success"; 
     } else 
      echo "Fail"; 

    } 

Или вы можете также передать $conn через функцию, поэтому изменить описание функции для:

function status_total($conn, $customer, $system){...} 
+0

Я не могу поверить, что я сам не узнал эту ошибку синтаксиса, но я думаю, что это почему-то все же noob lol. Это фиксировало первую проблему sql. И часть $ conn решила все остальное! спасибо, я не думал, что это необходимо, потому что на моей странице functions.php включена страница config.php с подключением к базе данных. – R2D2

+1

В PHP по умолчанию функции связаны с областью действия. Внутри функции вы получаете доступ только к переменным, которые либо передаются в качестве параметров этой функции, либо определены в этой функции. Чтобы получить доступ к внешним $ vars, вы должны объявить их «глобальными»; –