DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   Problem: Error updating database (http://www.devprotalk.com/showthread.php?t=10072)

AdriaMart 23. 05. 2011. 13:38

Problem: Error updating database
 
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: :)

Kôd:

$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:

Kôd:

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

Kôd:

$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):
Kôd:

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

Citat:

Originalno napisao AdriaMart (Napišite 99199)
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


Vreme je GMT +2. Trenutno vreme je 22:00.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.