Система за изпращане на лични съобщения

kenwood10

Registered
Здравейте имам проблем с системата за изпращане на лични съобщения ето го и проблемният кодa

PHP:
<html>
<head>
<title>
Изпрати Съобщение
</title>
</head>
<body>
<?php
$link=mysql_connect("localhost", "root", "") or die (mysql_error());/* променете в зависимост от вашите настройки*/
mysql_query("SET NAMES cp1251");
mysql_select_db("topracers") or die (mysql_error()); /*на мястото на "test" напишете името на базата данни, която използвате*/
if (isset($_POST['submit'])){
if(!empty($_POST['title'])&&!empty($_POST['receiver'])&&!empty($_POST['message'])){
        $receiver=htmlspecialchars(mysql_real_escape_string($_POST['receiver']));
        $title=htmlspecialchars(mysql_real_escape_string($_POST['title']));
        $message=htmlspecialchars(mysql_real_escape_string($_POST['message']));
            $q="SELECT id
                FROM users
                WHERE name='$receiver'";
            $r=mysql_query($q, $link)or die (mysql_error());
            if (mysql_num_rows($r)==1){
            $row=mysql_fetch_array($r);
            $receiver_id=$row['id'];
            $time=time();
            $sql = "INSERT INTO `messages` 
            (
            `id`, 
            `sender_id`, 
            `receiver_id`, 
            `title`, 
            `message`, 
            `time`, 
            `read`)
            VALUES 
            (NULL, '$user_id', '$receiver_id', '$title', '$message', '$time', '0');";
            $sql_result=mysql_query($sql)or die (mysql_error());
            echo "<p>Съобщението изпратено успешно!</p>";
            $done=1;
            } else {
                echo "<div style='background-color:#ff8888' align='center'>Не е намерен потребител с такова име!</div>";
            }
        } else {
            echo "<div style='background-color:#ff8888' align='center'>Всички полета са задължителни!</div>";
    }
}
    if ($done==0){
    ?>
<form target="" method="post">
<div style="float:left;width:100px;" align="right">
До:<br />
Относно:<br />
Съобщение:<br /><br /><br /><br /><br />
</div>
<div style="float:left;width:650px;">
<input type="text" name="receiver"
<?php
if (isset($_GET['user'])){
$user=htmlspecialchars(mysql_real_escape_string($_GET['user']));
echo "value='";
echo $user . "'";
}
?>><br />
<input type="text" name="title"><br />
<textarea rows="5" cols="70" name="message">
</textarea>
<input type="submit" name="submit" value="Изпрати">
</form>
</div>
<?php
}
?>
</body>
</html>

Когато изпратя съобщение ми излиза този проблем

PHP:
Unknown column 'name' in 'where clause'

Къде е збъркан кода? Благодаря предварително !
 
Във мен е бил проблема но сега изкочи друг проблем

PHP:
Column 'id' cannot be null

Ето и структурата

PHP:
CREATE TABLE `messages` (
`id` INT NOT NULL ,
`sender_id` INT NOT NULL ,
`receiver_id` INT NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` INT NOT NULL ,
`read` TINYINT NOT NULL 
)

Нещо неможе да ме разпознае като потребител :?
 
Много по-прост вариант, ще е така;

* ЗАБЕЛЕЖКА: Въпросното изпращане ще стане така:

site.com/faila.php?user=1
site.com/faila.php?user=2
site.com/faila.php?user=3
site.com/faila.php?user=4
...

като 1 ,2 ,3 и 4.. са ID на потребителя, ако потребителя не съществува или не е избрал ще върне резултат:

Потребителя, които си избрал не съществува!


PHP:
<?php
/* структура
CREATE TABLE `messages` (
`id` int(11) NOT NULL auto_increment,
`sender_id` INT NOT NULL ,
`receiver_id` INT NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` INT NOT NULL ,
`read` TINYINT NOT NULL 
) 
*/
if(isSet($_GET['user'])) { $receiver_id = (int)$_GET['user']; } else { $receiver_id = ""; }
$checkuser = mysql_query("SELECT * FROM `users` WHERE `id`='{$receiver_id}';")or die(mysql_error());
if(mysql_num_rows($checkuser) > 0) && ($receiver_id != NULL)) {
	if(isSet($_POST['submit'])) {
		if(isSet($_POST['title'], $_POST['message'])) {
			$title = $_POST['title'];
			$message = $_POST['message'];
		} else {
			$title = "";
			$message = "";
		}
		if(empty($_POST['title']) || empty($_POST['message'])){
			echo "<div style='background-color:#ff8888' align='center'>Всички полета са задължителни!</div>";
		} else {
			$time = time();
			$sql_result = mysql_query("INSERT INTO `messages` (`sender_id`, `receiver_id`, `title`, `message`, `time`) VALUES ('{$user_id}', '{$receiver_id}', '{$title}', '{$message}', '{$time}');")or die (mysql_error());
		}
	} else {
	echo "<form method=\"post\">
	<div style=\"float:left;width:100px;\" align=\"right\">
	До:<br />
	Относно:<br />
	Съобщение:<br /><br /><br /><br /><br />
	</div>
	<div style=\"float:left;width:650px;\">
	<input type=\"text\" name=\"title\" /><br />
	<textarea rows=\"5\" cols=\"70\" name=\"message\" />
	</textarea>
	<input type=\"submit\" name=\"submit\" value=\"Изпрати\">
	</form>";
	}
} else {
	echo "Потребителя, които си избрал не съществува!";
}
?>

LAST EDIT:
[sql]
<?php
CREATE TABLE `messages` (
`id` int(11) NOT NULL auto_increment,
`sender_id` INT(10) NOT NULL ,
`receiver_id` INT(10) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` INT (20)NOT NULL ,
`read` int(11) NOT NULL default '0'
)
[/sql]

Като при добавяне на съобщението , полето read автоматично ще бъде 0..
 
Сега незнам проблемът каде е оправих id-to записва ги всичко точно.. но в полето sender_id записва "0" ?? от какво може да е това ?
 
kenwood10 каза:
Сега незнам проблемът каде е оправих id-to записва ги всичко точно.. но в полето sender_id записва "0" ?? от какво може да е това ?

Преди всички заявки направи една променлива $user_id и сложи за стойност ID-то на логнатия потребител.
 
kenwood10 каза:
Сега незнам проблемът каде е оправих id-to записва ги всичко точно.. но в полето sender_id записва "0" ?? от какво може да е това ?

Изписва 0, 'щото никъде не взимаш ID-то на Логнатия потребител.. Тая променлива $user_id, взимаш ли я някъде въобще?

Ако е $_SESSION['username']; ще ти върне резултат - 0 , защото полето е INT - само числа, ако е различно от число ще върне - 0. Докато при сесията /ако е така, както предполагам/ ще взима потребителското име, а не неговия ID номер от таблицата `users`.


http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
 
PHP:
$user_id=$logged_user;

Нещо такова :?

или

PHP:
$user_id=$logged_user

$user_id=$_SESSION['is_logged'];

Или ако може малко повече помощ.... нов съм и ми е трудно...
 
PHP:
<? include("header.php"); if($_SESSION['username']) { header("Location: ./my.php"); } ?>



<table border="0" width="100%" cellspacing="2" cellpadding="2">

 <tr>

  <td valign="top" width="100%">





<table border="0" cellspacing="0" cellpadding="0" width="100%">

	 <tr>

	  <td><? echo menu("Вход"); ?></td>

	 </tr>

	 <tr>

	  <td class="menuc">

<?

if(protect($_POST['login'])) {

 $username = protect($_POST['username']);

 $password = protect($_POST['password']);

	$redirect = protect($_GET['redirect']);

  $check = mysql_query("SELECT * FROM users WHERE username='$username' and password='$password'");

   if(mysql_num_rows($check)>0) {

		session_register("username");

		session_register("password");

		header("Location: ./$redirect");

	}

		else

	{

		echo errorbox("Грешно потребителско име или парола.");

	}

}

?>

<table border="0" cellspacing="2" cellpadding="2" width="100%">

 <tr>

  <td>

<form action="" method="POST">

<table border="0" cellspacing="2" cellpadding="2">

 <tr>

  <td><input type="text" class="user" size="55" name="username" value="потребителско име" onblur="addText(this);" onfocus="clearText(this)"></td>

 </tr>

 <tr>

  <td><input type="password" class="pass" size="55" name="password" value="парола" onblur="addText(this);" onfocus="clearText(this)"></td>

 </tr>

 <tr>

  <td>

   <table border="0" cellspacing="0" cellpadding="0">

    <tr>

	<td><input type="submit" class="btn" name="login" value="Вход"></td>

	<td>  </td>

      <td><table border="0" cellspacing="0" cellpadding="0"><tr><td><img src="images/reg_icon.png" width="15px"></td><td><a href="./register.php"> Регистрация</a></td></tr></table>

	<table border="0" cellspacing="0" cellpadding="0"><tr><td><img src="images/wp_icon.png" width="15px"></td><td><a href="./sendpassword.php"> Забравена парола?</a></td></tr></table></td>

    </tr>

   </table>

  </td>

 </tr>

</table>

</form>

 </td>

  <td>

   <img src="images/car.png" width="200px">

  </td>

 </tr>

</table>

 </td>

</tr>

</table>





  </td>

 </tr>

</table>



<? include("footer.php"); ?>

Username... :?
 
Много по-прост вариант, ще е така;

* ЗАБЕЛЕЖКА: Въпросното изпращане ще стане така:

site.com/faila.php?user=1
site.com/faila.php?user=2
site.com/faila.php?user=3
site.com/faila.php?user=4
...

като 1 ,2 ,3 и 4.. са ID на потребителя, ако потребителя не съществува или не е избрал ще върне резултат:

Потребителя, които си избрал не съществува!

[sql]
CREATE TABLE `messages` (
`id` int(11) NOT NULL auto_increment,
`sender_id` INT(10) NOT NULL ,
`receiver_id` INT(10) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` INT (20)NOT NULL ,
`read` int(11) NOT NULL default '0'
)
[/sql]

PHP:
<?php
function get_logged_id($username) {
	$query = mysql_query("SELECT * FROM `users` WHERE `username`='{$username}';")or die(mysql_error());
	$row = mysql_fetch_object($query);
	return $row->id;
}
$user_id = get_logged_id($_SESSION['username']);

if(isSet($_GET['user'])) { $receiver_id = (int)$_GET['user']; } else { $receiver_id = ""; }
$checkuser = mysql_query("SELECT * FROM `users` WHERE `id`='{$receiver_id}';")or die(mysql_error());
if(mysql_num_rows($checkuser) > 0) && ($receiver_id != NULL)) {
	if(isSet($_POST['submit'])) {
		if(isSet($_POST['title'], $_POST['message'])) {
			$title = $_POST['title'];
			$message = $_POST['message'];
		} else {
			$title = "";
			$message = "";
		}
		if(empty($_POST['title']) || empty($_POST['message'])){
			echo "<div style='background-color:#ff8888' align='center'>Всички полета са задължителни!</div>";
		} else {
			$time = time();
			$sql_result = mysql_query("INSERT INTO `messages` (`sender_id`, `receiver_id`, `title`, `message`, `time`) VALUES ('{$user_id}', '{$receiver_id}', '{$title}', '{$message}', '{$time}');")or die (mysql_error());
		}
	} else {
	echo "<form method=\"post\">
	<div style=\"float:left;width:100px;\" align=\"right\">
	До:<br />
	Относно:<br />
	Съобщение:<br /><br /><br /><br /><br />
	</div>
	<div style=\"float:left;width:650px;\">
	<input type=\"text\" name=\"title\" /><br />
	<textarea rows=\"5\" cols=\"70\" name=\"message\" />
	</textarea>
	<input type=\"submit\" name=\"submit\" value=\"Изпрати\">
	</form>";
	}
} else {
	echo "Потребителя, които си избрал не съществува!";
}
?>

Като при добавяне на съобщението , полето read автоматично ще бъде 0..
 
Не ми дава да сял-на таблицата която ми даде

PHP:
SQL заявка: 

CREATE TABLE `messages` (

`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`sender_id` INT( 10 ) NOT NULL ,
`receiver_id` INT( 10 ) NOT NULL ,
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` INT( 20 ) NOT NULL ,
`read` int( 11 ) NOT NULL default '0'
) 

MySQL отговори:  

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key


:!:

Нензма проблмът в мен ли е някои може ли да ми обясни защо не ми дава да го направя на auto_increment ?
 
CREATE TABLE `messages` (
`id` int(11) NOT NULL auto_increment,
`sender_id` int(11) NOT NULL default '0',
`receiver_id` int(11) NOT NULL default '0',
`title` VARCHAR( 255 ) NOT NULL ,
`message` TEXT NOT NULL ,
`time` int(11) NOT NULL ,
`read` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
)
 

Back
Горе