2012-06-26 3 views
0

Я добавляю контакт в свою базу данных с формой на странице add.php, код INSERT для этой формы находится на другой странице, которую мы будем называть страницей php.php. В php.php у меня есть функция заголовка, которую я хотел бы перенаправить пользователя на другую страницу edit.php? ID = 100, ID = 100, являющийся контактом, который только что был введен. Как мне это сделать, мне нужно сделать выборку из db перед функцией заголовка и запросом INSERT?Использование функции заголовка в PHP

<?php 

if (isset($_POST['$fname'])) { 

    header("location: http://www.mydomain.com/contacts/edit/?ID=<? echo $row['ID]; ?>"); 

    $connect = mysql_connect (...) 

    mysql_select_db ("mydb); 

    $ID = $_POST['ID']; 
    $fname = $_POST['fname']; 
    $lname = $_POST['lname']; 

    $sql = ("INSERT INTO contacts (fname, lname) VALUES ('$_POST[fname]', '$_POST[lname]')"); 

    mysql_query($sql,$con) or die ("Error: ".mysql_error()); 

    exit; 
} 

?> 
+1

Вы уже находитесь в блоке кода PHP, вам больше не нужно ''. '... edit /? ID =". $ row ['ID]); ' – sachleen

ответ

0

Я считаю, что mysql_insert_id - это функция, которую вы ищете. Он вернет идентификатор AUTO_INCREMENT только что вставленного поля. Затем вы можете подключить это к перенаправлению заголовка. Просто убедитесь, что перенаправление заголовка ПОСЛЕ того, как вы вставляете контакт. Все будет хорошо.

код, который должен работать:

<?php 

if (isset($_POST['$fname'])) { 

$connect = mysql_connect (...) 

mysql_select_db ("mydb"); 

$ID = $_POST['ID']; 
$fname = mysql_real_escape_string($_POST['fname']); 
$lname = mysql_real_escape_string($_POST['lname']); 

$sql = "INSERT INTO contacts (fname, lname) VALUES ('$fname', '$lname')"; 

mysql_query($sql,$connection) or die ("Error: ".mysql_error()); 

header("location: http://www.mydomain.com/contacts/edit/?ID=".mysql_insert_id($connection)); 

exit; 
} 

?> 

код вы вывесили также восприимчивы к инъекциям MySQL, поэтому я mysql_real_escape_string'd свой вклад в это предотвратить. Всегда дезинфицируйте ввод, прежде чем вводить его в свой запрос. Я рекомендую вам взглянуть на функции MySQLi, которые предлагает PHP.

+0

Спасибо, это возвращает ID = 0 каждый раз – Josh

+0

, то это означает, что запрос –

+0

просто исправил ошибку в коде, попробуйте сейчас. –

0

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

+0

благодарю вас за помощь! – Josh

0

Заголовок не завершает запуск сценария. Если вы используете перенаправление местоположения, это хорошая практика для выхода из сценария, что вы сделали правильно.

Имейте в виду одно, не помещайте какой-либо вывод в stdout перед заголовком.

+0

благодарю вас за помощь! – Josh

0

Вы не можете вставить php-код в функцию header (<? echo $row['ID]; ?>). Чтобы достичь того, что вы пытаетесь сделать, перед функцией заголовка должен быть код INSERT. Затем вы должны получить идентификатор контакта вы только что ввели, а затем вызвать функцию заголовка, например, так (при условии $id является извлеченным ID):

header("location: http://www.mydomain.com/contacts/edit/?ID=".$id); 

Чтобы получить идентификатор последней вставленной строки, вы можете использовать mysql_insert_id (reference), хотя рекомендуется использовать версию mysqli.

+0

awesome, спасибо! – Josh

Смежные вопросы