PDA

Pogčedajte punu verziju : Problem: Error updating database


AdriaMart
23. 05. 2011., 13:38
Imam ovaj kod:

$naslov = $data['nalsov'];


mysql_connect ("localhost", "baza", "lozinka") or die ('Error: '.mysql_error());
mysql_select_db ("mojabazar_mmm");

$query="INSERT INTO asd (ID, naslov)VALUES ('NULL','".$naslov."')";

mysql_query($query) or die ('Error updating database');
echo "Baza je updejtovana sa: " .$naslov. " ";

Gde je greska?

Br@nkoR
23. 05. 2011., 13:50
NULL nemoj stavljati pod jednostruke navodnike. Koristi mysql_error() da bi video grešku u upitu.

McKracken
23. 05. 2011., 14:34
Naslov se ne pise "nalslov" pa i tu imas verovatno problem

AdriaMart
23. 05. 2011., 16:31
Nije u tome problem... verovatno je nesto sa tipovima podataka... u svakom slucaju hvala na pronadjenim greskama u kodu.

mileusna
23. 05. 2011., 17:08
Koristi mysql_error() da vidiš koja je greška, ali evo ja ću ti pokušati i bez toga da ti pomognem: :)

$query="INSERT INTO asd (ID, naslov)VALUES ('NULL','".$naslov."')";

Predpostavljam da je ID neki numerik tip polja, integer i sl. tako da on može da prima samo brojeve a ti u njega upistuješ string tj. 'NULL'. NULL pod navodnicima ništa ne znači, to je običan string jer pod navodnicima MySQL ne interesuje da li si ti napisao 'NULL' ili 'PERA'.

Ako želiš da upušeš NULL vrednost u polje, onda upisuješ NULL bez navodnika, dakle ovo što ti je već @Br@nkoR predložio:


$naslov = mysql_real_escape_string($naslov);
$query="INSERT INTO asd (ID, naslov) VALUES (NULL, '$naslov')";

Sve to naravno pod uslovom da polje ID može da bude NULL.

Druga moguća stvar je što nisi uradio eskejp stringa $naslov. Recimo ako je naslov Nemo' da me zavritlavaš bez eskejpovanja MySQL upit će sadržati 'Nemo' da me zavritlavaš' i zbog ovih rasparenih navodnika upit puca. Navodnici su samo jedan primer, preskakanje ovog koraka dovodi do mnogih zloupotreba i rupa u bazi podatak. Zato sve stringove koji se upisuju u bazu obavezno na escape prvo.

AdriaMart
23. 05. 2011., 17:29
Pokusao sam nesto preko phpmyadmin-a i upravu si, evo sta kaze: Column 'ID' cannot be null ... e sad zasto column 'ID' nemoze da bude null zaista neznam... da li da stavim npr. $i=0 pa da se $i svaki put uvecava za 1... ?

mileusna
23. 05. 2011., 17:35
Zato što je verovatno u strukturi baze naglašeno NOT NULL :) Vrlo je moguće da je ID AUTO_INCREMENT, ako nije, napravi ga da bude (može sve iz phpMyAdmin). Onda MySQL sam vodi računa o dodeljivanju ID-ja redom, a ti samo upisujše naslov, recimo.

$naslov = mysql_real_escape_string($naslov);
$query="INSERT INTO asd (naslov) VALUES ('$naslov')";
$new_id = mysql_insert_id(); // ovde vidi koji ID je mysql dodelio novom slogu

Funcijom mysql_insert_id() dobićeš ID koji je MySQL dodelio poslednje upisanom slogu.

Moraćeš malo da savladaš osnove baza podataka i MySQL-a, jbg...

AdriaMart
23. 05. 2011., 17:43
Da, moracu ... ucim ... davno sam radio u programskom jeziku delphi 7 i baze pa mi je znanje iz ovog jako slabo, a i poprilicno je drugacije raditi u php-u...

Da to je bio problem jer polje ID nije bilo niti NULL niti auto_increment...

Thanks for HELP!

AdriaMart
23. 05. 2011., 23:36
Potrebno je da u bazu upisem sledci broj 20.456788 pa me interesuje koji tip podataka da koristim?

webarto
23. 05. 2011., 23:39
FLOAT... i možeš pisati ovako ne moraš duplirati varijable... $query="INSERT INTO asd (ID, naslov)VALUES ('$data[naslov]')";

ivanhoe
24. 05. 2011., 00:48
^ tako kako si napisao ne moze definitivno, ima ID viska..


a mislim kad se zna koliko ti max. decimala treba da je bolje koristiti DECIMAL tip, float zna da bude nezgodan zbog greske zaokruzivanja...

webarto
24. 05. 2011., 01:25
To ID se postavi PRIMARY A_I i nema potrebe ga upisivati ovako, ili NULL ili šta već, ja sam samo kopirao, zaboravio iz VALUES da izbacim. Može i DECIMAL... mislim da su koordinate u pitanju...

AdriaMart
24. 05. 2011., 01:34
Meni ovako kako sam napisao radi super... ID polja je onoliko koliko treba... hoce li biti problema ako se broj upise kao VARCHAR tip?

ivanhoe
24. 05. 2011., 04:00
nemas neki poseban problem, ali trosis znacajno vise prostora, index je veci, radi sporije... a i moze da bude problem ako treba da obavis neku matematicku operaciju na tom polju...

Shelle
24. 05. 2011., 11:35
A jel možeš da mi kažeš zbog čega u ID upisuješ NULL???
Pošto meni to nikako, ali nikako nije jasno.... :1018:

Br@nkoR
24. 05. 2011., 12:05
Kolona ID je označena kao AUTO_INCREMENT,a to znači da će MySQL automatski generisati i uneti sledeći broj, ukoliko se unese vrednost NULL ili bez vrednosti, u to polje.

Shelle
24. 05. 2011., 12:32
Aham...
Nisam to znao...
Uvek sam upisivao prazan string, i nikad nisam video da neko upisuje NULL...
Logično je...
Hvala...

AdriaMart
24. 05. 2011., 12:42
U polje naslov koje je tipa TEXT sta da unesem da bi se slova sa kvacicama prikazivala onako kako treba... nemoze se izabrati samo utf8 vec neke kombinacja (npr.utf-bin,general i sl) medju kojima nema srpskih...

webarto
24. 05. 2011., 12:51
Treba UNICODE i VARCHAR, ne TEXT...

Br@nkoR
24. 05. 2011., 12:56
utf8_general_ci

Shelle
24. 05. 2011., 13:21
Tip: VARCHAR
Sortiranje: utf8_general_ci (i polje i tabela)
Ali i PHP strana mora da ti bude UTF-8...

Br@nkoR
24. 05. 2011., 13:38
A takođe treba obratiti pažnju i na podešavanja servera (apache):
AddDefaultCharset utf-8

AdriaMart
24. 05. 2011., 14:31
Jel AddDefaultCharset utf-8 treba da stavim u .htacces file ili ? STo se tice strane ona je utf8 i sve ide glatko sto se toga tice.

mileusna
24. 05. 2011., 14:37
Jel AddDefaultCharset utf-8 treba da stavim u .htacces file ili ? STo se tice strane ona je utf8 i sve ide glatko sto se toga tice.

Za web strane dovoljno je da koristiš meta tagove u HTML koji govore da je strana UTF8 enkodirana.

Bitan segment je komunikacije MySQL klijenta (u tvom slučaju skripta) sa MySQL serverom i bazom za koju si već podesio da je UTF8. Pogledaj MySQK SET NAMES komandu.

AdriaMart
25. 05. 2011., 00:04
Sta moze da bude greska ako se pojavi ovo prilikom eksporta mysql-a u xml :
error on line 50 at column 3: Extra content at the end of the document
inace linija 50 je poslendja linija koda i zatvara php