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

Rekomendowane odpowiedzi

Opublikowano

Jak rozumiem walczysz o pl ogonki w bazie i na stronie?

Dokładnie. I w tej chwili są albo w bazie ale nie na stronie, albo na stronie ale nie w bazie...

...

Opublikowano

Ale jak ustawie kodpwanie utf8 na stronie to nie mam polskich znakow w bazie. A te moje "krzaki" na stronie i w bazie to wygladaja tak samo (podawalem we wczesniejszych postach).

...

Opublikowano

Egrhrhr. To kodowanie mnie kiedyś zabije.

Ustawienie utf8 w headerze oraz dodanie mysql_query("SET NAMES 'utf8'"); załatwiło sprawę :woohoo:

...

  • 4 miesiące temu...
Opublikowano

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...

...

  • Manager
Opublikowano

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.

Opublikowano

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.

...

Opublikowano

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...

...

Opublikowano

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']

Opublikowano

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?

...

Opublikowano

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>"; 

Opublikowano

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ć.

...

  • Manager
Opublikowano

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.

Opublikowano (edytowane)

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 ®

  • 2 tygodnie później...
Opublikowano (edytowane)

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

...

  • 4 tygodnie później...
Opublikowano

Z tego co się orientuję, to w momencie kiedy $result1 to już Ci nie zrobi mysql_close() bo nie dojdzie już do tej linii, wykona header i przekieruje.

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

userbar1.jpg

Twiztid Tribe ®

Opublikowano

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!

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ę.