2009-11-20 3 views
0

HI Ребята,EASY PHP вопрос?

У меня есть следующая проблема. Я пытаюсь подключиться из своего приложения Iphone к сайту php, чтобы получить доступ к mySql db, чтобы получить нужную информацию.

Это мой код:

<?php 
    mysql_connect ("localhost", "user", "pass") or die (mysql_error()); 
    echo "Connected to MySql <br /><hr />"; 
    mysql_select_db ("database_com") or die (mysql_error()); 
    echo "Connectted to Database <br /><hr />"; 

    $country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT 
    echo "value <br /><hr />" . $country; 

    $query = "SELECT * FROM world WHERE land='$country'"; 
    $result = mysql_query($query) or die (mysql_error()); 
    while ($row = mysql_fetch_array($result)) { 
     $1 = $row['1']; 
     $2 = $row['2']; 
     $3 = $row['a3']; 
     $4 = $row['4']; 



     $xmltext = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<country></country>"; 
     $xmlobj = simplexml_load_string($xmltext); 


     $xmlobj->addChild("1", $1); 
     $xmlobj->addChild("2", $2); 
     $xmlobj->addChild("a3", $a3); 
     $xmlobj->addChild("4", $4); 
     print header("Content-type: text/plain") . $xmlobj->asXML(); // Place future code ABOVE this line 

     $xml->save(statistic.xml); 

     } 
    ?>

Если я жёстко стоимость земли = «Германия» я получаю ответ, но если я делаю другую вещь, ничего не выходит из него.

Я надеюсь, что вы сможете мне помочь.

+0

Вы отправляете $ country в качестве переменной POST? Можете ли вы показать нам форму, которую вы используете? –

+0

избегайте переменные. Заполнен ли $ _POST ['contry']? – NDM

ответ

4

У вас есть форму, которая отправляет страну на вашу php-страницу? Если это так, это форма, использующая метод = "post"? Если вы вставляете страну в URL-адрес, используйте $ _GET вместо $ _POST.

Также вызывайте mysql_real_escape_string ($ _ POST ['country']), чтобы избежать проблем с SQL-инъекциями (например, кто-то удаляет все ваши базы данных).

Кроме того, эта линия:

print header("Content-type: text/plain") . $xmlobj->asXML(); 

имеет целый ряд вопросов. Оно должно быть:

header("Content-type: text/plain"); 
print $xmlobj->asXML(); 

Однако, вы не можете отправить заголовки после печати других вещей из - как ваше эхо вызывает в начале сценария. Это звучит не так, как будто это еще проблема, но это будет, когда ваш запрос будет работать.

Кроме того, вы перебираете результирующий набор. Если вы ожидаете только одного результата, проведите цикл while. Если у вас есть несколько результатов, вы получите ошибки из-за вызова header().

+0

Спасибо вам за это. Я здесь пытался распечатать XML, и теперь он работает. –

1

Что произойдет, если вы print_r или var_dump($_POST)? На первый взгляд, похоже, что ваш POST пуст или по крайней мере $_POST['country'].

+0

Да, сообщение было пустым. :-) duuno, как это случилось, но теперь он вернулся на трек, и он работает :-) –

1

Вы проверили, что $ _POST ['country'] действительно содержит значение?

Попробуйте

echo $query; 

и обновлять этот пост, чтобы мы могли видеть содержимое.

0

Попробуйте простой улов ошибки:

<?php 
mysql_connect ("localhost", "user", "pass") or die (mysql_error()); 
echo "Connected to MySql <br /><hr />"; 
mysql_select_db ("database_com") or die (mysql_error()); 
echo "Connectted to Database <br /><hr />"; 

$country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT 
echo "value <br /><hr />" . $country; 
if (!isset($country) || $country == FALSE /* other fail conditions */) { 
    echo "<p>There was a problem; one, or more, error condition occurred:</p>"; 
    echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>"; 
} 
else { 
    // database access stuff 
} 
?> 

Таким образом, если значения не заданы (или ошибка тесты выполнены), вы получите отображение все переменные, определенные в настоящее время и Безразлично доступ к базе данных Не происходит.

Это грубо, но иногда помогает увидеть, что происходит. Хотя, лично, я думаю, что гораздо более вероятно, что вы просто испытываете опечатку $_POST['country'] вместо $_POST['contry'] или что-то в этом роде или используя $_POST вместо $_GET.

0

Хороший способ отладки это поместить этот блок в верхней части файла:

<?php 
if (!isset($_POST)) { 
    die('A $_POST is required for this page.'); 
} 
... 
0

писать этот мир кода можно отлаживать программу

<?php 
    if (!isset($_POST)) { 

    } 
?> 
0

Если

$country = $_POST['country']; 

возвращает правильное значение, чем вам нужно изменить

$query = "SELECT * FROM world WHERE land='$country'"; 

в

$query = "SELECT * FROM world WHERE land='".$country."'"; 

иначе просто проверить, если вы получаете $ _POST [ «страна»] значения правильно, если нет, то отлаживать его первым.