|
[ Psyche @ 06.03.2006. 20:44 ] @
| Imam podatke koji se sa forme prosledjuju u bazu pri cemu se vrsi simultani upis u dve tabele, jer deo odlazi u jednu deo u drugu.
Forma izgleda ovako:
Code:
Na vrhu dokumenta:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
?>
<form method=POST action="podaci.php">
Godina studija:
<select name="godina">
<option></option>
<option value="1">prva</option>
<option value="2">druga</option>
<option value="3">treca</option>
<option value="4">cetvrta</option>
</select>
Prosecna ocena tokom dosadasnjeg studiranja:
<input name="ocena" type="text" size="4" maxlength="5">
Pol:
<input name="pol" type="radio" value="1"> zenski
<input name="pol" type="radio" value="2"> muski
1. Kako procenjujete svoju umesnost rada na racunaru:
<input name="p1" type="radio" value="1"> gotovo nikakva
<input name="p1" type="radio" value="2"> slaba
<input name="p1" type="radio" value="3"> zadovoljavajuća
<input name="p1" type="radio" value="4"> solidna
<input name="p1" type="radio" value="5"> izuzetna
itd... (jos 30-ak pitanja)
na kraju (nije obavezno za popunjavanje):
<textarea name="komenatar" cols="75" rows="10" wrap="PHYSICAL" id="komenatar"></textarea>
Onda imam ovo:
Code:
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");
@mysql_select_db("$DBName") or die("Unable to select database $DBName");
$sql1 = "INSERT INTO anketa1 (rb, odeljenje, godina, ocena, pol, p1, p2, p3, p4, p5a, p5b, p5c, p5d, p5e, p6, p7, p8, p9, p10,
p11a, p11b, p11c, p11d, p11e, p12, p13, p14, p15, p16a,
p16b, p16c, p16d, p16e, p16f, p16g, p16h, p16i, p16j, p16k) VALUES('', '$godina', '$ocena', '$pol', '$p1', '$p2', '$p3', '$p4', '$p5a', '$p5b', '$p5c',
'$p5d', '$p5e', '$p6', '$p7', '$p8', '$p9', '$p10', '$p11a', '$p11b', '$p11c', '$p11d', '$p11e', '$p12', '$p13', '$p14', '$p15', '$p16a', '$p16b', '
$p16c', '$p16d', '$p16e', '$p16f', '$p16g', '$p16h',''$p16i', '$p16j', '$p16k')";
$rezultat1 = mysql_query($sql1);
$sql2 = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '$ip', '$komentar')";
$results2 = mysql_query($sql2);
mysql_close();
print "<html>
Spajanje sa bazom je OK, a i sve ostalo. Medjutim, od podataka se upise samo vreme funkcijom NOW. IP i komentar ostanu prazni, a u prvu tabelu - anketa1 uopste ne doda slog.
Gde gresim?
Takodje, sta se desava u sluajevima da neko ne odgovori na sva pitanja. npr postoji blok pitanja na koji se daje odgovor samo ako se na prethodno pitanje odgovorilo sa DA, dok u suprotnom nista se ne cekira.
Pitanja su sva po principu radio buttons.
Struktura je takva iz razloga sto ce se podaci iz tabele anketa1 kasnije eksportovati u SPSS, pa za svakog ispitanika (red tabele) moram da imam odgovore na pitanjima-varijablama (kolone)
[Ovu poruku je menjao Psyche dana 06.03.2006. u 21:50 GMT+1] |
[ SmilieBG @ 06.03.2006. 23:29 ] @
Just a wild guess, u php.ini stoji:
register_globals = Off
U tom slucaju moras da koristis:
$_GET['varijabla'] a ne $varijabla.
Testiraj sa:
echo "without get: ".$varijabla;
echo "<br>";
echo "with get: ".$_GET['varijabla'];
Poz,
Sale
ps. naravno, echo $sql; uvek pomaze :)
[ Psyche @ 07.03.2006. 09:04 ] @
Nije, dobijam:
without get: 5
with get:
Nesto drugo je u pitanju, ali nemam ni najmanju ideju sta. Da li mi je dobar query?
Tabele izgledaju ovako:
Code:
anketa1
(
`rb` int(11) NOT NULL auto_increment,
`odeljenje` tinyint(4) NOT NULL default '0',
`godina` tinyint(4) NOT NULL default '0',
`ocena` varchar(5) character set utf8 NOT NULL default '',
`pol` tinyint(4) NOT NULL default '0',
`p1` tinyint(4) NOT NULL default '0',
`p2` tinyint(4) NOT NULL default '0',
`p3` tinyint(4) NOT NULL default '0',
`p4` tinyint(4) NOT NULL default '0',
`p5a` tinyint(4) NOT NULL default '0',
`p5b` tinyint(4) NOT NULL default '0',
`p5c` tinyint(4) NOT NULL default '0',
`p5d` tinyint(4) NOT NULL default '0',
`p5e` tinyint(4) NOT NULL default '0',
`p6` tinyint(4) NOT NULL default '0',
`p7` tinyint(4) default '0',
`p8` tinyint(4) default '0',
`p9` tinyint(4) NOT NULL default '0',
`p10` tinyint(4) default '0',
`p11a` tinyint(4) default '0',
`p11b` tinyint(4) default '0',
`p11c` tinyint(4) default '0',
`p11d` tinyint(4) default '0',
`p11e` tinyint(4) default '0',
`p12` tinyint(4) default '0',
`p13` tinyint(4) NOT NULL default '0',
`p14` tinyint(4) NOT NULL default '0',
`p15` tinyint(4) NOT NULL default '0',
`p16a` tinyint(4) NOT NULL default '0',
`p16b` tinyint(4) NOT NULL default '0',
`p16c` tinyint(4) NOT NULL default '0',
`p16d` tinyint(4) NOT NULL default '0',
`p16e` tinyint(4) NOT NULL default '0',
`p16f` tinyint(4) NOT NULL default '0',
`p16g` tinyint(4) NOT NULL default '0',
`p16h` tinyint(4) NOT NULL default '0',
`p16i` tinyint(4) NOT NULL default '0',
`p16j` tinyint(4) NOT NULL default '0',
`p16k` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`rb`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
anketa2
(
`rb` int(11) NOT NULL auto_increment,
`ip` varchar(50) character set utf8 NOT NULL default '',
`vreme` datetime NOT NULL default '0000-00-00 00:00:00',
`komentar` text character set utf8 NOT NULL,
PRIMARY KEY (`rb`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Mozda nisam dobro definisala polja. Sem ocene, sva ostala imaju predefinisane vrednosti. Sta vi predlazete?
odeljenje 1-9 (sifre), godina (1-4), p1 itd vrednosti tipa 1-pa nadalje itd.
Na pitanja 7, 8, 10, 11, 12 odgovaraju samo neki studenti, dok na ostala svi daju odgovor.
[Ovu poruku je menjao Psyche dana 07.03.2006. u 10:24 GMT+1]
[ stefaneg @ 07.03.2006. 09:23 ] @
Jedna stvar mi nije baš najjasnija: Pričaš o GET promenljivama a prosleđuješ ih preko method="POST". Možda si samo pogrešno prekucala (prekopirala) kod u prvoj poruci, pošto posle kažeš da ti URL izgleda tako kako izgleda... Nisam siguran da li ovo ima veze, ali ja ovek pri unosu u bazu, ako ne proveravam ispravnost sadržaja, radim: (tvoj primer)
Code:
$podaci = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '{$_GET[ip]}', '{$_GET[komentar]}')";
mysql_query($podaci);
Znači sa vitičastim zagradama
[Ovu poruku je menjao stefaneg dana 07.03.2006. u 10:48 GMT+1]
[ Psyche @ 07.03.2006. 09:27 ] @
Probala sam sve moguce kombinacije i GET i POST i u okviru forme i querija itd. Sa viticastim jos nisam ali svejedno mi sa get nista ne stampa.
I vidim da mi ne kupi IP uopste? Sta sam tu zabrljala. Komentar je OK, pogresila sam u imenu polja, ali u prvu tabelu se nista ne upise i dalje. Jel moze onako da ide upis kako sam ja stavila:
Code:
$anketa = "INSERT INTO anketa1 (rb, odeljenje, godina, ocena, pol, p1, p2, p3, p4, p5a, p5 ,...) VALUES('', ....)";
mysql_query($anketa);
$podaci = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '$ip', '$komentar')";
mysql_query($podaci);
u ovakvoj formi?
[Ovu poruku je menjao Psyche dana 07.03.2006. u 10:40 GMT+1]
[ stefaneg @ 07.03.2006. 09:40 ] @
Hajde prosledi celu skriptu... I proveri koja je verzija PHP.a. Ispod 4.1 ne radi sa skraćenim verzijama ($_GET['varijabla']) već sa produženim ($HTTP_GET_VARS['varijabla']) a iznad 4.2 ne radi sa $varijabla. Ukoliko su setovanja tipična
[ Psyche @ 07.03.2006. 10:00 ] @
PHP version 4.3.11
MySQL version 4.1.13-standard-log
$podaci = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '$ip', '$komentar')";
Ovo umetne redni broj, vreme i komentar. Ip mi se uopste ne pokupi, tako da ne moze ni da ga upise. A belezim ga u index.php (stranica sa formom za anketu) pomocu:
<?
$ip = $_SERVER['REMOTE_ADDR'];
?>
Vrednosti koje bi trebalo da se upisuju u tabelu prvu se takodje odstampaju naredbom echo "without get: ".$varijabla;
ali se ne unose u tabelu, nista se ne desava!
[ stefaneg @ 07.03.2006. 10:13 ] @
<?
$ip = $_SERVER['REMOTE_ADDR'];
?>
Ako ovo stavljaš u prvoj skripti, i ne prosleđuješ vrednost promenljive $id preko nekog hidden polja u formi onda je logično da ti ne upisuje vrednost ove promenljive, pošto se ona gubi pošto se skripta završi. Staviš ovo na početku druge stranice i efekat će biti isti (mislim, ista će biti ip adresa), ali ćeš u odgovarajućoj skripti definisati $ip.
A tražio sam ti da proslediš celu skriptu kao attachment zato što je (sad već gldeam u pasulj) vrlo moguće da samo imaš neku grešku u sql sintaksi, a podešavanja su možda takva da ne prijavljuje greške, ukoliko postoje
Ovo mi je rekla kugla :)
[ sale83 @ 07.03.2006. 10:34 ] @
Vidi ovo:
Code:
''$p16i', // Viska je ' tako da INSERT nece ni da radi ako imas jedan ' viska - //nije ispravan query
'$p16j',
'$p16k'
)";
$rezultat1 = mysql_query($sql1);
Drugo:
Onda posle $sql1 = "INSERT INTO anketa1 (
imas 39 vrednosti
Dok posle VALUES(
imas 37 varijabli + ' ' -> koja predstavlja rb - primarni kljuc !
Znaci ovde posle VALUES fali jedna varijabla !!!!
[Ovu poruku je menjao sale83 dana 07.03.2006. u 11:38 GMT+1]
[ Dejan Topalovic @ 07.03.2006. 10:35 ] @
Citat: $podaci = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '$ip', '$komentar')";
Cini mi se da ovdje imas gresku...
Trebalo bi da bude:
Code: $podaci = "INSERT INTO anketa2 (rb, vreme, ip, komentar) VALUES('', NOW(), '". $ip ."', '". $komentar ."')";
[ Psyche @ 07.03.2006. 17:03 ] @
Eh, glupe greske i moji previdi, grrrrrrr. Sada sve radi bas kako treba. Hvala svima mnogo, jutros sam bila u zurbi.
Samo jos jedno pitanje.
Ovako, anketu ce da popunjava dvadesetak ljudi odjednom iz racunarske ucionice na faxu. Mreza je napravljena po princpu terminala. Moze li to da bude neki problem?
Inace, ja sam testirala i radi ok, ali da li moze da teoretski nastane neki problem ako vise ljudi odjednom salje svoje podatke :)
[Ovu poruku je menjao Psyche dana 07.03.2006. u 18:29 GMT+1]
[ Dejan Topalovic @ 07.03.2006. 20:48 ] @
@Psyche: Teoretski je moguce, a prakticno su male sanse...
Da bi smanjila i tu teoretsku mogucnost konflikta sa podacima, moras koristiti tzv. connection handlere u svojim MySQL komandama.
Dakle, umjesto mysql_connect($dbhost, $dbuser, $dbpass) or die ..., koristi ovako:
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ...
Zatim, umjesto mysql_query($podaci), koristi:
$result = mysql_query($podaci, $conn);
i onda checkirash $result...
Btw. ovo su ti sve osnovne stvari...
[Ovu poruku je menjao Dejan Topalovic dana 07.03.2006. u 21:48 GMT+1]
[ zrnoo @ 08.03.2006. 00:06 ] @
jedno bezvezno (za one koji znaju ) pitanje...
NA pocetku forme kada je onda postavila php kod ...
<?
$ip = $_SERVER['REMOTE_ADDR'];
?>
Da li to znaci da je sada do kraja cele forme to $ip vidljivo ako ga pozovemo nekim drugim putem!....npr kako bi vi sada napisali u formi , da to $ip prosledite, i da li je ovo dobar primer:
<input type="hidden" name="ip" value="<?php echo $_POST['ip']; ?>">
poz
[ inzenjer2005 @ 08.03.2006. 09:34 ] @
Ovako bih ja slao IP preko neke forme sa POST:
<input name="ip" type="hidden" value="<?php echo"$ip";?>">
A ovako bih ga prihvatao na sledecoj strani:
$ip=$HTTP_POST_VARS['ip'];
[Ovu poruku je menjao Tanaskovic Vojislav dana 08.03.2006. u 10:35 GMT+1]
[ Psyche @ 08.03.2006. 16:39 ] @
Kada je nas fax u pitanju, verujem u Marfijev zakon...
Znam da su osnovne stvari i da ne baratam najbolje materijom (tj. nikako) ali otprilike da se kod nas sve radi pomocu stapa i kanapa. Mnogi programi su sa novom mrezom prestali da funkcionisu.
Izvini, ali sta znaci to cekiras $rezultat.
I kako da sprecim da mi se sa refresovanjem strane podaci.php ili direktnim odlaskom na nju upise slog koji se sastoji samo od nula.
Eto, obecavam da necu vise da pitam nista na ovu temu :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|