[php]dodawanie komentarzy na bazie danych- błąd


(batmomobil) #1

Mam problem chcę zrobić dodawanie komentarzy na stronie na bazie danych.Zrobiłem tabelę w bazie danych.Ale z formularza:

Komentarz Nick: Komentarz:
'; [/code] plik wyślij do bazy:
[code]<?php if(isset($_GET['plik']) && $_GET['plik']=='dodajopis') { require 'db.php'; $nick=$_POST['nick_komentarz']; $opis=$_POST['opis_komentarz']; } else { $opis='Brak opisu'; } if(empty($nazwa) || empty($opis)) { echo "Musisz wypełnić wszystkie pola"; exit; } $query="SELECT id_komentarz, link_komentarz FROM komentarze ORDER BY id_komentarz DESC LIMIT 1"; $wynik = mysql_query($query) or die(mysql_error()); if(!$wynik) { echo "Zapytanie nieudane. Nie można pobrać id komentarz. " . mysqli_error(); } else { $row = mysql_fetch_object($wynik); $id_komentarz = $row->id_komentarz; $nick_komentarz=$row->nick_komentarz; $opis_komentarz=$row->opis_komentarz; $link_komentarz = $row->link_komentarz; $sql = "UPDATE komentarze SET nick_komentarz='$nick', opis_komentarz='$opis' WHERE id_komentarz='$id_komentarz'"; $zapytanie = mysql_query($sql); if(!$zapytanie) { echo "Wykonanie zapytania zawiodło. Nie można dodać informacji o komentarzu. " . mysqli_error(); } else { echo "Udało się dodać informacje o komentarzu.Nick: ".$nazwa."Opis: ".$opis.""; echo 'zobacz dodany komentarz'; } } } ?>

nie wysyła do bazy,wywala błąd.Co zrobiłem żle???


(Grzelix) #2

Z tego co zauważyłem to nie masz wogóle dodawanie nowych komentarzy więc teoretycznie nie da się nic wrzucić do tabeli.

Ogólnie ciekawi mnie co robi według ciebie to zapytanie

$query="SELECT id_komentarz, link_komentarz FROM komentarze ORDER BY id_komentarz DESC LIMIT 1";

bo jakoś nie widze w nim żadnego sensu.


(batmomobil) #3

to znaczy co konkretnie brakuje


(Grzesie K) #4

Oto kod moja wersja (napsiana od 0 gdyż twój sposób jest dość podejrzany.

<?php

$link=mysql_connect('localhost', 'root', '');

if(!$link){

	error('Mysql error!');

}

mysql_select_db('test');


if(isset($_POST['komentarz'])){

	$autor=addslashes(htmlspecialchars($_POST['autor']));;

	$tresc=addslashes(htmlspecialchars($_POST['komentarz']));

	if(!mysql_query("INSERT INTO `komentarze` (`id`,`autor`,`tresc`) VALUES (NULL, '$autor', '$tresc');")){

		echo 'Nieudalo sie dodac komentarza.';

	}else{

		echo 'Twoj komentarz zostal dodany.';

	}

	echo '';

}


$mysql=mysql_query("SELECT `autor`,`tresc` FROM `komentarze` LIMIT 20");

while($row=mysql_fetch_row($mysql)){

	echo "$row[0]: $row[1]
\n";

}

?>

W twoim kodzie jest coś dziwnego.... Piszesz:

a później w kodzie nawet nie ma linijki z sql zawierającym polecenie INSERT. Twój kod wygląda tak jakbyś chciał jedynie edytować już istniejące komentarze lub posiadać tylko jeden komentarz, który będzie się zmieniał. U ciebie w kodzie wszystko jest dobrze do linii 13. Później w linii 14 w niewiadomym celu pobierasz z bazy id_komentarz, link_komentarz pierwszego komentarza by w linii 25 podmienić go na podane dane...? Nierozumiem twojego toku myślenia.


(batmomobil) #5

Próbuje twojego kodu.Mam w bazie takie tabele:id_komentarz,nick_komentarz,opis_komentarz,link_komentarz,data_komentarz.Formularz poprawiłem tak:

a kod wyślij tak:

<?php $link=mysql_connect("xxx","yyy","zzz");

if(!$link){

   error('Mysql error!');

}

mysql_select_db("xxx");


if(isset($_POST['komentarz'])){

   $autor=addslashes(htmlspecialchars($_POST['nick_komentarz']));;

   $tresc=addslashes(htmlspecialchars($_POST['opis_komentarz']));

   if(!mysql_query("INSERT INTO `komentarze` (`id_komentarz`,`nick_komentarz`,`opis_komentarz`) VALUES (NULL, '$autor', '$tresc);")){

      echo 'Nieudalo sie dodac komentarza.';

   }else{

      echo 'Twoj komentarz zostal dodany.';

   }

   echo '';

}


$mysql=mysql_query("SELECT `nick_komentarz`,`opis_komentarz` FROM `komentarze` LIMIT 20");

while($row=mysql_fetch_row($mysql)){

   echo "$row[0]: $row[1]
\n";

}

?>

skrypt kokazuje,że nie udało się dodać komentarza.Co robie żle???oprócz tego potrzebuje aby scrypt dodawał datę do bazy.


(Grzelix) #6

Po zmiennej $tresc brakuje apostrofa zamykającego

jak chcesz dodać czas to użyj funkcji time() ewentualnie odpowiedniego formatu korzystając funckji date() (to w zaleźności co masz w bazie ale time powinien zadziałać)

http://php.net/manual/en/function.date.php


(Grzesie K) #7

Można to również zrobić w mysql (oba rozwiązanania są prawidłowe). Można to zrobić nie edytując aktualnego skryptu a jedynie zmieniając domyślną zawartość pola id w mysql tak aby zawierał datę dodania, czyli CURRENT_TIMESTAMP oraz usuwając AI (przy założeniu że twoja strona nie będzie ąż tak bardzo popularna by w jednej sekundzie 2 użytkowników dodawało komentarz)


(batmomobil) #8

dodawanie komentarzy działa.Wielkie dzięki za pomoc.Jeszcze tylko muszę się uporać z dodawaniem tej daty.Proszę o pomoc,z góry dziękuję.


(Grzesie K) #9

oczywiście że działa :slight_smile: Co do dodawania daty to można to zrobić na kilka sposobów

  1. Dodajesz do tej swojej tabeli pole o nazwie np. czas_komentarz, typ ustawiasz jako TIMESTAMP, a wartość domyślną jako CURRENT_TIMESTAMP. Przy dodawaniu danych możesz je wymienić tak samo jak id_komentarz czyli z wartością NULL a mysql sam doda datę w domyślnym formacie

    if(isset($POST['opiskomentarz'])){

    $autor=addslashes(htmlspecialchars($POST['nickkomentarz']));;

    $tresc=addslashes(htmlspecialchars($POST['opiskomentarz']));

    if(!mysql_query("INSERT INTO komentarze (id_komentarz,czas_komentarz,nick_komentarz,opis_komentarz) VALUES (NULL, NULL, '$autor', '$tresc');")){

      echo 'Nieudalo sie dodac komentarza.';

    }else{

      echo 'Twoj komentarz zostal dodany.';

    }

    echo '';

    }

    $mysql=mysql_query("SELECT nick_komentarz,czas_komentarz,opis_komentarzFROMkomentarze LIMIT 20");

    while($row=mysql_fetch_row($mysql)){

    echo "$row[0]: ($row[1])
    $row[2]

    \n";

    }

2.Drugi sposób to zapisanie wartości time() i przekazanie jej w bazie, przy odczycie użyj funkcji date() by określić format

if(isset($_POST['opis_komentarz'])){

   $autor=addslashes(htmlspecialchars($_POST['nick_komentarz']));;

   $tresc=addslashes(htmlspecialchars($_POST['opis_komentarz']));

   $time=time();

   if(!mysql_query("INSERT INTO `komentarze` (`id_komentarz`,`czas_komentarz`,`nick_komentarz`,`opis_komentarz`) VALUES (NULL,$time, '$autor', '$tresc');")){

      echo 'Nieudalo sie dodac komentarza.';

   }else{

      echo 'Twoj komentarz zostal dodany.';

   }

   echo '';

}


$mysql=mysql_query("SELECT `nick_komentarz`,`czas_komentarz`,`opis_komentarz` FROM `komentarze` LIMIT 20");

while($row=mysql_fetch_row($mysql)){

   $row[1]=date("d.m.Y H:i",$row[1]);

   echo "$row[0]: ($row[1])
$row[2]

\n";

}

Ps. Dodawanie w mysql _komentarz moim zdaniem jest zbędne i nie rozumiem w jakim celu to robisz.


(batmomobil) #10

Pojawił się problem skrypt dodaje datę same zera 00-00-0000,dopiero jak w bazie ustawie ręcznie to się poprawia.


(Grzesie K) #11

Kod jest poprawny, gdyż w moim przypadku działa. Problem leży pewnie po twojej stronie, a konkretnie po stronei twojej bazy danych a raczej jej struktury.

CREATE TABLE `komentarze` (

  `id_komentarz` int(11) NOT NULL AUTO_INCREMENT,

  `czas_komentarz` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  `nick_komentarz` varchar(30) NOT NULL,

  `opis_komentarz` varchar(255) NOT NULL,

  PRIMARY KEY (`id_komentarz`)

)

Oczywiście chodzi mi tutaj jedynie o pole czas_komentarz, lecz na wszelki wypadek pokazuję całość.


(batmomobil) #12

Masz rację problem był w tabeli czas_komentarz.Poprawiłem już działa,wielkie dzięki! !!