Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Nauka PHP


Bartek

Rekomendowane odpowiedzi

  • Manager

Zrób tak, by były w bazie, bo to dla Ciebie najważniejsze, a potem pokaż, jak te krzaki wyglądają na stronie z kodowaniem iso lub utf8.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 miesiące temu...

Witam po dłuższej przerwie!

Problem nie dotyczy tak naprawdę PHP, a MySQL. Otóż mam w bazie recordy z np. id:

1

2

3

4

Usuwam 3 (nie ma znaczenia czy przez phpmyadmin czy przez skrypt php, w obu przypadkach jest tak samo) i dodaję nowy. Dostaje on co prawda id 5, ale wyświetla się na miejscu 3, czyli tak:

1

2

5

4

Nie mogę dojść z tym do ładu. Jak ja mam tą tablę ustawić, żeby się sortowało według id? (mam PRIMARY KEY ustawiony...) Chyba, że czegoś nie rozumiem...

...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

To tylko wyświetlanie.. Mowa o wyświetlaniu w PMA czy w wynikach zapytania? Jak to pierwsze to kliknij w kolumnę z ID i Ci ją posortuje. Jeśli drugie to dodaj 'order' do zapytania.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam problem, a raczej nie wiem co robić. Generalnie sprawa wygląda tak, że jestem w stanie wyświetlać, dodawać oraz usuwać recordy z bazy za pomocą PHP. Do kompletu brakuje mi tylko edytowania. I szczerze mówiąc nie wiem jak się za to zabrać. Oczywiście nie chcę, byście to za mnie pisali, ale jakieś rady i drobne przykłady bardzo by mi pomogły...

Oto fragment kodu, który odpwiada za wyświetlanie danych w tabelce:

//Create query 
$query = "SELECT * FROM symbols ORDER BY id ASC"; 

//Execute query 
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

//See if any rows were returned 
if (mysql_num_rows($result) > 0) { 

   //If yes, print them in the table 
   echo "<table><tr><td><b>ID</b></td><td><b>Country</b></td><td><b>Animal</b></td></tr>"; 
   while($cell = mysql_fetch_row($result)) { 
       echo "<tr>"; 
       echo "<td>".$cell[0]."</td>"; 
       echo "<td>".$cell[1]."</td>"; 
       echo "<td>".$cell[2]."</td>"; 
       echo "</tr>"; 
   } 
   echo "</table>"; 
} 
else { 
   //If no, print the error message 
   echo "No rows found!"; 
} 

//Free result set memory 
mysql_free_result($result); 

//Close connection 
mysql_close();

Umiem dodać to niej pola z przyciskami przy każdym recordzie, ale problemem jest dla mnie "połączenie" tych pól z query (wiem jakie dać zapytanie, ale gorzej z wykorzystaniem...), które by aktualizowały dane w bazie.

...

Odnośnik do komentarza
Udostępnij na innych stronach

Odnośnik do komentarza
Udostępnij na innych stronach

Ok, ok...

Zmodyfikowałem trochę tabelkę:

//Create query 
$query = "SELECT * FROM symbols ORDER BY id ASC"; 

//Execute query 
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

//See if any rows were returned 
if (mysql_num_rows($result) > 0) { 

   //If yes, print them in the table 
   echo "<form action='edit_process.php' method='post'><table><tr><td><b>ID</b></td><td><b>Country</b></td><td><b>Animal</b></td></tr>"; 
   while($cell = mysql_fetch_row($result)) { 
       echo "<tr>"; 
       echo "<td>".$cell[0]."</td>"; 
       echo "<td>".$cell[1]."<br /><input type='text' name='edit_country' /></td>"; 
       echo "<td>".$cell[2]."<br /><input type='text' name='edit_animal' /></td>"; 
       echo "</tr>"; 
   } 
       echo "</table><br /><input type='submit' name='submit' value='Submit' />"; 
} 
else { 
   //If no, print the error message 
   echo "No rows found!"; 
} 

//Free result set memory 
mysql_free_result($result); 

//Close connection 
mysql_close(); 

?>

Idea jest taka, że jeżeli chcę zmienić jakąś wartość/wartości, wpisuję je w odpowiednie pola i klikam przycisk Submit. Formularz ten wysyła wszystko do innego pliku, który zajmuje się zmianą tego w bazie. Pytanie, zanim cokolwiek robić: czy ja się od dobrej strony do tego zabieram? Bo może kompletnie źle to robię i cały wysiłek pójdzie na marne...

...

Odnośnik do komentarza
Udostępnij na innych stronach

Możecie mi powiedzieć co wy macie z tym wielokrotnym używaniem echo kilka linijek z rzędu?

Czy nie lepiej zamiast:

echo "<tr>"; 
echo "<td>".$cell[0]."</td>"; 
echo "<td>".$cell[1]."<br /><input type='text' name='edit_country' /></td>"; 
echo "<td>".$cell[2]."<br /><input type='text' name='edit_animal' /></td>"; 
echo "</tr>"; 

było by dać:

echo "<tr> 
<td>".$cell[0]."</td> 
<td>".$cell[1]."<br /><input type='text' name='edit_country' /></td> 
<td>".$cell[2]."<br /><input type='text' name='edit_animal' /></td>
</tr>"; 

lub:

echo "<tr> 
<td>{$cell[0]}</td> 
<td>{$cell[1]}<br /><input type='text' name='edit_country' /></td> 
<td>{$cell[2]}<br /><input type='text' name='edit_animal' /></td>
</tr>";

lub

echo <<<HTML
<tr> 
<td>{$cell[0]}</td> 
<td>{$cell[1]}<br /><input type='text' name='edit_country' /></td> 
<td>{$cell[2]}<br /><input type='text' name='edit_animal' /></td>
</tr>
HTML;

No i czy wszystko musi być zlepione w jednej linii?

echo "<form action='edit_process.php' method='post'><table><tr><td><b>ID</b></td><td><b>Country</b></td><td><b>Animal</b></td></tr>"; 

Nie jest czytelniejsza taka postać?

echo "<form action='edit_process.php' method='post'>
<table>
<tr>
	<td><b>ID</b></td>
	<td><b>Country</b></td>
	<td><b>Animal</b></td>
</tr>"; 

Jeżeli będzie więcej niż jeden wynik to wszystko się rozwali, bo input'y będą miały te same nazwy, więc będą na siebie nachodziły.

Więc dodaj limit do SELECT'a i zrezygnuj z while'a.

No i zamiast mysql_fetch_row korzystać z czytelniejszego(i bezpieczniejszego w przypadku zamiany kolejności pól) mógłbyś używać mysql_fetch_assoc.

Wtedy zamiast $row[0], $row[1], $row[2] będziesz mógł korzystać z $row['pole1'], $row['pole2'], $row['pole3']

Odnośnik do komentarza
Udostępnij na innych stronach

Pozmieniałem według Twoich wskazówek.

echo "<form action='edit_process.php' method='post'>
<table class='tables'>
       <tr>
               <td><b>ID</b></td>
               <td><b>Country</b></td>
               <td><b>Animal</b></td>
       </tr>";  
   while($row = mysql_fetch_assoc($result)) { 
       echo "
<tr> 
<td>{$row['id']}</td> 
<td>{$row['country']}<br /><input type='text' name='edit_country' /></td> 
<td>{$row['animal']}<br /><input type='text' name='edit_animal' /></td>
</tr>"; 
   } 
       echo "<td><input type='submit' name='submit' value='Submit' /></td></table>"; 
} 

Nie wiem jednak jak ten limit do SELECTa ma wyglądać i co robić oraz co dać zamiast while loop?

...

Odnośnik do komentarza
Udostępnij na innych stronach

SELECT * FROM tabela WHERE costam LIMIT 1;

Pytasz się co dać zamiast while, żeby tylko raz wykonać?

Nic nie dawać...

Zamiast:

    while($row = mysql_fetch_assoc($result)) { 
       echo "
<tr> 
<td>{$row['id']}</td> 
<td>{$row['country']}<br /><input type='text' name='edit_country' /></td> 
<td>{$row['animal']}<br /><input type='text' name='edit_animal' /></td>
</tr>"; 
   } 

daj:

$row = mysql_fetch_assoc($result); 
echo "<tr> 
<td>{$row['id']}</td> 
<td>{$row['country']}<br /><input type='text' name='edit_country' /></td> 
<td>{$row['animal']}<br /><input type='text' name='edit_animal' /></td>
</tr>"; 

Odnośnik do komentarza
Udostępnij na innych stronach

No tak, ale teraz tylko pierwszy record się pokazuje. Pewnie jak by teraz pokombinował, to udałobymi się wstawić tam formularz który by go zmieniał. Ale docelowo mają się wyświetlać wszystkie recordy z polami do edycji przy nich. Ale tak jak mówisz, inputy będą miały takie same nazwy i się wszystko rozwalić.

...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Manager

Ale tak jak mówisz, inputy będą miały takie same nazwy i się wszystko rozwalić.

To dodaj zmienną np.

name='field_X'

Gdzie X to kod PHP z wyświetlaniem ID danego inputa. Trochę inwencji. :)

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Odnośnik do komentarza
Udostępnij na innych stronach

Kurde... masakrycznie wygląda takie długie echo xD To się w ogóle jeszcze tak robi żeby echem wywalać połowę kodu html? xD

Zamiast:

while($row = mysql_fetch_assoc($result)) { 
       echo "
<tr> 
<td>{$row['id']}</td> 
<td>{$row['country']}<br /><input type='text' name='edit_country' /></td> 
<td>{$row['animal']}<br /><input type='text' name='edit_animal' /></td>
</tr>"; 
   } 

się daje, w sensie ja tak uznaję:

<?php while($row = mysql_fetch_assoc($result)): ?>
<tr> 
<td><?php echo $row['id']; ?></td> 
<td><?php echo $row['country']; ?><br /><input type='text' name='edit_country' /></td> 
<td><?php echo $row['animal']; ?><br /><input type='text' name='edit_animal' /></td>
</tr> 
<?php endwhile; ?> 

I tak właściwie nie do końca rozumiem co chcesz zrobić, wydaje się to banalne, coś co robię na co dzień, a nie jestem guru PHP, więc możesz wytłumaczyć to dokładniej?

Masz ileśtam rekordów które wyświetlasz jako tabela... Chcesz żeby przy każdym rekordzie (nie wierszu, tylko komórce w tabeli), był input, do którego się wpisuje nową wartość jak się chce edytować dane pole? xD

+ Acha no i zamiast "mysql_fetch_assoc" ja stosuję "mysql_fetch_array", ale to jak kto woli :]

++ Jakbyś rzucił jakimś skrinem, albo linkiem do strony w html jak ma ten 'formularz' wyglądać :)

Edytowane przez unbreak

userbar1.jpg

Twiztid Tribe ®

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Sorry za nieobecność ;).

No więc przeczytałem dzisiaj wasze posty i tak wykombinowałem (btw zmieniłem nazwy pól w bazie):

<?php
while($rows=mysql_fetch_array($result)){
?>
<tr>
<td align="center"><? $id[]=$rows['id']; ?><? echo $rows['id']; ?></td>
<td align="center"><input name="name[]" type="text" id="username" value="<? echo $rows['username']; ?>"></td>
<td align="center"><input name="lastname[]" type="text" id="email" value="<? echo $rows['email']; ?>"></td>
<td align="center"><input name="email[]" type="text" id="password" value="<? echo $rows['password']; ?>"></td>
</tr>
<?php
}
?>
<tr>
<td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
</tr>
</table>
</td>
</tr>
</form>
</table>
<?php

if(/*Coś tu by wypadało wpisać, ale nie wiem co...*/){
for($i=0;$i<$count;$i++){
$sql1="UPDATE $table_users SET name='$username[$i]', lastname='$email[$i]', email='$password[$i]' WHERE id='$id[$i]'";
$result1=mysql_query($sql1);
}
}

if($result1){
header("location:member_list.php");
}
mysql_close();
?>

Generalnie to już wszystko rozkminiłem, nie wiem tylko jak powiedzieć skryptowi, że wcisnąłem Submit :)

Edytowane przez Bartek

...

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

O ile połączenie nie było trwałe, nie będzie to problemem bo baza danych samą się rozłączy.

Nie ma Bogini poza Boginią, która jest Waszą Boginią. Nie ma ruchu eryzyjskiego poza ruchem eryzyjskim, którym jest Ruch Eryzyjski. A każdy Korpus Złotego Jabłka jest ukochanym domem Złotego Robaka. Chwała Eris! 23!

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.