Ajax и PHP - ошибка при вставке - PullRequest
0 голосов
/ 22 марта 2011

Я использую Ajax, чтобы получить значение из выпадающего списка и отобразить результат. Например, у меня три типа беспорядка в выпадающем списке (вег, не вег и старший беспорядок).Вот мой код из части Sql:

<?php
$q=$_GET["q"];

$con = mysql_connect('localhost', 'root', '');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("hostel", $con);

$sql="SELECT registration.hosteladmissionno,registration.student_name,registration.semester,messexp.billmonth,messexp.billyear,messexp.wastagecharge,exp_amount.blockexp FROM registration,messexp,blockexp WHERE registration.mess_type = '".$q."' && status_flag=1";

$result = mysql_query($sql);

echo "<table border='1' width=80%>
<tr>
 <th width=5%> S.No</th>
<th width=10%>H.Admin No</th>
<th width=10%>Student Name</th>
<th width=10%>Semester</th>
<th width=10%>Billmonth</th>
<th width=10%>Bill Year</th>
<th width=10%>Wastage Charge</th>
<th width=10%>Block Amount</th>
<th width=5%>No of Days</th>
</tr>";
 $i=0;
while($row = mysql_fetch_array($result))
  {
  $i=$i+1;
  echo "<tr>";
  echo "<td  align=center>" .$i."</td>";
  echo "<td size=10 align=center>" . $row['hosteladmissionno'] . "</td>";
  echo "<td size=35  align=center>" . $row['student_name'] . "</td>";
   echo "<td size=10 align=center>" . $row['semester'] . "</td>";
  echo "<td size=35  align=center>" . $row['billmonth'] . "</td>";
   echo "<td size=10 align=center>" . $row['billyear'] . "</td>";
  echo "<td size=35  align=center>" . $row['wastagecharge'] . "</td>";
  echo "<td size=35  align=center>" . $row['exp_amount'] . "</td>";
  echo "<td  align=center>  <input type='text' name='days' size=2> </td> ";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);
?>

Часть Ajax:

    <script type="text/javascript">
function showUser(str)
{
if (str=="")
  {
  document.getElementById("txtHint").innerHTML="";
  return;
  }
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","messbill1.php?q="+str,true);
xmlhttp.send();
}
</script>

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

Часть формы:

    <h2 align='center'><b>Mess Bill</h1></b>
<form action="messbill.php"  onchange="showUser(this.value)"/>
<center>
<table>
<?php
$link = mysql_connect("localhost", "root", "");
mysql_select_db("hostel",$link);

$query = "SELECT mess_type FROM mess_type";
$result = mysql_query($query);

print "<tr><td><b>MESS TYPE:</b></td><td><SELECT name='users' onchange='showUser(this.value)'>";
while ($line = mysql_fetch_array($result))
{
foreach ($line as $value)
{
print "<OPTION value='$value'";
}
print ">$value</OPTION>";
}
mysql_close($link);
print "</SELECT></td></tr>";
?>

1 Ответ

1 голос
/ 22 марта 2011

Вы не проверяете возврат из mysql_query , который возвращает false при ошибке.

Вы должны проверить возвращаемое значение, а затем проверить ошибку:

if ($result === false) {
    //die is ok to use in development, 
    //use something you can handle the error with in production.
    die(mysql_error());
}

Ошибка в вашем запросе заключается в том, что вы используете &&, а не AND, что ожидается MySQL.

Примечание: Если у вас нет скрытых уведомлений, вы должны увидеть:

Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение задано

Лучше всего разрабатывать со всеми error_reporting на E_ALL, чтобы вы могли видеть любые уведомления / предупреждения, которые могут вызывать у вас ошибки.


Вот ваш запрос в более удобочитаемом формате:

SELECT 
    registration.hosteladmissionno,
    registration.student_name,
    registration.semester,
    messexp.billmonth,
    messexp.billyear,
    messexp.wastagecharge,
    exp_amount.blockexp // Trying to select from a table not included in the FROM
FROM 
    registration,
    messexp,
    blockexp // I'm assuming you want exp_amount from this table.
WHERE 
    registration.mess_type = '".$q."' 
    AND status_flag=1 // Changed to be using AND not &&

Вы хотели выбрать blockexp.exp_amount?

Способ, которым вы используете текущий запрос, заключается в том, что он извлекает значения из таблицы exp_amount в столбце blockexp (который не существует или в любом случае не был включен).

Если вы хотите все поля из blockexp, используйте blockexp.*


Следующая проблема, с которой вы столкнетесь, это то, что вы вообще не указываете, как эти таблицы объединяются. Поэтому я верю, что вы получите все возможные комбинации строк.

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