Skocz do zawartości
Zaloguj się, aby obserwować  
Paul

Prosty skrypt php z mysql

Polecane posty

Hej,

 

Poszkuję rozwiązania na dość nurtujące mnie pytanie wink.png

 

Chciałbym zrobić coś jak mini cms tzn. jedna tabela mysql i potem wyświetlanie tego na www.

- Czy mógłby ktoś mi polecić jak to zrobić smile.png

 

Tabela w mysql mogła by wyglądać tak

SQL - nazwa "dane"

zawartość

id|nazwa|opis|obrazek
1|Jan|Opis|jan.jpg
2|Anna|Opis|anna.jpg
3|Zofia|Opis|zofia.jpg
4|Krystyna|Opis|krystyna.jpg
5|Beata|Opis|beata.jpg

 

na stronie chciałbym żeby to bylo wyświetlane w sposób http://www.adres.pl/index.php?id=1 itd. (chętniej seo czyli http://www.adres.pl/jan ).

 

<html>
<head></head>
<body>
<img src="jan.jpg"><br/>
<b>Imię</b>: Jan<br/>
<b>Opis</b>: Opis<br/>
</body>
</html>

 

Dzieki.

 

Pozdrawiam,

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Znasz takie coś jak php ?

 

<?
$id=$_GET['id'];
mysql_connect("adres serwera", "login", "hasło")or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
mysql_select_db("NAZWA_BAZY");

$zapytanie=mysql_query("Select * from nazwa_bazy where id=$id");
echo'<b>Imię</b>: '.$zapytanie['nazwa'].'<br/> ';

?>

 

Polecam: http://webmade.org i inne tego typu portale.

Oczywiście trzeba to jeszcze dopracować i zabezpieczyć :)

Edytowano przez wiktor12348 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Znasz takie coś jak php ?
A Ty znasz? Chyba nie.. wink.png

 

<?php  

$id = (int) $_GET['id'];

if(!$id) {
   die('Brak indentyfikatora');
}

mysql_connect("adres serwera", "login", "hasło") or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
mysql_select_db("NAZWA_BAZY");

$sql = mysql_query("SELECT * FROM `nazwabazy` WHERE `id` = '$id' ORDER BY `id` ASC");

if($sql) {


   echo '
   <table cellspacing="1" cellpadding="5">
   <tr>
  <th>Imie</th><th>Opis</th><th>Zdjęcie</th>
   </tr>';					    



   while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
   {
    echo '<tr>
			  <td>' . $row['nazwa'] . '</td>
			  <td>' . $row['opis'] . '</td>
			  <td><img src="' . $row['obrazek'] . '" alt="' . $row['nazwa'] . '"></td>
		  </tr>
    ';
   }

   echo '</table>';
}  

mysql_close();

?>


Edytowano przez xorg (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja mu to dałem w formie uproszczonej. Wszystko zawarte w tym było co potrzebuje. Nie wiem o co Ci chodzi smile.png Doczytaj komentarz. Aj i no oczywiście mysql_fetch :)

Jeśli chce się nauczyć, nikt za niego tego zrobić nie może. Do twojej formy też można się przyczepić, jakbym był już taki drobiazgowy :PP

Chociażby zapezpieczenie zmiennej przez mysql_escape_string()

Edytowano przez wiktor12348 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Ja mu to dałem w formie uproszczonej. Wszystko zawarte w tym było co potrzebuje.
Chyba nie - mysql_query nie zwraca wyników, tylko jego identyfikator.

 

Do twojej formy też można się przyczepić, jakbym był już taki drobiazgowy :PP

Chociażby zapezpieczenie zmiennej przez mysql_escape_string()

Kolejna wtopa :) jako parapetr otrzymujemy zmienną typu int, co jest filtowane w tym kawałku kodu
$id = (int) $_GET['id'];

- jeżeli wprowadzony parametr nie jest liczbą, zostanie zamieniony na zero. Nastepnie

if(!$id) {
   die('Brak indentyfikatora');
}

zatrzymuje wykonywanie kodu jeżeli parametr id jest równy zero bądź mniejszy. Nie potrzebujemy "eskejpowania" wprowadzanych danych, bo nie są to ciągi znaków w które można wprowadzić przykładowo znaki ' bądź ".

 

Zanim zaczniesz kogoś pouczać upewnij się że wiesz co mówisz ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

xorg, dzięki za pomoc :)

 

Zrobiłem tak jak Ty napisałeś z tym, że dodałem jedno pole w tabeli:

--
-- Struktura tabeli dla  `dane`
--

CREATE TABLE IF NOT EXISTS `dane` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `nazwa` tinytext CHARACTER SET latin1 NOT NULL,
 `prefix` tinytext CHARACTER SET latin1 NOT NULL,
 `opis` text CHARACTER SET latin1 NOT NULL,
 `obrazek` varchar(50) CHARACTER SET latin1 NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=3 ;

--
-- Zrzut danych tabeli `dane`
--

INSERT INTO `dane` (`id`, `nazwa`, `prefix`, `opis`, `obrazek`) VALUES
(1, 'Jan', 'janek', 'Jasiek', 'jan.jpg'),
(2, 'Zofia', 'zoska', 'Zo?ka', 'zofia.jpg');

 

natomiast kod index.php

<?php  

$prefix = (int) $_GET['prefix'];

if(!$prefix) {
   die('Brak indentyfikatora');
}

mysql_connect("localhost", "root", "root") or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
mysql_select_db("test");

$sql = mysql_query("SELECT * FROM `dane` WHERE `prefix` = '$prefix' ORDER BY `prefix` ASC");

if($sql) {


   echo '
   <table cellspacing="1" cellpadding="5">
   <tr>
	  <th>Imie</th><th>Opis</th><th>Zdjęcie</th>
   </tr>';									     



   while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
   {
	    echo '<tr>
							  <td>' . $row['nazwa'] . '</td>
							  <td>' . $row['opis'] . '</td>
							  <td><img src="' . $row['obrazek'] . '" alt="' . $row['nazwa'] . '"></td>
					  </tr>
	    ';
   }

   echo '</table>';
}  

mysql_close();

?>

 

Prefix dodałem w celu wywoływania tzn. http://www.adres.pl/index.php?prefix=janek - ale niestety to nie działa ;)

Co potrzeba poprawić?

 

Jak zrobić, żeby po wejściu na index.php wyświetlały się wszystkie pozycje z tabeli np.

<ul>
<li><a href="index.php?prefix=janek">Janek</a></li>
<li><a href="index.php?prefix=zoska">Zofia</a></li>
</ul>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
`prefix` tinytext
Pewnie dlatego wink.png

 

<?php  

$prefix = $_GET['prefix'];

if(empty($prefix)) {
die('Brak indentyfikatora');
}

mysql_connect("localhost", "root", "root") or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
mysql_select_db("test");

$prefix = mysql_real_escape_string($prefix);

$sql = mysql_query("SELECT * FROM `dane` WHERE `prefix` = '$prefix' ORDER BY `prefix` ASC");

if($sql) {


echo '
<table cellspacing="1" cellpadding="5">
<tr>
			  <th>Imie</th><th>Opis</th><th>Zdjęcie</th>
</tr>';																		  



while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
{
				echo '<tr>
															  <td>' . $row['nazwa'] . '</td>
															  <td>' . $row['opis'] . '</td>
															  <td><img src="' . $row['obrazek'] . '" alt="' . $row['nazwa'] . '"></td>
											  </tr>
				';
}

echo '</table>';
}  

mysql_close();

?>

 

Jak zrobić, żeby po wejściu na index.php wyświetlały się wszystkie pozycje z tabeli np.
Hm. Tutaj już trochę bardziej strukturalne programowanie by się przydało, ale da radę bez.

 


<?php  

$prefix = $_GET['prefix'];

mysql_connect("localhost", "root", "root") or die("BLAD: nie mozna sie polaczyc z serverem MySQL");
mysql_select_db("test");

$prefix = mysql_real_escape_string($prefix);

if(empty($prefix)) {

   $sql = mysql_query("SELECT `prefix`, `nazwa` FROM `dane` ORDER BY `prefix` ASC");

   if($sql) {

    echo '<ul>';

    while($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

	    echo '<li><a href="index.php?prefix=' . $row['prefix'] . '">' . $row['nazwa'] . '</a></li>';	    
    }

    echo '</ul>';
   }
}
else {

   $sql = mysql_query("SELECT * FROM `dane` WHERE `prefix` = '$prefix' ORDER BY `prefix` ASC");

   if($sql) {


    echo '
    <table cellspacing="1" cellpadding="5">
    <tr>
				  <th>Imie</th><th>Opis</th><th>Zdjęcie</th>
    </tr>';																		  



    while($row = mysql_fetch_array($sql, MYSQL_ASSOC))
    {
				    echo '<tr>
																  <td>' . $row['nazwa'] . '</td>
																  <td>' . $row['opis'] . '</td>
																  <td><img src="' . $row['obrazek'] . '" alt="' . $row['nazwa'] . '"></td>
												  </tr>
				    ';
    }

    echo '</table>';
   }
}

mysql_close();

?>

Edytowano przez xorg (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

xorg, hmm czyli co powinienem zmienić w tym "prefix" w bazie danych?

- co zrobić, żeby w polu "opis" w mogły być PL znaki?

- jak na stronie głównej (tzn. index.php) było wylistowania wszystkich wpisów z bazy danych?

 

Dziękuję.

 

Pozdrawiam,

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
hmm czyli co powinienem zmienić w tym "prefix" w bazie danych?
Nic. Po prostu kod nie był dostosowany.

 

- co zrobić, żeby w polu "opis" w mogły być PL znaki?
Zmienić kodowanie na latin2 bądź utf8.

 

- jak na stronie głównej (tzn. index.php) było wylistowania wszystkich wpisów z bazy danych?
Drugi kod stąd to robi :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ok, dzięki :) ustawiłem kodowanie z bazie na - utf8_general_ci - w phpmyadminie wyświetlają mi się pl znaki natomiast na stronie już nie...

dodałem oczywiście "<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />"

 

w phpmyadmin wyświetla mi się - ąęśćłółźż, na stronie natomiast ?????�???

jeśli w phpmyadmin zmieniłem na ąęśćłółźż to na stronie jest ok czyli ąęśćłółźż

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
w phpmyadmin wyświetla mi się - ąęśćłółźż, na stronie natomiast ?????�???

jeśli w phpmyadmin zmieniłem na ąęśćłółźż to na stronie jest ok czyli ąęśćłółźż

To w czym problem? ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ops, przepraszam smile.png skrypt forum zamienił hasze na zwykłe literki wink.png

jeszcze raz jeśli w phpmyadmin wkleję ąęśćłółźż, na stronie natomiast ?????�???

natomiast jeśli wkleję &.#261;&.#281;&.#347;&.#263;&.#322;&.#243;&.#322;&.#378;&.#380; (oczywiście bez kropek smile.png) to wyświetla się na stronie ąęśćłółźż - czyli ok smile.png

 

Znasz może jakiś mega prosty sposób na zrobienie do tego admin.php tzn.

żeby można było dodawać nowe wpisy/edytować i usuwać?

 

Dzięki :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A spróbuj po połączeniu z bazą wykonać zapytanie SET NAMES UTF-8

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

ok, z kodowanie już wszystko ok :)

 

Teraz poszukuję jakiegoś prostego sposobu jak stworzyć plik np. admin.php

który umożliwiał by mi dodawanie rekordów do tabeli :) fajnie jak by można było również je edytować i usuwać ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

samu, dzięki :) skorzystałem z tego arta do którego podałeś linka - jest tam example (http://www.freewebmasterhelp.com/static/tutorials/phpmysql/example.zip) lecz w nim sporo rzeczy nie działa ;) a najłatwiej jest nauczyć się patrząc jak gdzieś jest zrobione i robić podobnie :)

- nie działa tam np. edycja i dodawanie wpisów do bazy...

 

Może ktoś ma jakiś przykład w którym by to działało?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

samu to, tak w example nie działa:

1. dodawanie tzn. jest plik add.html który przekierowuje do insert.php który powinien dodawać do mysql i dodaje ale wyłącznie pusty rekord - nie dodaje tekstu wpisanego w pola formularza...

2. edycja - jest plik który powinien odp. za edycję update.php ale nijak nie idzie żeby działało tzn. wpisuje update.php?id=1 i nie pokazuje mi się formularz w którym mógłbym edytować pola... ;)

3. w opisie jest ale niestety szkoda, że w example nie zostało dodane jak usuwać (nie ma delete.php ani nic takiego ;))

 

Dzięki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Znalazłem tez tutaj - http://www.phpeasyst...om/mysql/9.html - jak zrobić edytowania ale niestety to nie działa wink.png

Po prostu formularz nie zapisuje danych w bazie danych wink.png Próbowałem zrobić na tej samej zasadzie usuwanie:

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="root"; // Mysql password
$db_name="test_mysql"; // Database name
$tbl_name="test_mysql"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// update data in mysql database
$sql="DELETE FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

// if successfully updated.
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='list_records.php'>View result</a>";
}

else {
echo "ERROR";
}

?>

- wyświetla się komunikat, że wszystko poszło ok ale wpis nadal jest w BD.

 

Pozdrawiam,

Edytowano przez Paul (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
że wszystko poszło ok ale wpis nadal jest w BD.

$sql="DELETE FROM $tbl_name WHERE id='$id'";

Wypada to pierw pobrać "skąś" ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

xorg, dzięki :) nie zauważyłem :P

 

a co tutaj można poprawić:

 

update.php

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="root"; // Mysql password
$db_name="test_mysql"; // Database name
$tbl_name="test_mysql"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// get value of id that sent from address bar
$id=$_GET['id'];

// Retrieve data from database
$sql="SELECT * FROM $tbl_name WHERE id='$id'";
$result=mysql_query($sql);

$rows=mysql_fetch_array($result);
?>
<table width="400" border="0" cellspacing="1" cellpadding="0">
<tr>
<form name="form1" method="post" action="update_ac.php">
<td>
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td> </td>
<td colspan="3"><strong>Update data in mysql</strong> </td>
</tr>
<tr>
<td align="center"> </td>
<td align="center"> </td>
<td align="center"> </td>
<td align="center"> </td>
</tr>
<tr>
<td align="center"> </td>
<td align="center"><strong>Name</strong></td>
<td align="center"><strong>Lastname</strong></td>
<td align="center"><strong>Email</strong></td>
</tr>
<tr>
<td> </td>
<td align="center"><input name="name" type="text" id="name" value="<? echo $rows['name']; ?>"></td>
<td align="center"><input name="lastname" type="text" id="lastname" value="<? echo $rows['lastname']; ?>" size="15"></td>
<td><input name="email" type="text" id="email" value="<? echo $rows['email']; ?>" size="15"></td>
</tr>
<tr>
<td> </td>
<td><input name="id" type="hidden" id="id" value="<? echo $rows['id']; ?>"></td>
<td align="center"><input type="submit" name="Submit" value="Submit"></td>
<td> </td>
</tr>
</table>
</td>
</form>
</tr>
</table>

<?

// close connection
mysql_close();

?>

 

update_ac.php

<?php
$host="localhost"; // Host name
$username="root"; // Mysql username
$password="root"; // Mysql password
$db_name="test_mysql"; // Database name
$tbl_name="test_mysql"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// update data in mysql database
$sql="UPDATE $tbl_name SET name='$name', lastname='$lastname', email='$email' WHERE id='$id'";
$result=mysql_query($sql);

// if successfully updated.
if($result){
echo "Successful";
echo "<BR>";
echo "<a href='list_records.php'>View result</a>";
}

else {
echo "ERROR";
}

?>

 

Plik update.php wyświetla zawartość bazy ale nie aktualizuje się.. ;)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nadal to co pisał xorg, w pliku update_ac.php $id zawsze jest puste, formularz wysyłasz do pliku update_ac.php i tam też powinieneś odczytać id, swoja drogą nigdzie go nie przekazujesz z update.php.

 

Opanuj jakiekolwiek podstawy php i html-a.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

w update.php dodałem, żeby w GET była zmienna czyli

<form name="form1" method="post" action="update_ac.php?id=<? echo $rows['id']; ?>">

natomiast w update_ac.php dodałem:

// get value of id that sent from address bar
$id=$_GET['id'];

niestety to wyczyściło wpis i nie zapisuje jak coś ponownie się wpisuje...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Po raz kolejny podstawy podstaw, skąd update_ac.php ma wiedzieć co jest w zmiennych $name, $lastname i $email?

Skrypt po prostu wykonuje to co mu karzesz czyli wpisuje puste wartości w odpowiednie pola.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

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

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×