Jak poprawnie dodać dane do bazy MySQL?


(Saver) #1

Chce napisać taki mały skrypt z uwagami i sugestiami, i już zaczynają się błędy,

proszę spojrzeć:

Mój formularz:

Twój Nick: 


Temat: 
Błąd
Skarga
Sugestian




Treść:

A tu plik 'dodaj.php'

<?php

#include "baza.php";

$mysql_id = mysql_connect('localhost', 'root', 'XX');

mysql_select_db($mysql_id, 'zglaszalnia');


$nick = $_POST['nick'];

$temat = $_POST['temat'];

$tresc = $_POST['tresc'];

$data = date("Y-m-d H:i:s");


$result = mysql_query("INSERT INTO zgloszenia (`nick`, `temat`, `tresc`, `data` , `status`) VALUES ('$nick', '$temat', '$tresc', '$data', '0' )") or die("Wystąpił błąd" );



?>

Męczyłem się 30 min czemu dane nie są w bazie, później dodałem or die("Wystąpił błąd" ); i pokazuje mi błąd. Może mi ktoś powiedzieć co zrobiłem źle? Połączenie z bazą mam poprawne. A moja baza wygląda tak:

-- phpMyAdmin SQL Dump

-- version 3.3.2deb1

-- http://www.phpmyadmin.net

--

-- Host: localhost

-- Czas wygenerowania: 26 Wrz 2010, 10:34

-- Wersja serwera: 5.1.41

-- Wersja PHP: 5.3.2-1ubuntu4.5


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";



/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;


--

-- Baza danych: `zglaszalnia`

--


-- --------------------------------------------------------


--

-- Struktura tabeli dla `zgloszenia`

--


CREATE TABLE IF NOT EXISTS `zgloszenia` (

  `id` int(11) NOT NULL,

  `nick` int(11) NOT NULL,

  `temat` int(11) NOT NULL,

  `tresc` int(11) NOT NULL,

  `data` int(11) NOT NULL,

  `admin` int(11) NOT NULL,

  `status` int(11) NOT NULL,

  KEY `id` (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `zgloszenia`

--

(Mazquick Tv) #2

Po 1. Dodaj sobie obsługe spr czy przycisk był wciśnięty...

if ($_POST['submit'])

Po 2. Do ID dodaj AUTO_INCREMENT. Po 3. Dodaj obsługę błędów przy połączeniu i wybieraniu bazy. Po 4. Nie wiem po co

INSERT INTO zgloszenia (`nick`, `temat`, `tresc`, `data` , `status`)

używasz `. :] Po 4,5. Nie brakuje ci w zapytaniu pola admin? Napisane jest, że NOT_NULL a nic nie ustawiasz w tym polu... Po 5. Spróbuj zrobić to tak:

$zap = "Twoje zapytanie";

$res = mysql_query($zap, $mysql_id);

if ($res == 1)

{

   Echo 'Dodano!';

}

[/code]




Po 6. Do kodu html dodaj linijke po buttonie:

[code]<?php include('dodaj.php'); //?>

Pozdrawiam.


(Saver) #3

Chyba tego nie umiem, mógłbyś mi napisać wszystko od nowa, już gotowy kod a ja już dalej sobie sam poradzę :slight_smile: Bo mi wyszło coś takiego,

if ($_POST['submit'])

{

$zap = "'$nick', '$temat', '$tresc', NOW())";

$res = mysql_query($zap, $mysql_id);

if ($res == 1)

{

   Echo 'Dodano!';

}

}[/code]

(Mazquick Tv) #4

Ok. Więc:

Twój formularz powinien wyglądać tak:

//action mozesz zmienic na nazwe pliku końcowego. np formularz.php action polega na tym gdzie cie przeniesie po odswiezeniu strony



Twój Nick: 


Temat: 
Błąd
Skarga
Sugestian




Treść:





<?php include('dodaj.php'); //?>

Twój plik dodaj.php tak:

<?php

if ($_POST['submit'])

{

    #include "baza.php";

    $mysql_id = mysql_connect('localhost', 'root', 'Kosmos45') or die("Blad");

    mysql_select_db('zglaszalnia') or die("Blad");


    $nick = $_POST['nick'];

    $temat = $_POST['temat'];

    $tresc = $_POST['tresc'];

    $data = date("Y-m-d H:i:s");


    $zapytanie = "INSERT INTO zgloszenia (nick, temat, tresc, data , admin, status) VALUES ('".$nick."', '".$temat."', '".$tresc."', '".$data."', '0', '0')"; //Zakladam ze admin tak = 1 nie = 0 :)


   $wyk = mysql_query($zapytanie, $mysql_id);

   if ($wyk == 1)

   {

       //Powiodlo sie...

   }

   else

   {

       //Cos poszlo nie tak...

       echo 'Blad: '.mysql_error();

   }

}

?>

Pozdrawiam.

PS: Polecam przeczytać jakieś kursy lub książke dot. podstaw php ;]


(Saver) #5

Dobra działa połączenie, ale czemu w bazie nie na tekstu?

baza.png


(Mariuszs) #6

Bo ustawiłeś wszędzie pola numeryczne.


(Saver) #7

Dzięki :smiley:


(Mazquick Tv) #8

Tak jak mówi @up zmień z int na varchar.

A jak masz problemy z polskimi znakami.

mysql_query("SET CHARSET utf8");

mysql_query("SET NAMES 'utf8' COLLATE 'utf8_bin'");

umieszczasz PRZED wyslaniem 'INSERT INTO[..]' :slight_smile:

Pozdrawiam.


(Saver) #9

A ja w bazie mam teraz zamiast polskich liter jakieś gzygzaki, zmieniłem w bazie kodowanie z latin1_swedish_ci na utf8_polish_ci i też nie pomaga, co zrobić?

-- Dodane 26.09.2010 (N) 14:01 --

OK wysyłanie już działa na 100% :slight_smile:a teraz plik panel.php

<?php

/*

    $mysql_id = mysql_connect('localhost', 'root', 'XX') or die("Blad1");

    mysql_select_db('zglaszalnia') or die("Blad2");

*/



    // łączymy się z bazą danych 

    if (mysql_connect('localhost', 'root', 'XX') and mysql_select_db('zglaszalnia')) { 


        // zapytanie do bazy danych 

        $wynik = mysql_query("SELECT * FROM zgloszenia WHERE status='0'") 

        or die("Błąd w zapytaniu!"); 


        mysql_close(); 

    } 

    else echo "Nie mogę połączyć się z bazą danych!"; 


    // wyświetlany wyniki zapytania 

    while($rek = mysql_fetch_array($wynik)) { 

        echo $rek['nick']. $rek['temat']. $rek['tresc']. $rek['data']"
zalatwione"; 

    } 

} 



?>[/code]




i plik good.php

[code]<?php $result = mysql_query("UPDATE zgloszenia SET status = '1'); ?>

Chodzi o to że ktoś wysyła zgłoszenie jest zapisywanie do bazy ze statusem 0, i później wszystkie zgłoszenia ze statusem 0 są wyświetlane w panelu, i po kliknięciu na załatwione zamienia się na status 1 i już nie jest wyświetlane w panelu, a w panelu admina są wyświetlane wszystkie zgłoszenia i można je usuwać.

Mógłbyś mi pomóc w tym?


(Mazquick Tv) #10

Ech myśl... Jak mamy ci tak pomagać przy wszystkim to zaraz zrobimy całą stronę za ciebie...

Wyświetlanie zgłoszeń ze statusem 0. Więc musisz wybrać z bazy tylko te wiersze gdzie status = '0' i potem je wyświetlasz w tabeli z formularzem.

$zap = mysql_query("SELECT * FROM nazwa_bazy WHERE status = '0'");

while ($wiersz = mysql_fetch_array($zap))

{

    $pole1 = $wiersz['pole1'];

    echo ''.$pole1.'';

}


W panelu admina wybierasz wszystko i wyświetlasz w jakiejś innej tabeli. :)

[code]

$zap = mysql_query("SELECT * FROM nazwa_bazy");

[/code]

Te przykłady sobie odpowiednio zmień ;]

Usuwanie to wiadomo 'DELETE FROM [..] WHERE [..]'.

Pozdrawiam.


(Saver) #11

[quote="MazQuick"] Ech myśl... Jak mamy ci tak pomagać przy wszystkim to zaraz zrobimy całą stronę za ciebie... Wyświetlanie zgłoszeń ze statusem 0. Więc musisz wybrać z bazy tylko te wiersze gdzie status = '0' i potem je wyświetlasz w tabeli z formularzem. $zap = mysql_query("SELECT * FROM nazwa_bazy WHERE status = '0'"); while ($wiersz = mysql_fetch_array($zap)) { $pole1 = $wiersz['pole1']; echo ''.$pole1.''; } W panelu admina wybierasz wszystko i wyświetlasz w jakiejś innej tabeli. :slight_smile:

 $zap = mysql_query("SELECT \* FROM nazwa_bazy");

Te przykłady sobie odpowiednio zmień ;] Usuwanie to wiadomo 'DELETE FROM [..] WHERE [..]'. Pozdrawiam. W panelu mi się nic nie pokazuje [code]<?php $mysql_id = mysql_connect('localhost', 'root', 'XX') or die("Blad1"); mysql_select_db('zglaszalnia') or die("Blad2"); $zapyta = "SELECT * FROM zgloszenia WHERE status = '0'"; $zap = mysql_query($zapyta, $mysql_id); while ($wiersz = mysql_fetch_array($zap)) { $pole1 = $wiersz['pole1']; echo ''.$pole1.''; } ? [/quote]
> -- Dodane 26.09.2010 (N) 14:31 -- W panelu mi się nic nie pokazuje

<?php


    $mysql_id = mysql_connect('localhost', 'root', 'XX') or die("Blad1");

    mysql_select_db('zglaszalnia') or die("Blad2");


$zapyta = "SELECT * FROM zgloszenia WHERE status = '0'";


$zap = mysql_query($zapyta, $mysql_id);

while ($wiersz = mysql_fetch_array($zap))

{

    $pole1 = $wiersz['pole1'];

    echo ''.$pole1.'';

}

?>[/code]

(Mazquick Tv) #12

(Saver) #13

Jak już pisałem wcześniej... Myśl jak masz czym :slight_smile:


(Mazquick Tv) #14

Jeżeli chcesz zrobić odnośnik to już trzeba użyć AJAX i zdarzenia onclick.

A jeżeli buttonem to:

mysql_query("UPDATE zgloszenia SET status = '1' WHERE i tu podajesz edytowane zgloszenie");

(Saver) #15

Ale ja chce zrobić jak się kliknie na zalatwione to zamienia się status jednego zgłoszenia na status=1 i znika z panelu -- Dodane 26.09.2010 (N) 17:04 --

Nie dam rady sam, mógłbyś mi cała stronę napisać :wink:

Panel admina: admin.php ==> Wszystkie zgłoszenia, możliwość usuwania zgłoszeń

Panel: panel.php ==> oglądanie nowych zgłoszeń i Załatwianie, czyli po kliknięciu na odnośnik 'załatwione' zgłoszenie znika z panelu i jest u admina

Formularz: index.php ==> Jest już gotowy

Dodaj zgłoszenie: dodaj.php ==> Jest już gotowy


(Janek Max) #16

panel.php

<?php

include "baza.php";


if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_GET['delete'] != '') {

    $id = $_GET['delete'];


    mysql_query("UPDATE `zgloszenia` WHERE id = ".$id." SET `status` = '1'") or sqlerr( __FILE__ , __LINE__ );

    die;

}


$wynik = mysql_query("SELECT * FROM zgleszenia WHERS blabla dopisz sobie ;p ") or die('Błąd zapytania');



if(mysql_num_rows($wynik) > 0) {

    while($re = mysql_fetch_assoc($wynik)) {


        echo "".$re['nick']."   " .$re['temat']. "  " .$re['tresc']. "    Załatwione
";

    }


}

?>[/code]

admin.php

Tu już powinieneś sobie sam poradzić przerób odpowiednio panel.php


(Saver) #17

[quote="reyder"] panel.php <?php include "baza.php"; if ($SERVER['REQUESTMETHOD'] == 'GET' && $GET['delete'] != '') { $id = $GET['delete']; mysql_query("UPDATE zgloszenia WHERE id = ".$id." SET status = '1'") or sqlerr(FILE,LINE); die; } $wynik = mysql_query("SELECT * FROM zgleszenia WHERS blabla dopisz sobie ;p ") or die('Błąd zapytania'); if(mysql_num_rows($wynik) > 0) { while($re = mysql_fetch_assoc($wynik)) { echo "".$re['nick']."   " .$re['temat']. "  " .$re['tresc']. "    Załatwione "; } } ?>[/code] admin.php Tu już powinieneś sobie sam poradzić przerób odpowiednio panel.php Ale to nie zmienia statusu na 1 :frowning:

\<?php include "baza.php"; if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_GET['delete'] != '') { $id = $_GET['delete']; mysql_query("UPDATE `zgloszenia` WHERE id = ".$id." SET `status` = '1'") or sqlerr(__FILE__,__LINE__); die; } $wynik = mysql_query("SELECT \* FROM zgloszenia WHERE status = '0' ") or die('Błąd zapytania'); if(mysql_num_rows($wynik) \> 0) { while($re = mysql_fetch_assoc($wynik)) { echo "".$re['nick']."&nbsp;&nbsp;&nbsp;" .$re['temat']. "&nbsp;&nbsp;" .$re['tresc']. "&nbsp;&nbsp;" .$re['data']."&nbsp;&nbsp;Załatwione "; } } ?\> [/quote]
-- **Dodane 27.09.2010 (Pn) 11:50** --
[quote="Saver"] Ale to nie zmienia statusu na 1 :( \<?php include "baza.php"; if ($_SERVER['REQUEST_METHOD'] == 'GET' && $_GET['delete'] != '') { $id = $_GET['delete']; mysql_query("UPDATE `zgloszenia` WHERE id = ".$id." SET `status` = '1'") or sqlerr(__FILE__,__LINE__); die; } $wynik = mysql_query("SELECT \* FROM zgloszenia WHERE status = '0' ") or die('Błąd zapytania'); if(mysql_num_rows($wynik) \> 0) { while($re = mysql_fetch_assoc($wynik)) { echo "".$re['nick']."&nbsp;&nbsp;&nbsp;" .$re['temat']. "&nbsp;&nbsp;" .$re['tresc']. "&nbsp;&nbsp;&nbsp;&nbsp;Załatwione "; } } ?\>

Mógłbyś mi pomóc zrobić panel.php, bo co mi podałeś nie chce ustawiać statusu na 1 :frowning: [/quote]


(Mazquick Tv) #18

Masz jakieś GG? To napisz mi na PW lub GG (jak masz) (ikona pod avatarem). Pomogę Ci zrobić te skrypty i dam pare rad ;]