2015-05-03 3 views
0

У меня есть phpform, когда я нажимаю только кнопку submit без выбора каких-либо параметров не требуется, чтобы система отображения:Как избавиться от уведомления и предупреждения в php форме?

Notice: Undefined variable: result in C:\XAMPP\htdocs\statistics\lecturer.php on line 83

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in C:\XAMPP\htdocs\statistics\lecturer.php on line 83

Так я получаю notice и warning для этой строки кода: while($unit=mysql_fetch_assoc($result)), особенно для $result.

lecturer.php

<?php 
session_start(); 
include 'connect.php'; 

$years = array(
    2005, 
    2006, 
    2007 
); 
$lecturers = array(
     'lec1', 
     'lec2', 
     'lec3', 
     'lec4' 
); 


if(isset($_POST['submit'])){ 


$year = mysql_real_escape_string($_POST['year']); 
$lecturer = mysql_real_escape_string($_POST['lecturer']); 

/*checks if the user types the url of the page that he is not allowed to use, it leads him to the main page so to login*/ 
if(!isset($_SESSION['username'])){ 

    header("location:../../statistics/main.htm"); 
} 
$username=$_SESSION['username']; 


    if(!empty($lecturer) && !empty($year)){ 

     if (in_array($lecturer, $lecturers) && in_array($year, $years)) { 

      $sql = mysql_query("SELECT unit_name,a1,a2,a3,l1,l2,l3,l4,l5,l6,l7,lavg,r1,r2,u1,u2,u3 FROM $lecturer WHERE year=$year)")or die(mysql_error()); 

      $result = mysql_query($sql); 
     } 

    else{ 
     echo "Please select a lecturer and a year."; 
    } 
    } 
} 
?> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="../../statistics/style.css"> 
</head> 
<body> 
    <div id="container"> 
    <table id="table" width="900" border="1" cellspacing="1"> 
<tr> 
    <td>Unit Name</td> 
    <td>A1 </td> 
    <td>A2 </td> 
    <td>A3 </td> 
    <td>L1 </td> 
    <td>L2 </td> 
    <td>L3 </td> 
    <td>L4 </td> 
    <td>L5 </td> 
    <td>L6 </td> 
    <td>L7 </td> 
    <td>LAVG </td> 
    <td>R1 </td> 
    <td>R2 </td> 
    <td>U1 </td> 
    <td>U2 </td> 
    <td>U3 </td> 


</tr> 

<?php 
    while($unit=mysql_fetch_assoc($result)){ 
     echo "<tr>"; 
     echo "<td>".$unit['unit_name']."</td>"; 
     echo "<td>".$unit['a1']."</td>"; 
     echo "<td>".$unit['a2']."</td>"; 
     echo "<td>".$unit['a3']."</td>"; 
     echo "<td>".$unit['l1']."</td>"; 
     echo "<td>".$unit['l2']."</td>"; 
     echo "<td>".$unit['l3']."</td>"; 
     echo "<td>".$unit['l4']."</td>"; 
     echo "<td>".$unit['l5']."</td>"; 
     echo "<td>".$unit['l6']."</td>"; 
     echo "<td>".$unit['l7']."</td>"; 
     echo "<td>".$unit['lavg']."</td>"; 
     echo "<td>".$unit['r1']."</td>"; 
     echo "<td>".$unit['r2']."</td>"; 
     echo "<td>".$unit['u1']."</td>"; 
     echo "<td>".$unit['u2']."</td>"; 
     echo "<td>".$unit['u3']."</td>"; 
     echo "</tr>";  
    } 
?> 
</table> 
</div> 
</body> 
</html> 

ответ

-1

Так я предполагаю, что ваш код находится в фазе производства и скрывая все ошибки от показа. Добавьте их поверх PHP блока:

ini_set('error_reporting', 0); // type of error for displaying 
ini_set('display_errors', 0);  // 0 = hide errors; 1 = display errors 

Для стадии тестирования, эти коды ниже будут показывать фатальную ошибку и потайное уведомление и предупреждение:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_WARNING); 
ini_set('display_errors', 1);  // 0 = hide errors; 1 = display errors 
+0

Спасибо большое! Я избавился от них. – JackDog

+1

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

0

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

Вы спрашиваете, не пустое ли это значение, но оно не пустое со значением false, поскольку значение post не было установлено.

Это действительно поможет вам написать лучший код - вам просто нужно понять, что отсутствуют условия.

В вашем случае взять строку:

if(isset($_POST['submit'])){ 

и добавить несколько дополнительных ограничений

if((isset($_POST['submit'])) && (isset($_POST['year'])) && (isset($_POST['lecturer']))){ 

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

Однако ваши конечные пользователи теперь будут жаловаться, что иногда форма не работает. Это также полезно, поскольку это говорит вам, что вы могли бы сделать больше с условными

$noerrors = true; 
if(!isset($_POST['year'])){ 
    echo "Did you forget to choose a year?"; 
    $noerrors = false; 
} 
if(!isset($_POST['lecturer'])){ 
    echo "Did you forget to choose a lecturer?"; 
    $noerrors = false; 
} 
if(isset($_POST['submit']) && $noerrors){ 
    //... 

Основное «правило» развития, что вам нужно помнить, чтобы предположить, что пользователи будут злоупотреблять форму или другой интерфейс вы сделали а затем кодировать все возможные злоупотребления и злоупотребления. Исходя из предположения, что кто-то стремится нарушить вашу систему, часто бывает полезно.

0

Попробуйте следующее:

запроса:

$sql = mysql_query("SELECT `unit_name`, `a1`, `a2`, `a3`, `l1`, `l2`, `l3`, `l4`, `l5`, `l6`, `l7`, `lavg`, `r1`, `r2`, `u1`, `u2`, `u3` FROM `$lecturer` WHERE `year` = $year)") or die (mysql_error()); 

кавычку предотвратят ошибки знают как mysql reserved words

Для времени цикла необходимо выполнить следующие действия:

if(!empty($result)) { 
     while($unit = mysql_fetch_assoc($result)){ 
      echo "<tr>"; 
      echo "<td>".$unit['unit_name']."</td>"; 
      echo "<td>".$unit['a1']."</td>"; 
      echo "<td>".$unit['a2']."</td>"; 
      echo "<td>".$unit['a3']."</td>"; 
      echo "<td>".$unit['l1']."</td>"; 
      echo "<td>".$unit['l2']."</td>"; 
      echo "<td>".$unit['l3']."</td>"; 
      echo "<td>".$unit['l4']."</td>"; 
      echo "<td>".$unit['l5']."</td>"; 
      echo "<td>".$unit['l6']."</td>"; 
      echo "<td>".$unit['l7']."</td>"; 
      echo "<td>".$unit['lavg']."</td>"; 
      echo "<td>".$unit['r1']."</td>"; 
      echo "<td>".$unit['r2']."</td>"; 
      echo "<td>".$unit['u1']."</td>"; 
      echo "<td>".$unit['u2']."</td>"; 
      echo "<td>".$unit['u3']."</td>"; 
      echo "</tr>";  
     } 
    } 

Если вы по-прежнему получаете сообщение об ошибке/предупреждении об ошибке $result jus t перед утверждением if. и дайте мне знать, что вы получаете. При попытке удалить 2 строки из @EngCy.

Вы должны также начать использовать mysqli_* или pdo как mysql_* является depracted и будут удалены

Update

Я снова посмотрел на код и заметил другую ошибку:

$sql = mysql_query("SELECT unit_name,a1,a2,a3,l1,l2,l3,l4,l5,l6,l7,lavg,r1,r2,u1,u2,u3 FROM $lecturer WHERE year=$year)")or die(mysql_error()); 

$result = mysql_query($sql); 

Вы в основном делаете то же самое здесь. Сначала вы выполните запрос и установите результат на $sql. И когда это будет сделано, вы запросите $sql, что это не будет работать. Поэтому вы можете использовать $sql в своем цикле while или сказать $result = $sql;

+0

Я сделал именно то, что вы мне сказали, но я получаю эту ошибку: «У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «)» в строке 1. Теперь я удалил backticks, и я также удалил условие «if» до «while», и теперь он работает. – JackDog

+0

@JackDog Можете ли вы взглянуть на мое обновление – SuperDJ

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