Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa unosom podataka u bazu

[es] :: MySQL :: Problem sa unosom podataka u bazu

[ Pregleda: 1680 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

KumRusvelt
Božidar Mirković
Beograd, Srbija

Član broj: 248295
Poruke: 18
*.dynamic.isp.telekom.rs.



Profil

icon Problem sa unosom podataka u bazu05.09.2010. u 19:07 - pre 166 meseci
Da li neko može da mi objasni koji su mogući tipovi greške u kucanju php skripte kad je u pitanju izrada Web str.
za registraciju korisnika.

Dakle ukrartko ću opisati problem:
Kada u browseru pre nego unesem u polja registracije, a da bih proverio da li se pojavljuju greške posle
pritiska na submit javlja se sledeće upozorenje:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in
C:\xampp\htdocs\sajta\registracija.php on line 60

A kada i pored toga unesem u polja registracije javla se pored gore pomenutog upozorenja i sledeće:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near '' at line 1

Može mi neko sugerisati u čemu ja grešim.

ovako izgleda tabla:

CREATE TABLE `moja_baza`.`korisnici` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ime` VARCHAR( 100 ) NOT NULL ,
`prezime` VARCHAR( 100 ) NOT NULL ,
`jmbg` BIGINT NOT NULL ,
`korisnickoime` VARCHAR( 100 ) NOT NULL ,
`sifra` VARCHAR( 100 ) NOT NULL ,
`email` VARCHAR( 100 ) NOT NULL ,
`ip` INT UNSIGNED NOT NULL ,
`pol` VARCHAR( 1 ) NOT NULL ,
`grad` VARCHAR( 100 ) NOT NULL ,
`postanskibroj` INT NOT NULL ,
`telefon` VARCHAR( 100 ) NOT NULL ,
`interesovanje` TEXT NOT NULL ,
`korisnickitip` ENUM( 'a', 'b', 'c' ) NOT NULL ,
`datumregistracije` DATETIME NOT NULL ,
`datumzadnjeposete` DATETIME NOT NULL ,
`emailaktivacija` ENUM( '0', '1' ) NOT NULL ,
UNIQUE (
`email`
)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Skripta za konekciju (connect_to_mysql.php) izgleda ovako
<?php
$db_host = "localhost";
$db_username = "root";
$db_pass = "";
$db_moja_baza = "moja_baza";
@mysql_connect("$db_host","$db_username","$db_pass") or die("Konekcija nije uspostavljena");
@mysql_select_db("$db_moja_baza") or die("Baza nije dostupna");
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");
?>


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Napomena: Pre ovoga ide filtriranje upotrebom stripslashes sa strip_tagom

//Konekcija na bazu podataka
require_once "scripts/connect_to_mysql.php";
$emailCHecker = mysql_real_escape_string($email1);
//U bazi podataka duplo podešavanje e-mail za potvrdu za upotrebu dole u korišćenju greškama, ako je email već ranije unet u bazu podataka.
$sql_email_check = mysql_query("SELECT email FROM korisnici WHERE email='$CHecker'");
$email_check = mysql_num_rows($sql_email_check);

//Greška rukovanje za podatke koji nedostaju
if ((!$ime) || (!$prezime) || (!$jmbg) || (!$pol) || (!$grad) || (!$postanskibroj) || (!$telefon) || (!$email1) || (!$email2) || (!$pass1) || (!$pass2)) {

$errorMsg = 'GREŠKA: Niste dostavili potrebne informacije:<br/><br/>';

if(!$ime){
$errorMsg .= ' *Ime<br/>';
}
if(!$prezime){
$errorMsg .= ' *Prezime<br/>';
}
if(!$jmbg){
$errorMsg .= ' *JMBG<br/>';
}
if(!$pol){
$errorMsg .= ' *Označite Pol<br/>';
}
if(!$grad){
$errorMsg .= ' *Označite Grad<br/>';
}
if(!$postanskibroj){
$errorMsg .= ' *Vaš poštanski broj<br/>';
}
if(!$telefon){
$errorMsg .= ' *Vaš telefon<br/>';
}
if(!$email1){
$errorMsg .= ' *Unesite email<br/>';
}
if(!$email2){
$errorMsg .= ' *Potvrdite email<br/>';
}
if(!$pass1){
$errorMsg .= ' *Unesite šifru<br/>';
}
if(!$pass2){
$errorMsg .= ' *Potvrdite šifru<br/>';
}

}else if ($email1 != $email2) {
$errorMsg = 'GREŠKA: Polje email adrese trebate popuniti<br/>';
}else if ($pass1 != $pass2) {
$errorMsg = 'GREŠKA: Polje šifre trebate popuniti<br/>';
}else if ($email_check > 0){
$errorMsg = "<u>GREŠKA:</u><br/> Email koji ste upisali se već nalazi u bazi podataka, molimo vas izaberite drugu email adresu<br/>";

}else {//Korišćenje Grešaka je završeno u obradi podataka i dodati Korisnike u bazu podataka
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa unosom podataka u bazu06.09.2010. u 02:19 - pre 166 meseci
Citat:
KumRusvelt: Da li neko može da mi objasni koji su mogući tipovi greške u kucanju php skripte kad je u pitanju izrada Web str.
za registraciju korisnika.


mislim da je pitanje za php forum a ne za mysql


Citat:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in


verovatno si uradio nesto tipa

...
$res = mysql_query(...)
$x = mysql_num_rows($res)
...

ono sto moras da uradis je moras da odma posle mysql_query proveris da li je $res rezultat ili ne (pogledaj sta vraca mysql_query u slucaju greske, hendluj tu gresku)

Citat:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the
right syntax to use near '' at line 1

Može mi neko sugerisati u čemu ja grešim.


gresis verovatno u tome sto ne radis escape ulaznih varijabli kako treba, opet, pitanje za php forum a ne za ovde posto ovo nema nikakve veze sa mysql-om ali pogledaj dobro sledece linkove:

http://php.net/manual/en/function.mysql-real-escape-string.php
http://php.net/manual/en/security.database.sql-injection.php
http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php
http://en.wikibooks.org/wiki/PHP_Programming/SQL_Injection


Citat:

Code:

$emailCHecker = mysql_real_escape_string($email1);
$sql_email_check = mysql_query("SELECT email FROM korisnici WHERE email='$CHecker'");
$email_check = mysql_num_rows($sql_email_check);



real_escape si dodelio promenjljivoj emailCHecker a u sql-u koristis CHecker ..

da, i da ne zaboravim, upit bi trebalo da bude

select count(*) from x where a=b;

umesto da radis select a... pa onda select num_rows ..



 
Odgovor na temu

KumRusvelt
Božidar Mirković
Beograd, Srbija

Član broj: 248295
Poruke: 18
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem sa unosom podataka u bazu07.09.2010. u 14:24 - pre 166 meseci
Rešeno:
Moja greška je bila ta što nisam ubacio kod za prepoznavanje naših slovnih karaktera
//Konekcija na bazu podataka
include_once "scripts/connect_to_mysql.php";
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");
 
Odgovor na temu

KumRusvelt
Božidar Mirković
Beograd, Srbija

Član broj: 248295
Poruke: 18
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem sa unosom podataka u bazu07.09.2010. u 15:03 - pre 166 meseci
Bogdane hvala na pomoći, tvoje sugestije su zlata vredne. Sada mi se javio drugi problem, u bazi podataka su ubačene sve zahtevane informacije osim jedne koja se odnosi na multiple list gde korisnik bira više od jedne opcije. Predpostavljam da grešim u izboru ponuđenih stavki gde sam se odlučio za tip VARCHAR(200)
dakle, predpostavljam da ako se pravilno podesi viđeno u redu bi stajale odabrane opcije odvojene zarezima, ali kolumna posle potvrde registracije je prazna.
Šta mi je valja činiti?
Unapred zahvalan!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa unosom podataka u bazu07.09.2010. u 17:45 - pre 166 meseci
Citat:
KumRusvelt:  predpostavljam da ako se pravilno podesi viđeno u redu bi stajale odabrane opcije odvojene zarezima, ali kolumna posle potvrde registracije je prazna.
Šta mi je valja činiti?


sada ti valja procitati nesto o normalizaciji database modela - pocni odavde: http://www.mysql.rs/2009/05/mo...e-baze-podataka-normalizacija/

zavrsices tako sto ces da imas dodatnu tabelu gde ces cuvati odabrane opcije
 
Odgovor na temu

KumRusvelt
Božidar Mirković
Beograd, Srbija

Član broj: 248295
Poruke: 18
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem sa unosom podataka u bazu11.09.2010. u 20:05 - pre 165 meseci
Bogdane, uradio sam posebnu tabelu kao što si mi sugerisao sa dve kolumne id(INT,usigned,AUTO_ICREMENT,PRIMARY KEY),
interesovanja(VARCHAR(255)), pa sam napravio internu relaciju između tabela, ali je problem ostao isti, dakle u
glavnoj tabeli mi se nepojavljuje rezultat.
Ispod <td><select name="ribarnice['M']" size="5" multiple="multiple" id="ribarnice['M']">zabio sam
kod:
<?PHP
$sql="SELECT * FROM ribarnice ORDER BY ribe ASC";
$result=mysql_query($sql);
while($ispisrez = mysql_fetch_array($result)){
?>
<option value="<?php echo $ispisrez['id']; ?>"><?php echo $ispisrez['ribe']; ?></option>
<?php
// zatvaranje while petlje
}
//zatvaranje konekcije
mysql_close($conn);
?>
Verovatno grešim u kodu, sobzirom da sam početnik kod za obradu multiple list mi je nepoznat.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Problem sa unosom podataka u bazu12.09.2010. u 03:25 - pre 165 meseci
kod deluje ok (ali je za onaj php forum a ne za ovde) .. valjda posle toga imas jedan </select> ... da li je onaj sql ok, nemam pojma vidi sta ti vraca, ne znam kakve veze ribe imaju sa userima pa ne bih da pogadjam

ono sto mogu da ti predlozim, posto si vec "pocetnik"
1. uvek radi proveru da li je upit izvrsen ok
2. koristi MySQLi konektor za php - http://php.net/manual/en/book.mysqli.php ... kada vec ucis, onda uci bolji konektor (ovaj stari ima dosta mana, ovaj novi je objektno orijentisan i mnogo bolji)

primer (sa php sajta):
Code (php):

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

/* Create table doesn't return a resultset */
if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
    printf("Table myCity successfully created.\n");
}

/* Select queries return a resultset */
if ($result = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
    printf("Select returned %d rows.\n", $result->num_rows);

    /* free result set */
    $result->close();
}

/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
if ($result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT)) {

    /* Note, that we can't execute any functions which interact with the
       server until result set was closed. All calls will return an
       'out of sync' error */

    if (!$mysqli->query("SET @a:='this will not work'")) {
        printf("Error: %s\n", $mysqli->error);
    }
    $result->close();
}

$mysqli->close();
?>
 


p.s. wow ala gadno izgleda php kod css na crnoj temi, mogao bi neko da uradi nesto po tom pitanju ... valjda ima neki moderator koji moze na to da utice
 
Odgovor na temu

[es] :: MySQL :: Problem sa unosom podataka u bazu

[ Pregleda: 1680 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.