mysql_fetch_array() ...

Teodotko

Registered
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/bgshoesi/public_html/buy/test.php on line 60

От какво се получава тази грешка !?
 
Това е кода ми :

Код:
<?php

	$host="localhost"; // Host name
	$username="root"; // Mysql username
	$password="pass"; // Mysql password
	$db_name="test"; // Database name
	$tbl_name="forum_topics"; // Table name -- LEAVE THIS AS IT IS

	mysql_connect($host, "$username", "$password")or die("cannot connect");
	mysql_select_db($db_name)or die("cannot select DB");
	if (isset($_GET['type']) && $_GET['type'] == "setup") {

		$sql = "CREATE TABLE `forum_topics` (
		`id` int(4) NOT NULL auto_increment,
		`topic` varchar(255) NOT NULL default '',
		`detail` longtext NOT NULL,
		`name` varchar(65) NOT NULL default '',
		`email` varchar(65) NOT NULL default '',
		`datetime` varchar(25) NOT NULL default '',
		`view` int(4) NOT NULL default '0',
		`reply` int(4) NOT NULL default '0',
		PRIMARY KEY (`id`)
		) TYPE=MyISAM AUTO_INCREMENT=1 ;";
		$sql2 = "CREATE TABLE `forum_replies` (
		`thread_id` int(4) NOT NULL default '0',
		`a_id` int(4) NOT NULL default '0',
		`a_name` varchar(65) NOT NULL default '',
		`a_email` varchar(65) NOT NULL default '',
		`a_answer` longtext NOT NULL,
		`a_datetime` varchar(25) NOT NULL default '',
		KEY `a_id` (`a_id`)
		) TYPE=MyISAM;";
		mysql_query($sql);
		mysql_query($sql2);
	}elseif (isset($_GET['type']) && $_GET['type'] == "create") {
		echo "<table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#CCCCCC\"><tr><form id=\"form1\" name=\"form1\" method=\"post\" action=\"".$PHP_SELF."?type=post\"><td><table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#FFFFFF\"><tr><td colspan=\"3\" bgcolor=\"#E6E6E6\"><strong>Create New Topic</strong> </td></tr><tr><td width=\"14%\"><strong>Topic</strong></td><td width=\"2%\">:</td><td width=\"84%\"><input name=\"topic\" type=\"text\" id=\"topic\" size=\"50\" /></td></tr><tr><td valign=\"top\"><strong>Detail</strong></td><td valign=\"top\">:</td><td><textarea name=\"detail\" cols=\"50\" rows=\"3\" id=\"detail\"></textarea></td></tr><tr><td><strong>Name</strong></td><td>:</td><td><input name=\"name\" type=\"text\" id=\"name\" size=\"50\" /></td></tr><tr><td><strong>Email</strong></td><td>:</td><td><input name=\"email\" type=\"text\" id=\"email\" size=\"50\" /></td></tr><tr><td> </td><td> </td><td><input type=\"submit\" name=\"Submit\" value=\"Submit\" /> <input type=\"reset\" name=\"Submit2\" value=\"Reset\" /></td></tr></table></td></form></tr></table>";
	}elseif (isset($_GET['type']) && $_GET['type'] == "post") {
		$topic=$_POST['topic'];
		$detail=$_POST['detail'];
		$name=$_POST['name'];
		$email=$_POST['email'];
		$datetime=date("d/m/y h:i:s"); //create date time
		$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
		$result=mysql_query($sql);
		if($result){
			echo "Successful<BR>";
			echo "<a href=\"".$PHP_SELF."\">View your topic</a>";
		}else {
			echo "Error Posting.";
		}
	}elseif (!isset($_GET['type'])) {
		$sql="SELECT * FROM $tbl_name ORDER BY id DESC";
		// OREDER BY id DESC is order result by descending
		$result=mysql_query($sql);
		echo "<table width=\"90%\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#CCCCCC\"><tr><td width=\"6%\" align=\"center\" bgcolor=\"#E6E6E6\"><strong>#</strong></td><td width=\"53%\" align=\"center\" bgcolor=\"#E6E6E6\"><strong>Topic</strong></td><td width=\"15%\" align=\"center\" bgcolor=\"#E6E6E6\"><strong>Views</strong></td><td width=\"13%\" align=\"center\" bgcolor=\"#E6E6E6\"><strong>Replies</strong></td><td width=\"13%\" align=\"center\" bgcolor=\"#E6E6E6\"><strong>Date/Time</strong></td></tr>";
		while($rows=mysql_fetch_array($result)){ // Start looping table row 
			echo "<tr><td bgcolor=\"#FFFFFF\">".$rows['id']."</td><td bgcolor=\"#FFFFFF\"><a href=\"".$PHP_SELF."?type=view&id=".$rows['id']."\">".$rows['topic']."</a><BR></td><td align=\"center\" bgcolor=\"#FFFFFF\">".$rows['view']."</td><td align=\"center\" bgcolor=\"#FFFFFF\">".$rows['reply']."</td><td align=\"center\" bgcolor=\"#FFFFFF\">".$rows['datetime']."</td></tr>";
		}
		echo "<tr><td colspan=\"5\" align=\"right\" bgcolor=\"#E6E6E6\"><a href=\"".$PHP_SELF."?type=create\"><strong>Create New Topic</strong> </a></td></tr></table>";
	}elseif (isset($_GET['type']) && $_GET['type'] == 'view') {
		// get value of id that sent from address bar
		$id=$_GET['id'];
		$sql="SELECT * FROM $tbl_name WHERE id='$id'";
		$result=mysql_query($sql);
		$rows=mysql_fetch_array($result);
		
		echo "<table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#CCCCCC\"><tr><td><table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bordercolor=\"1\" bgcolor=\"#FFFFFF\"><tr><td bgcolor=\"#F8F7F1\"><strong>".$rows['topic']."></strong></td></tr><tr><td bgcolor=\"#F8F7F1\">".$rows['detail']."</td></tr><tr><td bgcolor=\"#F8F7F1\"><strong>By :</strong> ".$rows['name']." <strong>Email : </strong>".$rows['email']."</td></tr><tr><td bgcolor=\"#F8F7F1\"><strong>Date/time : </strong>".$rows['datetime']."</td></tr></table></td></tr></table><BR>";
		$tbl_name2="forum_replies"; // Switch to replies table
		$sql2="SELECT * FROM $tbl_name2 WHERE thread_id='$id'";
		$result2=mysql_query($sql2);
		while($rows=mysql_fetch_array($result2)){
			echo "<table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#CCCCCC\"><tr><td><table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#FFFFFF\"><tr><td bgcolor=\"#F8F7F1\"><strong>ID</strong></td><td bgcolor=\"#F8F7F1\">:</td><td bgcolor=\"#F8F7F1\">".$rows['a_id']."</td></tr><tr><td width=\"18%\" bgcolor=\"#F8F7F1\"><strong>Name</strong></td><td width=\"5%\" bgcolor=\"#F8F7F1\">:</td><td width=\"77%\" bgcolor=\"#F8F7F1\">".$rows['a_name']."</td></tr><tr><td bgcolor=\"#F8F7F1\"><strong>Email</strong></td><td bgcolor=\"#F8F7F1\">:</td><td bgcolor=\"#F8F7F1\">".$rows['a_email']."</td></tr><tr><td bgcolor=\"#F8F7F1\"><strong>Answer</strong></td><td bgcolor=\"#F8F7F1\">:</td><td bgcolor=\"#F8F7F1\">".$rows['a_answer']."</td></tr><tr><td bgcolor=\"#F8F7F1\"><strong>Date/Time</strong></td><td bgcolor=\"#F8F7F1\">:</td><td bgcolor=\"#F8F7F1\">".$rows['a_datetime']."</td></tr></table></td></tr></table><br>";
		}
		$sql3="SELECT view FROM $tbl_name WHERE id='$id'";
		$result3=mysql_query($sql3);
		$rows=mysql_fetch_array($result3);
		$view=$rows['view'];
		// if have no counter value set counter = 1
		if(empty($view)){
			$view=1;
			$sql4="INSERT INTO $tbl_name(view) VALUES('$view') WHERE id='$id'";
			$result4=mysql_query($sql4);
		}
		// count more value
		$addview=$view+1;
		$sql5="update $tbl_name set view='$addview' WHERE id='$id'";
		$result5=mysql_query($sql5);
		
		echo "<BR><table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#CCCCCC\"><tr><form name=\"form1\" method=\"post\" action=\"".$PHP_SELF."?type=reply\"><td><table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#FFFFFF\"><tr><td width=\"18%\"><strong>Name</strong></td><td width=\"3%\">:</td><td width=\"79%\"><input name=\"a_name\" type=\"text\" id=\"a_name\" size=\"45\"></td></tr><tr><td><strong>Email</strong></td><td>:</td><td><input name=\"a_email\" type=\"text\" id=\"a_email\" size=\"45\"></td></tr><tr><td valign=\"top\"><strong>Answer</strong></td><td valign=\"top\">:</td><td><textarea name=\"a_answer\" cols=\"45\" rows=\"3\" id=\"a_answer\"></textarea></td></tr><tr><td> </td><td><input name=\"id\" type=\"hidden\" value=\"".$id."\"></td><td><input type=\"submit\" name=\"Submit\" value=\"Submit\"> <input type=\"reset\" name=\"Submit2\" value=\"Reset\"></td></tr></table></td></form></tr></table>";
	}elseif (isset($_GET['type']) && $_GET['type'] == "reply") {
		// Get value of id that sent from hidden field
		$id=$_POST['id'];
		// Find highest answer number.
		$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE thread_id='$id'";
		$result=mysql_query($sql);
		$rows=mysql_fetch_array($result);
		// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1
		if ($rows) {
			$Max_id = $rows['Maxa_id']+1;
		}else {
			$Max_id = 1;
		}
		// get values that sent from form
		$a_name=$_POST['a_name'];
		$a_email=$_POST['a_email'];
		$a_answer=$_POST['a_answer'];
		$datetime=date("d/m/y H:i:s"); // create date and time
		// Insert answer
		$sql2="INSERT INTO $tbl_name(thread_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')";
		$result2=mysql_query($sql2);
		if($result2){
			echo "Successful<BR>";
			echo "<a href='".$PHP_SELF."?type=view&id=".$id."'>View your answer</a>";
			// If added new answer, add value +1 in reply column
			$tbl_name2="forum_question";
			$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'";
			$result3=mysql_query($sql3);
		}
		else {
			echo "ERROR";
		}
	}
?>

<font face="Tahoma"><a target="_blank" href="http://www.phpfreecode.com/"><span style="font-size: 8pt; text-decoration: none">PHP Free Code</span></a></font>
 
На 60ти ред не виждам заявка.
mysql_fetch_array виждам на 58ми ред.
А в заявката от която вади резултати не виждам грешка.
А тя е:

[sql]
SELECT * FROM $tbl_name ORDER BY id DESC
[/sql]

Сигурен ли си че си настроил $tbl_name да е като таблицата от базата данни ?
Да не си го променил без да искаш с нещо друго и от там да идва грешката.

EDIT:

Друга заявка която виждам е:

[sql]
SELECT * FROM $tbl_name WHERE id='$id'
[/sql]

Или пък да не си задал в линка ?id=ид-то-на-записа

Ето тук също има параметър който се взима с GET.

[sql]
SELECT * FROM $tbl_name2 WHERE thread_id='$id'
[/sql]

[sql]
SELECT view FROM $tbl_name WHERE id='$id'
[/sql]

[sql]
SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE thread_id='$id'
[/sql]

Незнам , но като гледам навсякъде използва ?id т.е. $_GET['id']; то.
Според мен от това че не си задал id което да се GET или пък проблема е от името на таблицата.
 
Мисля, че е това:
PHP:
      $sql="INSERT INTO $tbl_name(`topic`, `detail`, `name`,` email`, `datetime`) VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
 
Не то SQL-а не са импортва сам ? Кое точно трябва да мушна в phpmyadmin от целия код ... Защото това което е след $sql = ми дава error когато опитам да го импортна .

Може ли да чуя също и мнението ви за сигурноста на кода ?
 
Teodotko каза:
Не то SQL-а не са импортва сам ? Кое точно трябва да мушна в phpmyadmin от целия код ... Защото това което е след $sql = ми дава error когато опитам да го импортна .
PHP:
$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$topic = htmlspecialchars(addslashes($_POST['topic']));
$detail = htmlspecialchars(addslashes($_POST['detail']));
$name = htmlspecialchars(addslashes($_POST['name']));
$email = htmlspecialchars(addslashes($_POST['email']));
$datetime=date("d/m/y h:i:s"); //create date time
$sql="INSERT INTO $tbl_name(`topic`, `detail`, `name`,` email`, `datetime`) VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
:idea:
 
Добре само на мене ли ми се струва странно че показва грешка в:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/bgshoesi/public_html/buy/test.php on line 60

А вие търсите грешката в заявката която добавя в базата (INSERT) и която работи чрез mysql_query() без mysq_fetch_array().

Хм.

А иначе ако искаш отделно да си създадеш таблиците вместо чрез скрипта , ето ти кода:

[sql]
CREATE TABLE `forum_topics` (
`id` int(4) NOT NULL auto_increment,
`topic` varchar(255) NOT NULL default '',
`detail` longtext NOT NULL,
`name` varchar(65) NOT NULL default '',
`email` varchar(65) NOT NULL default '',
`datetime` varchar(25) NOT NULL default '',
`view` int(4) NOT NULL default '0',
`reply` int(4) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

CREATE TABLE `forum_replies` (
`thread_id` int(4) NOT NULL default '0',
`a_id` int(4) NOT NULL default '0',
`a_name` varchar(65) NOT NULL default '',
`a_email` varchar(65) NOT NULL default '',
`a_answer` longtext NOT NULL,
`a_datetime` varchar(25) NOT NULL default '',
KEY `a_id` (`a_id`)
) TYPE=MyISAM;
[/sql]

И махни тези 2 реда от test.php:

PHP:
      mysql_query($sql);
      mysql_query($sql2);

Но се съмнявам да е от това де.
 
Сега изскочи друг проблем :cry: Когато отговарям в някой тема дава отново грешка ...

Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/bgshoesi/public_html/buy/test.php on line 98
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/bgshoesi/public_html/buy/test.php on line 98

А на този ред има:

PHP:
      if ($rows) {

Иначе може да пробваш по начина който даде @Ev0luti0N.

Да замениш:

PHP:
      $topic=$_POST['topic'];
      $detail=$_POST['detail'];
      $name=$_POST['name'];
      $email=$_POST['email'];
      $datetime=date("d/m/y h:i:s"); //create date time
      $sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";

с това:

PHP:
$topic = htmlspecialchars(addslashes($_POST['topic']));

$detail = htmlspecialchars(addslashes($_POST['detail']));

$name = htmlspecialchars(addslashes($_POST['name']));

$email = htmlspecialchars(addslashes($_POST['email']));

$datetime=date("d/m/y h:i:s"); //create date time

$sql="INSERT INTO `$tbl_name` (`topic`, `detail`, `name`,` email`, `datetime`) VALUES ('$topic', '$detail', '$name', '$email', '$datetime')";
 
А това ли е променливата $result:

PHP:
$result=mysql_query($sql);

И това ли е променливата $sql:

PHP:
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE thread_id='$id'";

Ако е така пробвай да замениш $sql заявката с тази:

PHP:
$sql="SELECT MAX(`a_id`) AS `Maxa_id` FROM `$tbl_name` WHERE `thread_id`='$id'";
 
Ако е така пробвай да замениш $sql заявката с тази:

PHP:
$sql="SELECT MAX(`a_id`) AS `Maxa_id` FROM `$tbl_name` WHERE `thread_id`='$id'";

Замених я , но отново дава тази грешка при отговор ...

Toва е от 98 ред , който отчита за грешка нагоре кода :

Код:
   }elseif (isset($_GET['type']) && $_GET['type'] == "reply") {
      // Get value of id that sent from hidden field
      $id=$_POST['id'];
      // Find highest answer number.
      $sql="SELECT MAX(`a_id`) AS `Maxa_id` FROM `$tbl_name` WHERE `thread_id`='$id'";
      $result=mysql_query($sql);
      $rows=mysql_fetch_array($result);
 
PHP:
}elseif (isset($_GET['type']) && $_GET['type'] == "reply") {
      // Get value of id that sent from hidden field
      $id=(int)$_POST['id'];
      // Find highest answer number.
      $sql="SELECT MAX(`a_id`) AS Maxa_id FROM $tbl_name WHERE `thread_id`='$id'";
      $result=mysql_query($sql) or die (mysql_error());
      $rows=mysql_fetch_array($result);
:idea:
 
PHP:
}elseif (isset($_GET['type']) && $_GET['type'] == "reply") {
      // Get value of id that sent from hidden field
      $id=(int)$_POST['id'];
if (isset($id))
{
      // Find highest answer number.
      $sql="SELECT MAX(`a_id`) AS Maxa_id FROM $tbl_name WHERE `thread_id`='$id'";
      $result=mysql_query($sql) or die (mysql_error());
      $rows=mysql_fetch_array($result);
}
else
{
echo "id не е взето";
}

Или така да видим въобще дали изпраща id-то.
 

Back
Горе