offline
- LDragan
- Novi MyCity građanin
- Pridružio: 01 Jul 2010
- Poruke: 3
|
Napisano: 01 Jul 2010 20:44
Skripta je podugacka, ali evo detaljnije cu opisati kako radi i delove koda koji bi mogli biti problematicni.
Radi se o skripti kojom vrsim uclanjenje novih clanova u jedan klub. Kada posetilac popuni pristupnicu podaci iz te forme se upisuju u privremenu bazu (tablicu). Nakon toga ja pomocu sporne skripte vrsim prepis tih podataka u stalnu MySQL tablicu, generisem lozinku te vrsim UPDATE na prepisani slog i na kraju saljem email sa korisnickim imenom i lozinkom.
if ($_GET['action'] == "COPY") {
uclani($_GET['slog'],$_GET['znak']);
}
elseif ($_GET['action'] == "DELETE") {
obrisi($_GET['slog']);
}
elseif ($_GET['action'] == "KRAJ") {
mysql_close($db);
die("<br> ZATVARAM BAZU !!!");
}
Prepis i update vrsim u funkciji uclani().
function uclani($brojID,$znak) {
/* ovde pozvati funkciju za generisanje KORISNICKOG IMENA i LOZINKE
i funkciju koja salje EMAIL sa cestitkom uputstvom za Logiranje i podacima korisnicko ime i lozinku i napomena da to moze promeniti u PROFILI
*/
$sql = "SELECT * FROM klub_tmp WHERE id='$brojID'";
if (!$q=mysql_query($sql)) {
echo "Greška u izvršenju upita - uclani - SELECT klub_tmp!!!"; // greska u izvrsenju upita
die();
}
$red = mysql_fetch_array($q);
/* zatim prebacim podatke u varijable te vrsim prepis */
$upis_login = "INSERT INTO login (nadimak,email,status,broj_f,pitanje,odgovor,datum_u,ip_u)
VALUES ('$nadimak','$email','$status','$broj','$pitanje','$odgovor','$datum_u','$ip_u')";
if ($q1 = mysql_query($upis_login)) {
echo "<br> Uspešno izvršen - INSERT login!!!"; // greska u izvrsenju upita
}
else {
echo "Greška u komunikaciji sa bazom - INSERT login!!!"; // greska u izvrsenju upita
die();
}
$citaj_login = "SELECT * FROM login WHERE nadimak='$nadimak'";
if ($log=mysql_query($citaj_login)) {
$red2 = mysql_fetch_array($log);
$id_clana = $red2['id'];
}
else {
echo "Greška u izvršenju upita - SELECT login !!!"; // greska u izvrsenju upita
die();
}
/* upis u tablicu foto */
$tip = "1";
$javnost = "4";
$upis_foto = "INSERT INTO foto (id,foto,opis,tip,javnost) VALUES ('$id_clana','$foto','$opis_f','$tip','$javnost')";
if ($f = mysql_query($upis_foto)) {
echo "<br> Uspešno izvršen - INSERT u foto!!!"; // greska u izvrsenju upita
}
else {
echo "<br> Greška u izvršenju upita - INSERT u foto!!!"; // greska u izvrsenju upita
die();
}
/* upis u klub */
$upis_klub = "INSERT INTO klub (id,ime,prezime,spol,brak,seks,mesto_s,drzava_s,zanimanje,vera,im,web,profil,datum_r,sat_r,mesto_r,drzava_r)
VALUES ('$id_clana','$ime','$prezime','$spol','$brak','$seks','$mesto_s','$drzava_s','$zanimanje','$vera','$im','$web','$profil','$datum_r','$sat_r','$mesto_r','$drzava_r')";
mysql_query($upis_klub);
/* UPDATE login (kor_ime i lozinka) i klub (znak) tablica */
$uslov = 0;
while ($uslov == 0) {
$x = rand(100,999);
if (strlen($ime) >= 5) {
$user = substr($ime, 0,5);
$kor_ime = $user . $x;
}
else {
$kor_ime = $ime . $x;
}
$sql_upit = "SELECT * FROM login WHERE kor_ime='$kor_ime'";
if (!$uq = mysql_query($sql_upit)) {
echo "Greška u komunikaciji sa bazom, nisu upisani kor_ime, lozinka (login) i znak (klub) i nije poslan email!!!"; // greska u izvrsenju upita
die();
}
if (mysql_num_rows($uq) == 0) { // generisano kor_ime je slobodno
$uslov = 1;
}
}
/* generisanje lozinke i UPDATE login */
$lozinka = lozinka_gen();
$azur = "UPDATE login SET kor_ime='$kor_ime', lozinka='$lozinka' WHERE id='$id_clana'";
if ($uqu = mysql_query($azur)) {
echo "<br> Uspešno - UPDATE login kor_ime, lozinka poslan je email!!!"; // greska u izvrsenju upita
}
else {
echo "Greška u komunikaciji sa bazom - UPDATE login kor_ime, lozinka i nije poslan email!!!"; // greska u izvrsenju upita
die();
}
/* UPDATE polja znak u tablici klub */
$azur1 = "UPDATE klub SET znak='$znak' WHERE id='$id_clana'";
if ($uq1 = mysql_query($azur1)) {
echo "<br> Član $nadimak je uspešno učlanjen!!!";
}
else {
echo "Greška u komunikaciji sa bazom - UPDATE klub (znak) i nije poslan email!!!"; // greska u izvrsenju upita
die();
}
/* zatim ide slanje emaila i kraj funkcije */
return;
} // kraj funkcije uclani()
Problem je sto u tablici login dobijem slog sa upisanim svim podacima i jos jedan slog u kojem budu upisani svi podaci osim korisnickog imena i lozinke te u ta polja bude upisano NULL.
U tablici foto (podaci o upload fotografiji) u 99 % slucajeva dobijem duplirani slog.
To mi stvara problem jer nakon svakog uclanjenja moram brisati duple slogove i menjati novu vrednost za id jer mi je to autoincrement polje.
Dopuna: 01 Jul 2010 20:53
Mislim da su uslovi za update ok jer mi se slican problem povremeno pojavljuje i u drugim skriptama samo mnogo redje. U nekim skriptama dupliranje slogova (nema update-a vec samo obican upis novog sloga) se desava otprilike u 5% slucajeva, a ostalih 95% bude sve ok.
Da li problem moze biti u serveru na kojem je hostan sajt, ako ima previse sajtova prema hardware-skom potencijalu (memoriji) pa recimo izvrsi upis u MySQL na zahtev iz skripte i jos jednom po izlasku iz skripte kada prazni buffer za MySQL.
|