Виждате ли проблем в този код?

bizarre

Registered
Първо няколко уточнения.
Частта от кода, която е за уплоуд на снимката не я пускам, тъй като тя си работи безотказно.
Съответния потребител за достъп до БД има права да пише, паролата е правилна, имената на БД и таблицата - също.
При събмитване на формата ми излиза съобщението, че файла е ъплоуднат успешно (и наистина е), но не се разпечатват стойностите на променливите и съответно реда не е добавен в БД.
Някакви предположения?

Код:
<form name="upload" id="upload" enctype="multipart/form-data" method="post" action="<? $php_self ?>">
ID:<input name="id" type="text" /><br />
Етаж:<input name="floor" type="text" /><br />
№<input type="text" name="num" /><br />
Вход:<input type="text" name="entrance" /><br />
Чиста площ:<input type="text" name="qp" /><br />
Общи части:<input type="text" name="qa" /><br />
Избена площ:<input type="text" name="qb" /><br />
Обща площ:<input type="text" name="qt" /><br />
Помещения:<input type="text" name="premises" /><br />
Изба №<input type="text" name="basement_num" /><br />
Цена:<input type="text" name="price" /><br />
Статус:<input type="text" name="status" /><br />
Скица:<input name="userfile" type="file" id="userfile" size="25" /><br />
<input name="upload" type="submit" value="upload" />
</form>
<?
if ($upload) {
		mysql_connect("server","user","pass")
			or die("Could not connect: ".mysql_error());
		mysql_select_db(database)
			or die("Uneable to select database!");
		 $sql = "INSERT INTO `table` (id,floor,num,entrance,qp,qa,qb,qt,premises,basement_num,price,status,img_src)
		 VALUES ('$id','$floor','$num','$entrance','$qp','$qa','$qb','$qt','$premises','$basement_num','$price','$status','$file_name')";
		mysql_query($sql)
		or die("Could not connect: ".mysql_error());
		echo "<div align='center'><font face='Verdana' size='3'><b>Записът е добавен успешно</b></font></div><br />";
echo $id."<br />";
echo $floor."<br />";
echo $num."<br />";
echo $entrance."<br />";
echo $qp."<br />";
echo $qa."<br />";
echo $qb."<br />";
echo $qt."<br />";
echo $premises."<br />";
echo $basement_num."<br />";
echo $price."<br />";
echo $status."<br />";
echo $file_name."<br />";
}
?>
<font color=red><?=$_REQUEST[message]?></font>
 

Admin

Registered
Примерно ако искаш да ти разпечата стойноста на изпратеното $floor
трябва предварително да му кажеш от къде да го вземе като стойност.
Примерно:
$floor=$_POST['floor'];
echo $floor;

Мисля, че оттам идва грешката.
 

bizarre

Registered
Проблема не е с това разпечатване накрая, а че изобщо не се изпълнява заявката към БД.
Най-тъпото е, че няма грешка при парсирането или изпълнението на кода... :!:
 

bizarre

Registered
admin каза:
Незнам. :?

Това `table` защо не го направиш table да видя дали не е от това проблема?

Не е и в това.
Няма правописни и синтактични грешки.
Нещо на ниско ниво е и не мога да разбера какво :cry:
 

Admin

Registered
Пробвай заявката така:
$sql = "INSERT INTO table VALUES ('$id','$floor','$num','$entrance','$qp','$qa','$qb','$qt','$premises','$basement_num','$price','$status','$file_name')";

Другото което не мога да разбера е зьащо ID то се определя от потребителя.

По принцип заяката трябва да е така:
$sql = "INSERT INTO table VALUES ('','$floor','$num','$entrance','$qp','$qa','$qb','$qt','$premises','$basement_num','$price','$status','$file_name')";

но ако ID e primary key и auto_increment (то така и трябва да бъде).
 

bizarre

Registered
ID-то си е pr. key и auto вкарах го и него във формата да проверя да не би евентуално нещо около него да съм объркал, но не.
Ще пробвам без да указвам сега полетата, но се съмнявам така да стане... :?

ЕДИТ: И така не става.

Направих някои промени да изчистя колкото се може повече кода и го оставих само до формата и INSERT-а:
Код:
<form name="add" id="add" method="post" action="forma.php">
Етаж:<input name="floor" type="text" /><br />
№<input type="text" name="num" /><br />
Вход:<input type="text" name="entrance" /><br />
Чиста площ:<input type="text" name="qp" /><br />
Общи части:<input type="text" name="qa" /><br />
Избена площ:<input type="text" name="qb" /><br />
Обща площ:<input type="text" name="qt" /><br />
Помещения:<input type="text" name="premises" /><br />
Изба №<input type="text" name="basement_num" /><br />
Цена:<input type="text" name="price" /><br />
Статус:<input type="text" name="status" /><br />
Скица:<input type="text" name="img_src" /><br />
<input name="add" type="submit" value="добави" />
</form>
<?
$srv="";
$usr="";
$pwd="";
$db="";
$tbl="";
if ($add) {
		mysql_connect($srv,$usr,$pwd)
			or die("Could not connect: ".mysql_error());
		mysql_select_db($db)
			or die("Uneable to select database!");
		 $sql = "INSERT INTO `$tbl` VALUES ('','$floor','$num','$entrance','$qp','$qa','$qb','$qt','$premises','$basement_num','$price','$status','$img_src')";
		mysql_query($sql)
		or die("Could not connect: ".mysql_error());
		echo "<div align='center'><font face='Verdana' size='3'><b>Записът е добавен успешно</b></font></div><br />";
}
?>

П.П
Умишлено съм изтрил по-горе стойностите на $srv, $usr, $pwd, $db, $tb
 

Admin

Registered
bizarre каза:
ID-то си е pr. key и auto вкарах го и него във формата да проверя да не би евентуално нещо около него да съм объркал, но не.
Ще пробвам без да указвам сега полетата, но се съмнявам така да стане... :?

Интересно ми е какъв е проблема.
Ако това echo работи:
Код:
echo $id."<br />";
echo $floor."<br />";
echo $num."<br />";
echo $entrance."<br />";
echo $qp."<br />";
echo $qa."<br />";
echo $qb."<br />";
echo $qt."<br />";
echo $premises."<br />";
echo $basement_num."<br />";
echo $price."<br />";
echo $status."<br />";
echo $file_name."<br />";
Значи, че и горния код (записа в базата данни) трябва да се изпълнява.
Ако си сигурен, че таблицата се казва table и паролите за базата данни са ОК не виждам причина да не работи. :?
 

bizarre

Registered
echo-тата не работят, защото по-горе някъде се прекратява изпълнението, но не ми дава грешка.
П.П
Виж ми предния пост, едитнах го и сложих последния код

П.П.2
В случай, че си запознат с евентуални проблеми от нови версии на apache/php/mysql ето какво ползвам:

PHP Version 5.1.6
5.0.24a-community-nt
Apache 2.2.3
Или с други думи - XAMPP 1.5.4a

Ето и дъмп на таблицата от MySQL-a:

Код:
CREATE TABLE `appartments` (
  `id` int(10) NOT NULL auto_increment,
  `floor` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `num` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `entrance` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `qp` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `qa` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `qb` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `qt` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `premises` text collate cp1251_bulgarian_ci,
  `basement_num` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `price` varchar(20) collate cp1251_bulgarian_ci default NULL,
  `status` varchar(255) collate cp1251_bulgarian_ci default NULL,
  `img_src` varchar(255) collate cp1251_bulgarian_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bulgarian_ci AUTO_INCREMENT=4 ;
 

Admin

Registered
bizarre каза:
echo-тата не работят, защото по-горе някъде се прекратява изпълнението, но не ми дава грешка.
П.П
Виж ми предния пост, едитнах го и сложих последния код


Щом не ти работи еcho-то значи край по въпроса.
Значи че условието if не се изпълнява.
Нещо не е надер с условието.
Записа в базата данни и echo-то се изпълняват само ако е изпълнено условието.
Няма как да ти даде грешка защото ако условието не се изпълнява по някаква причина няма да си изпълни нищо.
Таям може да си правиш грешки колкото си искаш но няма как да ги даде
защото просто ги подминава.
Разбираш ли?
Грешката е по нагоре някъде.

това if ($add)
или if ($upload )
не се изпълнява.
Сложи друго условие и всичко ще се оправи.
 

Admin

Registered
Незнам какъв е кода нагоре и какво е задължително да има но може да сложиш нещо друго:

Код:
if ($floor!="")
{

примерно.
 

bizarre

Registered
Всичко освен ID е NULL.

Мисля, че е нещо от MySQL-a тъй като това НЕ работи по абсолютно същия начин:
dump:
CREATE TABLE `table` (
`id` int(1) NOT NULL,
`f1` varchar(255) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

код:
<?
echo "<form method='POST' action='".$_SERVER['PHP_SELF']."'>";
echo "id:<input name='id' type='text' /><br />";
echo "f1:<input name='f1' type='text' /><br />";
echo "<input name='submit' type='submit' value='submit' />";
echo "</form>";

if ($submit) {
mysql_connect("localhost","root","")
or die("Could not connect: ".mysql_error());
mysql_select_db("test")
or die("Uneable to select database!");
$sql = "INSERT INTO table (`id`,`f1`) VALUES ('$id','$f1')";
mysql_query($sql)
or die("Could not connect: ".mysql_error());
}
?>
 

Admin

Registered
Абе човек.
Махни условието и пробвай дали не работи.
Махни това:
if ($submit) {

и

долу затварящата скоба и ще видиш как ще шпроработи.
Разбери че това условие спира изпълнението на бока код вътре е него.
Нито грешка дава нито нищо все едно го няма.

Просто махни само условието за да видиш, че кода работи.
После ще мислиш какво условие ще слагаш там.
 

bizarre

Registered
Така естествено, че ще работи и то си работи, но нали се сещаш, че без условие за изпълнение на скрипта въобще не става :lol:
Да е някой брояч ОК, но за добавяне на нещо към дб няма да стане.
На теб разчитам да предложиш нещо, защото аз такъв проблем с един прост if не бях имал до сега.
 

Admin

Registered
Ако става за въпрос мога да ти изпълня условието по всякакъв начин.
та не може да е защита в никакъв случай.
Дадох ти условието което може да ползваш.
Проверяваш дали има примерно заглавие.

Или някое коетое задължително.
Примерно дали е попълнил обща площ.

if ($qp!="")
{ пиши в базата данни}
else
{ echo "Не сте написали обща площ";exit;}
 

bizarre

Registered
ОК че така ще трябва да се прави добре, но имаш ли идея защо проклетия бутон ще го прави този проблем? :roll:

Всъщност пишем пълни глупости и двамата!
Без тоя бутон няма да стане.
Ако го няма при парсване на кода се изпълнява заявката. Т. ест се изпълнява заявката към ДБ с променливи без стойности.

П.П
Замислял ли си се да махнеш бутона за нова тема под последния пост в тремите, че днес на всеки нов отговор, който пиша ги бъркам, кой знае още колко народ прави така :oops:
 

Admin

Registered
Незнам какво искаш да кажеш с това "без проклетия бутон няма да стане".
Не виждам за какво ти е този бутон ако искаш да сложиш една оферта за
някакви парцели.
Тази галимация не ми е понятна.
Ето ти пример за нещо по сложно което съм правил:

http://realestate.web-tourist.net/

и къде точно има такуива бутон проверки при качване на оферта.
 

bizarre

Registered
Предполагам си разбрал, че този код е в административната част и е за добавяне (в случая на апартаменти) в бд.

Ако кода се изпълнява веднага след като се зареди страницата как ще въведа стойности в полетата мислиш? Или всеки път като заредя съответния файл да чакам веднъж да се изпълни кода за да стигне до проверката и да ми изведе грешката за празното поле и чак тогава да си въведа аз каквото имам да въвеждам в полетата.

Сещам се веднага за един пример. Тази форма, в която в момента ти пиша. Как ще напиша съобщението ако скрипта се изпълни веднага при зареждане на страницата, а не изчака да натисна бутона "Прати"... л)
Надявам се, че сега ме разбра.

//ОФФ
Съжалявам, че ти занимавам цял следобяд.
 

Admin

Registered
Незнам защо не ми, четеш мненията.
Не казах да няма проверка.

Просто скрипта трябва да проверява дали са изпратени някакви данни и тогава да изпълнява тази секция.

КАзах да проверяваш някой input дали е попълнен а не да проверяваш submit .

Разбираш ли .
Погледни по нагоре какво съм дал за пример:

if ($floor!="")
{ изпълни заявката;}

кое не ти е ясно ?

Може и така:
if ($floor!=""&&$entrance!="")
{ изпълни заявката;}

Няма да се изпълнява при всяко презареждане а само когато си пълнил формуляра и в полетата има нещо написано.

Кое точно не ти е ясно или просто си спориш с мен без да ми четеш мненията?
 

Горе