Проблем с вписване на стойност

kalpazan4o

Registered
Здравейте, опитвам се да направя една форма за регистрация към сайта ми. Формата има доста полета и всички се записват успешно в базата данни, освен полето за град "city" - винаги остава празно. Блъскам си главата над това половин ден и не мога да видя къде точно е проблема.

Таблицата в базата данни е със следната структура:
id [int10] [autoinc]
firstname [varchar 25]
lastname [varchar 25]
email [varchar 50]
parola [varchar80]
country [int 3]
state [int 10]
city [int 10]
gender [tinyint 1]
bithdate [date]
nickname [varchar 25]
deviz [varchar 100]
acctype [varchar 15]

Таблицата с полетата за градовете е със следната структура:
city_id [int 9] [autoinc]
city_name [varchar 50]
city_country [int 3]
city_state [int 3]

Формата за регистрация съдържа и календар (писан на джава и php, взет е готов). С него календар се избира датата на раждане.

Така, ето и самата форма:

Код:
if($_POST['Submit'])
{ 
$theDate = isset($_REQUEST["date1"]) ? $_REQUEST["date1"] : "";
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$parola = $_POST['parola'];
$parola = md5($parola);
$country = $_POST['country'];
$state = $_POST['state'];
$city = $_POST['city'];
$gender = $_POST['gender'];
$birthdate = $theDate;
$nickname = $_POST['nickname'];
$deviz = $_POST['deviz'];
$acctype = "5";
$ckeck = mysql_fetch_array(mysql_query("SELECT id FROM members WHERE email='$email'"));//проверявам за потребител със същото име 
if($ckeck)//ако има такъв 
{ 
die('Има вече регистриран потребител с този email адрес.');// край на изпълнението
} 
$ok = mysql_query("INSERT INTO members VALUES ('', '$firstname', '$lastname', '$email', '$parola', '$country', '$state', '$city', '$gender', '$birthdate', '$nickname', '$deviz', '$acctype')");// ако всичко е наред добавям записа в дб-то 
if($ok)// ако няма грешки 
{ 
echo "Вашият профил бе създаден успешно!<br> Можете да влезете в профила си от <a href='?go=members&get=login' target='_parent'>тук</a>";
} 
else
{ 
echo "Грешка! Моля, опитайте отново.";
}
} 
else 
{//ако записа не е приет показвам формата за регистрация
?>
<script>
function getXMLHTTP() { //fuction to return the xml http object
      var xmlhttp=false;   
      try{
         xmlhttp=new XMLHttpRequest();
      }
      catch(e)   {      
         try{         
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
         }
         catch(e){
            try{
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            catch(e1){
               xmlhttp=false;
            }
         }
      }
          
      return xmlhttp;
   }
   
   
   
   function getState(strURL) {      
      
      var req = getXMLHTTP();
      
      if (req) {
         
         req.onreadystatechange = function() {
            if (req.readyState == 4) {
               // only if "OK"
               if (req.status == 200) {                  
                  document.getElementById('citydiv').innerHTML=req.responseText;                  
               } else {
                  alert("There was a problem while using XMLHTTP:\n" + req.statusText);
               }
            }            
         }         
         req.open("GET", strURL, true);
         req.send(null);
      }
            
   }
</script>
<?php
require_once('inc/calendar/classes/tc_calendar.php');
?>
<link href="inc/calendar/calendar.css" rel="stylesheet" type="text/css" />
<script language="javascript" src="inc/calendar/calendar.js"></script>

<style type="text/css">

pre { font-family: "verdana"; font-size: 10px; background-color: #FFFFCC; padding: 5px 5px 5px 5px; }
pre .comment { color: #008000; }
pre .builtin { color:#FF0000;  }
</style>
<?php 
echo "
<h2 align=\"center\">Регистрация на нов потребител</h2>

<table align=\"center\">
   <tr><form action=\"?go=members&get=register\" method=\"post\">
      <td>Собствено име *</td>
      <td><input type=\"text\" size=\"25\" name=\"firstname\" id=\"firstname\"></td>
   </tr>
   <tr>
      <td>Фамилия *</td>
      <td><input type=\"text\" size=\"25\" name=\"lastname\" id=\"lastname\"></td>
   </tr>
   <tr>
      <td>E-mail адрес *</td>
      <td><input type=\"text\" size=\"25\" name=\"email\" id=\"email\"></td>
   </tr>
   <tr>
      <td>Парола *</td>
      <td><input type=\"password\" size=\"25\" name=\"parola\" id=\"parola\"></td>
   </tr>
   <tr>
      <td>Държава *</td>
      <td><input type=\"hidden\" value=\"1\" name=\"country\" id=\"country\">
         България</td>
   </tr>
   <tr>";
?>

      <td>Област:</td>
      <td><select name="state" onChange="getState('inc/city.php?state_id='+this.value)">
            <OPTION>Моля изберете</OPTION>
<?php 
$query = "SELECT * FROM states WHERE state_country='1' order by state_name";
$results = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($results)) {
   extract($row);
   echo "<OPTION value=\"$state_id\">$state_name</OPTION>";
}         
echo "
      </select></td>
   </tr>
   <tr>
      <td>Град</td>
      <td><div id=\"citydiv\"><select name=\"city\"><option></option></select></div>
         </td>
   </tr>

   <tr>
      <td>Пол </td>
      <td><SELECT name=\"gender\">
            <OPTION value=\"1\">Мъжки</OPTION>
            <OPTION value=\"2\">Женски</OPTION>
            <OPTION value=\"3\">Не знам</OPTION>
         </SELECT>
      </td>
   </tr>
   <tr>
      <td>Дата на раждане</td>
      <td><input type=\"hidden\" value=\"\" name=\"birthdate\" id=\"birthdate\"><input type=\"hidden\" name=\"nickname\" value=\"\" id=\"nickname\">
      <input type=\"hidden\" name=\"deviz\" value=\"\" id=\"deviz\">
      <input type=\"hidden\" name=\"acctype\" value=\"5\" id=\"acctype\">"; $myCalendar = new tc_calendar("date1", true);
     $myCalendar->setIcon("inc/calendar/images/iconCalendar.gif");
     $myCalendar->setDate(date('d'), date('m'), date('Y'));
     $myCalendar->setPath("inc/calendar/");
     $myCalendar->setYearInterval(1960, 2015);
     $myCalendar->dateAllow('1900-01-01', '2000-03-01');
     //$myCalendar->setHeight(350);     
     //$myCalendar->autoSubmit(true, "form1");     
     $myCalendar->setSpecificDate(array("2011-04-01", "2011-04-13", "2011-04-25"), 0, 'month');
     $myCalendar->writeScript();
     echo "
   <tr>
      <td colspan=\"2\">
      </td>
   </tr>
   <tr>
      <td colspan=\"2\" align=\"center\"><br><input type=\"submit\" name=\"Submit\" value=\"Регистрирам се\">
      </td>
   </tr></form>
</table>
            <br><br> 
"; 
}

Както може би забелязохте, стойностите за градовете се попълват динамично от външен файл, според избраната стойност за област. Файла работи коректно и кода е с вложени стойности за всяка опция (<OPTION value="1">Grad</OPTION>. Така че там всичко е наред.

Благодаря ви предварително.
 
сложи горе след това:


Код:
if($_POST['Submit'])
{ 

print_r($_POST);

и виж какво ще ти върне за cyty след като събмитнеш формата, ако е празно и значи вложения ти код, който уж работи не работи
 
Вложеният код го заредих отделно, видях и какво изплюва - всичко е ок. Ползвам го абсолютно същия в друг мой сайт и работи коректно.
Ето го въпросния код:
Код:
<? $state=$_REQUEST['state_short'];
include('config.php');

$query="select * from cities where city_country='1' AND city_state='$state' order by city_name asc";
$result=mysql_query($query);

?>
<select name="city">
<? while($row=mysql_fetch_array($result)) { ?>
   <option value="<?=$row['city_id']?>"><?=$row['city_name']?></option>
<? } ?>
</select>

Бях сложил един иф да ми изкарва съобщение ако града е празен (че да не си играя да трия излишни записи в дб без град) и ... да, изкарваше, че стойността на city е празна. :(
 
Имам съмнение, че това:

<OPTION value="1">Grad</OPTION>

ти го праща като стринг, а полето city е тип int.
 
rombeca каза:
Имам съмнение, че това:

<OPTION value="1">Grad</OPTION>

ти го праща като стринг, а полето city е тип int.

повечето бази данни са умни и кастват '1' в 1

... та на кода, ако толкова работи всичко защо ajaxa се обръща към:

inc/city.php?state_id='+this.value)"

пък в city.php e

$state=$_REQUEST['state_short'];

?

Или даваш грешна информация или това е много много грешно.
 
Грешна инфо съм копирал за самия файл. Понеже снощи го сложих да подава state_short (пробвах и с буквени съкращения за областите, после го върнах на int полето със съответните кодове за всяка област).
Направих демо на формата, да видите какво точно представлява: http://buysellapple.com/demo/register.php

Ето как файла за генерирането на градове изплюва кода:
http://buysellapple.com/demo/city.php?state_short=23

(сложил съм енкодинга за да излизат правилно записите при отделно зареждане на файла).
 
;ако толкова бързаш ... проблемът ти е мястото на формата в html ... само във филмите можеш да сложиш отварящ таг на форма в <tr> и затварящ накрая на таблицата;
 
За след календара ли говориш? Мой пропуск, сложих затварящи </td></tr>, но няма промяна.
Edit: Сега, като преместих и <form></form> таговете извън таблицата се оправи.
Какво ти дължа (освен бонус точката)?
 

Back
Горе