Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Prawidłowe wyświetlanie linii po złamaniu \
Forum PHP.pl > Forum > Przedszkole
-czarek-
Hej,
W jaki sposób prawidłowo złamać linię:
  1. echo '<td><input type="text" name="test" value="$row[\"test\"]" /></td>';

aby wartość value wyświetlała się prawidłowo?
W chwili obecnej wyświetla to jako: " $row[\ " dodatnie \ po " przed $row niestety nic nie daje.

Dzięki za pomoc
Monter08
  1. echo '<td><input type="text" name="test" value="'.$row["test"].'" /></td>';
-czarek-
Dzięki za pomoc, mam jeszcze jedno pytanie, czemu w takim kodzie:

  1. if (isset($_POST['submit'])){
  2. $id = ($_POST['edycja_id']);
  3. $zglaszajacy = ($_POST['test2']);
  4. $query = "UPDATE tablica SET `test2` = '{$test2}' WHERE id = {$id}";
  5. $wynik = mysql_query($query, $connection);
  6. }


+


<table>
<tr>
<td>
<form action="aa.php" method="post">
  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. print "<tr><td>{$row["id"]}</td><td><input type='text' name='test2' value='{$row["test2"]}' /></td><input type='hidden' name='edycja_id' value='{$row["id"]}' /></tr>";
  4. }

<td colspan="2"><input type="submit" name="submit" value="edytuj" /></td>
</form>
</td>

</tr>
</table>

edycja pola test 2 działa tylko na ostatnim rekordzie??
b4rt3kk
Bo masz listę inputów o tym samym name, tak więc w tablicy $_POST['test2'] wartość ta jest nadpisywana aż do ostatniego wystąpienia. Zmień name na test2[].
-czarek-
Hej,
Zgodnie z radą zmieniłem

name='test2' na
name='test2[]'

niestety jedyna zmiana to taka, ze baza zapisała słowo array, najwyraźniej nadal coś źle robię.
b4rt3kk
Array to tablica. Masz teraz $_POST['test2'][0], $_POST['test2'][1], $_POST['test2'][2] i tak dalej. Zmień pętlę.
-czarek-
Hej,

No tak print_r($_POST) wyświetla:

  1. (
  2. [test2] => Array
  3. (
  4. [5] => 5
  5. [Duch5] => aaa
  6. [6] => aaa
  7. [Array] => Array
  8. )
  9.  
  10. [edycja_id] => 5
  11. [submit] => edytuj
  12. )


tylko jak właściwie zmienić

  1. if (isset($_POST['submit'])){
  2. $id = ($_POST['edycja_id']);
  3. $zglaszajacy = ($_POST['test2']);
  4. $query = "UPDATE tablica SET `test2` = '{$test2}' WHERE id = {$id}";
  5. $wynik = mysql_query($query, $connection);
  6. }
b4rt3kk
Proponuję zrobić tak:

  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. print "<tr><td>{$row["id"]}</td><td><input type='text' name=\"test2[".$row['id']."]\" value='{$row["test2"]}' /></td></tr>";
  4. }


Zapis:

  1. if (isset($_POST['submit'])){
  2. foreach ($_POST['test2'] as $key => $value) {
  3. $query = "UPDATE tablica SET test2 = '$value' WHERE id = '$key'";
  4. $wynik = mysql_query($query, $connection);
  5. }
  6. }

-czarek-
Dzięki serdeczne działa smile.gif

A jeżeli mam kilka pól, to jak mogę dodać kolejne do pętli?
czyli test2, test3 itd.

  1. if (isset($_POST['submit'])){
  2. foreach ($_POST['test2'] as $key => $value) {
  3. $query = "UPDATE tablica SET test2 = '$value' WHERE id = '$key'";
  4. $wynik = mysql_query($query, $connection);
  5. }
  6. }
b4rt3kk
Możesz dodawać kolejne pętle foreach nieco zmieniając parametry:

  1. foreach ($_POST['test2'] as $key => $value) {
  2. $query = "UPDATE tablica SET test2 = '$value' WHERE id = '$key'";
  3. $wynik = mysql_query($query, $connection);
  4. }
  5. foreach ($_POST['test3'] as $key => $value) {
  6. $query = "UPDATE tablica SET test3 = '$value' WHERE id = '$key'";
  7. $wynik = mysql_query($query, $connection);
  8. }


i tak dalej.

EDIT: źle zrozumiałem pytanie. Lepiej coś takiego:

  1. foreach ($_POST['test2'] as $key => $value) {
  2. $query = "UPDATE tablica SET test2 = '$value', test3='{$_POST['test3'][$key]}' WHERE id = '$key'";
  3. $wynik = mysql_query($query, $connection);
  4. }


Tylko wszystko zależy od nazewnictwa pól w formularzu. Musisz troszkę pokombinować. smile.gif
-czarek-
Działało i przestało sad.gif

Aktualnie mam coś takiego:

  1. if (isset($_POST['submit'])){
  2. foreach ($_POST['test'] as $key => $value)
  3. {
  4. $query = "UPDATE tablica
  5. SET `test` = '{$value}'
  6. WHERE id = '{$key}'";
  7. $wynik = mysql_query($query, $connection);
  8. }
  9. }


  1. while ($row = mysql_fetch_array($wynik))
  2. {
  3. echo '<tr>';
  4. echo '<td>'.$row["id"].'</td>';
  5. echo '<td>';
  6. echo "<input type='text' name=\"test[".$row['id']."]\" value='{$row["test"]}' />";
  7. echo '</td>';

na 100% jakaś literówka, tylko gdzie?
b4rt3kk
Może tutaj?

  1. SET `test` = '{$value}'


Masz w bazie komórkę o nazwie test? Wcześniej było test2. smile.gif
-czarek-
Wkleję więcej kodu, jakby się okazało, że błąd jest w czymś innym.
Tak zmieniłem na test dla czytelności

  1. if (isset($_POST['submit'])){
  2. foreach ($_POST['test'] as $key => $value)
  3. {
  4. $query = "UPDATE tablica
  5. SET `test` = '$value'
  6. WHERE id = '$key'";
  7. $wynik = mysql_query($query, $connection);
  8. }
  9. }


  1. echo '<form action="test.php" method="post">';
  2. echo '<table>';
  3. echo '<tr>';
  4. echo '<th>id</th>
  5. <th>test</th>
  6. echo '<tr>';
  7. while ($row = mysql_fetch_array($wynik))
  8. {
  9. echo '<tr>';
  10. echo '<td>'.$row["id"].'</td>';
  11. echo '<td>';
  12. echo "<input type='text' name=\"test[".$row['id']."]\" value='{$row["test"]}' />";
  13. echo '</td>';
  14. echo '</tr>';
  15. }
  16. echo '<td colspan="2"><input type="submit" name="submit" value="edytuj" /></td>';
  17. echo '</form>';
  18. echo '</td>
  19. </tr>
  20. </tr>
  21. </table>';
b4rt3kk
Błąd jest tutaj, można już poznać po kolorowaniu składni:

  1. echo '<th>id</th>
  2. <th>test</th>';
  3. echo '<tr>';


Nie zamknąłeś echo.
-czarek-
Dzięki raz jeszcze

Skoro działa z jednym polem, spróbowałem z dwoma, biorąć twoje informacje za przykład.

  1. if (isset($_POST['submit'])){
  2.  
  3. foreach ($_POST['test'] as $key => $value){
  4. $query = "UPDATE tablica SET `test` = '$value', `test2` = '{$_POST['test2'][$key]}' WHERE id = {$key}";
  5. $wynik = mysql_query($query, $connection);
  6. }
  7. }


+

  1. echo '<td>'.$row["id"].'</td>';
  2. echo "<td><input type='text' name=\"test[".$row['id']."]\" value='{$row["test"]}' /></td>";
  3. echo "<td><input type='text' name=\"test2[".$row['id']."\" value='{$row["test2"]}' /></td>";


niestety nie zapisuje danych w polu test2
-czarek-
Szybka edycja, trzeba zamykać nawiasy kwadratowe smile.gif
b4rt3kk
Czyli rozumiem, że wszystko już działa? smile.gif
-czarek-
Jak najbardziej, dzięki serdeczne.
-czarek-
Mam jeszcze drobny problem z wyświeltaniem wszystkich zmiennych podczas użycia select
Przykładowy kod:

  1. echo "<td><select name=\"test3[".$row['id']."]\" /><option value='{$row["test3"]}' >".$row[test3]."</option></td>";


niestety, chociaż pojawia się możliwość wyboru z listy, to jest tam wyświetlane tylko jedno pole, to które jest zapisane przy tym rekordzie. Czyli jeżeli tworząc dany wiersz w select mam a, b, c, przypiszę te wartości do kolejnych rekordów czyli id1=a, id2=b, id3=c to przy wyświetlaniu i edycji mam tylko te pojedyncze wartości, brak możliwości zmiany.

Dzięki z góry za pomoc
b4rt3kk
Nic dziwnego, po pierwsze, masz tylko 1 option dla każdego selecta (to każdy option przechowuje wartości do wyboru), po drugie każdy $row zwraca tylko jedną wartość test3. Jeśli chcesz mieć więcej możliwości do wyboru musisz zastosować kolejną pętlę.

  1. echo "<td><select name=\"test3[".$row['id']."]\" />';
  2. for ($i = 0; $i<$liczba_opcji; $i++) echo '<option value='{$opcja[$i]}' >".$opcja[$i]."</option>';
  3. echo '</select></td>";


To tylko schemat rozwiązania. Jeszcze musisz te opcje pobrać (np. z bazy?), możesz też dodać, by zapisana w bazie opcja dla danego $row była selected.
-czarek-
Hej,
A czy mógłbyś mi powiedzieć jak to dokładnie zrobić? Aktualnie pobiera poprawną wartość z bazy, czyli tą przypisaną do danego rekordu.
b4rt3kk
Nie wiem jak to zrobić, bo nie wiem jak wygląda Twoja baza i nie wiem, co ma konkretnie się znajdować w tym select.
-czarek-
Rozwijając wcześniejszy post:
Baza ma 4 kolumny, id, test1, test2, test3

test3 ma możliwość wyboru czyli select

Tworząc nowy wiersz w bazie wybieram spośród 3 opcji a,b,c. Jeżeli chcesz wkleję kod strony, która mi to umożliwia.

Tym samym chciałbym na tej stronie wyświetlająco edycyjnej mieć możliwość wyboru jednej z tych trzech opcji oraz żeby najpierw wyświetlała się aktualna (to ostatnie akurat działa smile.gif)
b4rt3kk
A to znacznie upraszcza sprawę.

  1. echo "<td><select name=\"test3[".$row['id']."]\" />";
  2. foreach (array('a','b','c') as $value) {
  3. echo "<option value='$value' ";
  4. if ($value == $row['test3']) echo 'selected';
  5. echo ">$value</option>";
  6. }
  7. echo "</select></td>";
-czarek-
Dzięki serdeczne smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.