Динамически вводить некоторый контент в список и получить его обратно с помощью PHP - PullRequest
0 голосов
/ 08 августа 2011

Я создал веб-страницу, которая использует JQuery для перенаправления содержимого формы на другую веб-страницу, используя PHP для подключения к базе данных, чтобы найти некоторый контент и вернуть его на первую страницу.

Eveything прекрасно работает (благодаря помощи последователей переполнения стека :-)), но теперь я хотел бы следующее: я прошу почтовый индекс города, если мне повезет, этот почтовый индекс уникальный (есть только в одном городе), но бывает и так, что почтовый индекс одинаков для нескольких городов, поэтому я бы хотел в этом случае отобразить список для выбора пользователем своего города. У кого-нибудь есть идеи как это сделать?

мой код:

home.html

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
  <form action="/" id="myform">
   <input type="text" name="postal_code" id="postal_code" placeholder="Search..." />
   <input type="submit" value="Search" />
  </form>
  <!-- the result of the search will be rendered inside this div -->
  <div id="result"></div>

<script>
$('#myform').submit(function() {
   var url = 'target.php';
   var postal_code = $('#postal_code').val();
   $.post( url, { postal_code: postal_code },
      function( data ) {          
          $( "#result" ).empty().append( data );
      }
    );
   return false;
});

target.php

<?php
try
{
   $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
   $bdd = new PDO('mysql:host=localhost;dbname=mydatabase', 'root', '', $pdo_options);
   $response = $bdd->prepare('SELECT city FROM city_list where postal_code = ?');
   $response->execute(array($_POST['postal_code']));
   echo '<ul>';
       while ($data = $response->fetch())
       {
   ?>
          <br/>The city you entered the postal code is : <?php echo $data['city'];  
       }
       $response->closeCursor();
}
catch (Exception $e)
{
        die('Error : ' . $e->getMessage());
}
?>

EDIT:

Этот код подходит для моих нужд. Я бы только внес несколько незначительных изменений в код Жюля, чтобы все было в порядке (по неизвестной причине его ответ отлично сработал для него, но не для меня :-))

<?php
try {
//Get the postal code:
$postcode = $_POST['code_postal'];

//Make MySQL connection
mysql_connect("localhost", "root", "") or die (mysql_error());

//Select the database
mysql_select_db("site_artisans_amélioré");

//Do your query based on the postcode...
$query = "SELECT ville FROM liste_communes_code_postaux where code_postal = '" . mysql_real_escape_string($postcode) . "'";

//Return the response in a variable
$data = mysql_query($query) or die (mysql_error());
//echo "Num rows: " . mysql_num_rows($data);

//Check how many rows the query returned. If more than 1 that means several cities
//exist for one postcode, so you should show a listbox.
//If not, just return the ville name
if (mysql_num_rows($data) > 1) { ?>
    <select name="cities">
<?php  while ($row = mysql_fetch_assoc($data)) {  ?>
        <option value="<?php echo $row['ville']?>"><?php echo $row['ville']?></option>
<?php  } ?>
    </select>    
<?php }
else {
    $row = mysql_fetch_assoc($data);
    echo $row['ville'];
    }
}
catch (Exception $e) {
   die("Error : " . $e->getMessage());
}
?>

1 Ответ

1 голос
/ 08 августа 2011

Я не уверен, какую библиотеку вы используете для запросов к базе данных, поэтому я сделаю это в псевдокоде и mysql_query ..

target.php

<?php
try {
    //Get the postal code:
    $postcode = $_POST['postal_code'];

    //Make MySQL connection
    mysql_connect("localhost", "username", "password") or die (mysql_error());

    //Select the database
    mysql_select_db("mydatabase");

    //Do your query based on the postcode...
    $query = "SELECT city FROM city_list where postal_code = '" . mysql_real_escape_string($postcode) . "'";

    //Return the response in a variable
    $data = mysql_query($query);

    //Check how many rows the query returned. If more than 1 that means several cities
    //exist for one postcode, so you should show a listbox.
    //If not, just return the city name
    if (mysql_num_rows($data) > 1) { ?>
        <select name="cities" multiple="multiple">
    <?  while ($row = mysql_fetch_assoc($data)) {  ?>
            <option value="<?=$row['city']?>"><?=$row['city']?></option>
    <?  } ?>
        </select>    
 <? }
    else {
        $row = mysql_fetch_assoc($data);
        echo $row['city'];
    }
}
catch (Exception $e) {
    die("Error : " . $e->getMessage());
}
?>

Надеюсь, вы поймете мой дрейф и сможете завершить его самостоятельно.

...