Kaczoki
1.06.2011, 17:52:02
Witam wszystkich forumowiczów!
Napisałem prosty skrypt, który oferowałby możliwość edycji rekordów w bazie danych. Problem występuje z przekazaniem wartości z pętli while do pętli foreach, w której następuje upgrade tabeli. Spróbowałem rzutować wartości używając polecenia (array), jednakże nie pomogło.
<?php
require_once 'constants.php';
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (isset($_POST['submit'])) { $first_name_up = $_POST['first_name'];
$last_name_up = $_POST['last_name'];
$email_up = $_POST['email'];
$output_form = false;
foreach ((array) $_POST['todelete'] as $id_up) {
//tu musi byc formularz update
if (!empty($first_name_up) && !empty($last_name_up) && !empty($email_up)) {
$query = "UPDATE email_list SET first_name='$first_name_up', last_name='$last_name_up',email='$email_up, WHERE id=$id_up";
mysqli_query
($dbc, $query) or
die('Błąd w zapytaniu do bazy danych'); echo("Dodano klienta $first_name_up $last_name_up"); } elseif (empty($first_name_up) && empty($last_name_up) && empty($email_up)) { echo 'Próbujesz wysłać pustą wiadomość'; $output_form = true;
} elseif (empty($first_name_up)) { $output_form = true;
} elseif (empty($last_name_up)) { $output_form = true;
} elseif (empty($emai_up)) { echo 'Brak adresu email'; $output_form = true;
} else {
$output_form = true;
}
if ($output_form) {
?>
<p>
<strong>Dodaj klienta do bazy danych</strong>.</p>
<form method="post" action="
<?php echo $_SERVER['PHP_SELF']; ?>" >
<p> <label for="firstname">Imię: </label>
<input type="text" id="first_name" name="first_name" value="
<?php echo $first_name_up; ?>" /><br /></p>
<p>Nazwisko: <input type="text" id="last_name" name="last_name" value="
<?php echo $last_name_up; ?>"/><br /></p>
<p> <label for="email">Adres e-mail: </label>
<input type="text" id="email" name="email" value="
<?php echo $email_up; ?>" /><br /></p>
<p> <input type="submit" value="Wyślij" name="submit" /></p>
</form>
<?php
}
}
////////////////////
echo 'Zaktualizowano dane klienta.<br />'; }
// Wyświetla dane klientów z polami do wyboru edytowanych wierszy.
$query = "SELECT * FROM email_list";
$result = mysqli_query($dbc, $query);
while ($row = mysqli_fetch_array($result)) {
echo '<input type="radio" value="' . $row['id'] . '" name="todelete[]" />'; echo ' ' . $row['last_name']; echo ' ' . $row['email']; }
?>
<input type="submit" name="submit" value="Edytuj" />
</form>
Z góry dziękuję za pomoc i pozdrawiam
mortus
1.06.2011, 18:42:12
Trochę namieszałeś w tym kodzie, ale:
1. drugi formularz (ten do edycji danych użytkownika) nie ma tagu otwierającego,
2. używasz pola input typu radio, co oznacza, że możesz edytować tylko jednego użytkownika, a to z kolei oznacza, że nie potrzebujesz tablicy do przekazywania identyfikatora tego użytkownika (inaczej ma się sprawa z polem input typu checkbox),
3. musisz oddzielić dodawanie i edycję użytkownika, bo w obu przypadkach warunek z linii 5 będzie spełniony, ale w przypadku edycji w liniach 6, 7, 8 pojawią się błędy typu notice,
4. ogólnie to edycja powinna odbywać się trochę inaczej:
- wybierasz użytkownika i klikasz przycisk edytuj, po czym przechodzisz do odpowiedniego fragmentu kodu,
- na podstawie przekazanego id pobierasz dane użytkownika z bazy danych i wypełniasz nimi formularz (istotne jest przekazanie identyfikatora użytkownika do pola input typu hidden),
- teraz masz możliwość edycji danych, edycje możesz kontynuować lub jej zaniechać (wypadałoby jakiś odnośnik do Anuluj),
- i teraz po kliknięciu przycisku dajmy na to Zmień, czy Zapisz przechodzisz do fragmentu kodu, w którym wykonujesz UPDATE.
Brakuje Ci dwóch z wymienionych wyżej kroków, ale przede wszystkim musisz poprawić kod pod względem czytelności i użyteczności (w sensie oddzielenia akcji dodawania użytkowników od akcji polegającej na edycji danych wyżej wspomnianych).
Kaczoki
1.06.2011, 19:10:44
Wielkie dzięki za pomoc

tak już myślałem żeby trochę przemodelować ten skrypt. Wyświetlę wszytko selectem i nie będę miał problemów z przekazaniem wartości do edycji.
pozdrawiam