DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   Gde je greska? (http://www.devprotalk.com/showthread.php?t=9318)

slavkan 06. 11. 2010. 22:54

Gde je greska?
 
Znaci ubih se 2h da nadjem gresku. Sto je jos tuznije ovo u lokalu radi ali na serveru nece. Kopiram fajl iz lokala samo promenima parametre znaci naziv baze, korisnicko ime password i posle sabmitovanja forme ne dobijem nikakvu informaciju sa kraja forme. Znaci nema gresaka, forma kao prodje, ali nema tog obavestenja da sam uspesno registrovao diplomca i naravno nema zapisa u bazi. Znaci ne upise se nista :1007: Ako neko zna u cemu je fora bio bih mu zahvalan

Kôd:

<?php
                        //konekcija na bazu
                        mysql_connect("localhost", "root", "") or die(mysql_error());
                        mysql_select_db("fakultet") or die(mysql_error());
                        $forma='<form action="'.$_SERVER['PHP_SELF'].'" method="post">
                        <table border="0">
                        <div class="post">
                        <h2>Osnovni podaci</h2>
                        <p></p>
                        </div>
                        <tr><td>Ime diplomca:*</td><td>
                        <input type="text" name="ime" maxlength="35">
                        </td></tr>
                        <tr><td>Prezime diplomca:*</td><td>
                        <input type="text" name="prezime" maxlength="35">
                        </td></tr>
                        <tr><td>Korisnicko ime:*</td><td>
                        <input type="text" name="korime" maxlength="35">
                        </td></tr>
                        <tr><td>Sifra:*</td><td>
                        <input type="password" name="password" maxlength="35">
                        </td></tr>
                        <tr><td>Ponovi sifru:*</td><td>
                        <input type="password" name="password2" maxlength="35">
                        </td></tr>
                        <tr><td>E-mail:*</td><td>
                        <input type="text" name="email" maxlength="35">
                        </td></tr>
                        <tr><td>Adresa stanovanja:*</td><td>
                        <input type="text" name="adresa" maxlength="55">
                        </td></tr>
                        <tr><td>Telefon:*</td><td>
                        <input type="text" name="telefon" maxlength="15">
                        </td></tr>
                        <tr><td>Tip korisnika:*</td><td>
                        <select name="tip">
                        <option value="A">Administrator
                        <option value="K" selected>Korisnik
                        </select>
                        </td></tr>
                        <tr><td>Status zaposlenosti:*</td><td>
                        <select name="status">
                        <option value="zaposlen">Zaposlen
                        <option value="nezaposlen" selected>Nezaposlen
                        </select>
                        <tr><th colspan=2><input type="submit" name="submit" value="Registracija"></th></tr>
                        <tr><th colspan=2><input type="reset" name="reset" value="Resetovanje"></tr></td></table>               

                        </form> ';
                        //Proveravamo da li je korisnik pritisnuo submmit
                        if (isset($_POST['submit'])) {
                                $error='';
                               
                        //Provera da li je korisnik popunio polja
                        if (!$_POST['ime'] | !$_POST['prezime'] | !$_POST['korime'] | !$_POST['password'] | !$_POST['email'] | !$_POST['adresa'] | !$_POST['telefon']){
                                $error .= '<li>Niste popunili sva polja</li>';
                                }

                        // Provera da li je username u upotrebi
                        if (!get_magic_quotes_gpc()) {
                                $_POST['korime'] = addslashes($_POST['korime']);
                        }
                        $usercheck = $_POST['korime'];
                        $check = mysql_query("SELECT KOR_IME FROM DIPLOMCI WHERE kor_ime = '$usercheck'")
                        or die(mysql_error());
                        $check2 = mysql_num_rows($check);

                        //Ako korisnicko ime postoji u bazi ispisujemo gresku
                        if ($check2 != 0) {
                                $error .= '<li>Greska, username koji ste unijeli '.$_POST['korime'].' je u upotrebi.</li>';
                        }

                        // Ispitujemo da li su uneti passwordi isti
                        //if ($_POST['password'] != $_POST['password2']){
                        //        $error .= '<li>Niste unijeli iste passworde.</li>';
                        //}

                        //Provera da li je unijeta e-mail adresa ispravna
                        if (!eregi('^[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]', $_POST['email'])){
                                $error .= '<li>Uneta email adresa nije ispravna</li>';
                        }

                        if (!eregi('[0-9]', $_POST['telefon'])){
                                $error.= '<li>Pogresno ste unijeli format telefona</li><ul>';
                        }

                        // Vrsimo kriptovanje sifre md5 algoritmom
                        $_POST['password'] = md5($_POST['password']);
                        if (!get_magic_quotes_gpc()) {
                                $_POST['password'] = addslashes($_POST['password']);
                                $_POST['korime'] = addslashes($_POST['korime']);
                        }
                        if($error=='')
                        {
                                //Upisivanje u bazu
                                $activactionkey=md5(rand());
                               
                                $datumreg=date("Y-m-d");
                                $tip=$_POST['tip'];
                                $ime=$_POST['ime'];
                                $prezime=$_POST['prezime'];
                                $korime=$_POST['korime'];
                                $password=$_POST['password'];
                                $adresa=$_POST['adresa'];
                                $email=$_POST['email'];
                                $status=$_POST['status'];
                                $telefon=$_POST['telefon'];
                                $korime=mysql_real_escape_string($korime);
                                $insert = "INSERT INTO diplomci (TIP,IME,PREZIME,ADRESA,EMAIL,KOR_IME,SIFRA,STATUS,DATUM_REG,ACTIVACTIONKEY,AKTIVIRAN)
                                VALUES ('".$tip."','".$ime."','".$prezime."','".$adresa."','".$email."','".$korime."','".$password."', '".$status."','".$datumreg."','".$activactionkey."','1')";
                                $add_member = mysql_query($insert);
                                        if($add_member)
                                        {
                                                $forma = "<h2>Uspjesno ste registrovali diplomca</h2><p>Popunite i ostale podatke o diplomcu</a>.</p> ";
                                        }
                                } else
                                {
                                        echo "Javile su se sljedeće greske <ul>".$error."</ul>";
                                }
                               
                               
                        }
                        echo $forma;
                       
                        $to = $_POST['email'];
                      $subject = "Potvrdite vasu registraciju";
                      $message = "Dobrodosli na nas sajt!\r\rVi ili neko drugi koristi ovu email adresu da se registruje. Mozete se registrovati klikom na sljedeci link:\r http://www.mojsajt.info/act.php?activactionkey=$activactionkey\r\rAko ste ovaj mail dobili greskom ignorisite ga i bicete automatski izbrisani sa liste.\r\r mojsajt.info";
                                                $headers  = 'MIME-Version: 1.0' . "\r\n";
                                                $headers .= 'Content-type: text; charset=iso-8859-1' . "\r\n";
                      $headers .= 'Aktivacija' . "\r\n";
                      $headers .= 'From: webmaster@example.com' . "\r\n" ;
                          mail($to, $subject,$message,$headers);
                       
                        ?>


vladapopster 06. 11. 2010. 23:12

Proveri log
 
Jel ti javlja neku gresku u PHP error logu?

razno 06. 11. 2010. 23:14

Mislim da ti ovo vraca FALSE i zato ti forma prolazi bez greske
Kôd:

$insert = "INSERT INTO diplomci (TIP,IME,PREZIME,ADRESA,EMAIL,KOR_IME,SIFRA,STATUS,DATUM_REG,ACTIVACTIONKEY,AKTIVIRAN)
                                VALUES ('".$tip."','".$ime."','".$prezime."','".$adresa."','".$email."','".$korime."','".$password."', '".$status."','".$datumreg."','".$activactionkey."','1')";
                                $add_member = mysql_query($insert);

prepravi u
Kôd:

$insert = "INSERT INTO `diplomci` (`TIP`,`IME`,`PREZIME`,`ADRESA`,`EMAIL`,`KOR_IME,SIFRA`,`STATUS`,`DATUM_REG`,`ACTIVACTIONKEY`,`AKTIVIRAN`)
                                VALUES ('$tip','$ime','$prezime','$adresa','$email','$korime','$password', '$status','$datumreg','$activactionkey','1')";
                                $add_member = mysql_query($insert);

- Koliko vidim oslanjas se na magic_quotes_gpc prilikom inserta sto je lose, koristi kastovanje(cast) kod int vrednosti i mysql_real_escape_string() za stringove
- Korisnicko ime eskejpujes dva puta
- Umesto md5 bolje koristi recimo sha1 za kriptovanje sifre
- Kada kriptujes sifru nemas vise razloga da je eskepujes jer je povratna vrednost sacinjena samo od slova i brojevi

ima jos neke sitnice ali mi je ovo upalo u oko :)

slavkan 06. 11. 2010. 23:53

Prepravio i opet isto, jasno je da nesto INSERT naredba ne stima ali nece da prodje ni sa ovim navodnicima. Sto se tice error loga nema nista, mislim nema obavestenja vezano za ovaj upit. Ovo ostalo cu da prepravim ali sta mi vredi kad ne moze da se upise u bazu :1004:

Milance 07. 11. 2010. 00:43

Ne vidim gde printas $error ako greska postoji?!

Insert ti se izvrsava samo pod uslovom da nema greske a gresku ne stampas nigde pa ti se cini da je sve u redu, a ocigledno nije.

vidak 07. 11. 2010. 00:59

Kako uspevaš da se kao root pristupaš bazi na serveru. Imaš svoj VPS, VDS?

ubaci ovo
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_starup_errors', 1);

i jednostavno probaj da deo po deo puštaš npr prvo echo $forma, pa da vidiš koji ti deo ne prolazi. Pa kad nađeš deo koji ne prolazi, njega izdeliš na delove ili pregledaš ...

slavkan 07. 11. 2010. 02:22

Greske valjda stampam ovde:

Kôd:

echo "Javile su se sljedeće greske <ul>".$error."</ul>";
A to za user i pass, to sam ja stavio tek onako, uredno ja postavim tu sve parametre, jer znas kad ne podesis to oko pass i usera izbaci ti odmah gresku, znaci ja vidim tu moju formu, provera gresaka radi tj recimo ako ne popunim neko polje koje sam gore naveo da mora da se popuni dobijem gresku da nije popunjeno, kad sve popunim kako treba i sabmitjem formu ne dobijem tu poruku da sam uspesno registrovao diplomca tj ne dobijem nista osim ponovo prazne forme da je popunim, kao da se nista ne desi.

LiquidBrain 07. 11. 2010. 03:25

dodaj:
Kôd:

echo mysql_error();
posle
Kôd:

$add_member = mysql_query($insert);
pa vidi sta ti vrati?

pecili 07. 11. 2010. 10:22

Kôd:

mysql_query("INSERT INTO diplomci (TIP,IME,PREZIME,ADRESA,EMAIL,KOR_IME,SIFRA,STATUS,DATUM_REG,ACTIVACTIONKEY,AKTIVIRAN)
VALUES ('$tip','$ime','$prezime','$adresa','$email','$korime','$password', '$status','$datumreg','$activactionkey','1')")
or die(mysql_error());


slavkan 07. 11. 2010. 15:01

Pecili ako uradim ovako kao sto si ti rekao dobijam sledecu gresku:

Kôd:

Table 'slavkok_posao.diplomci' doesn't exist
sto je nemoguce (slavkok_posao tako mi se zove baza)

Ako stavim velika slova DIPLOMCI dobijam sljedecu gresku:

Kôd:

Unknown column 'STATUS' in 'field list'
sto je takodje nemoguce jer kolona STATUS postoji.

Ako stavim ovo 'diplomci' pod navodnike dobijam poruku da imam gresku blzu 'diplomci'

Ako vratim kao sto je bilo ono moje na pocetku dobijam sledecu gresku:

Kôd:

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 ''diplomci' ('TIP','IME','PREZIME','ADRESA','EMAIL','KOR_IME','SIFRA','STATUS','D' at line 1
Eeeeeeee pa zivote gde je ta sintaksna greska vise??? Jasno je da je sintaksna greska u pitanju:1014:

slavkan 07. 11. 2010. 15:26

Ljudi resio sam problem a evo i kako, upit sam napisao ovako:

Kôd:

$insert = ("INSERT INTO DIPLOMCI  (TIP,IME,PREZIME,ADRESA,EMAIL,KOR_IME,SIFRA,STATUS,DATUM_REG,ACTIVACTIONKEY,AKTIVIRAN)
                                VALUES ('$tip','$ime','$prezime','$adresa','$email','$korime','$password', '$status','$datumreg','$activactionkey','1')") or die(mysql_error());
                                $add_member = mysql_query($insert);
                               
                                        if($add_member==1)
                                        {
                                                $forma = "<h2>Uspjesno ste registrovali diplomca</h2><p>Popunite i ostale podatke o diplomcu</a>.</p> ";

A dok sam pokusavao razne kombinacije navodnika velikih i maliih slova skontam da mi se ipak u bazu upisuje ovo iz forme ali obavestenje ne dolazi i onda uocim da sam i ovde pogresio:

Kôd:

if($add_member)
sto ne moze da stoji i postavim pravilno uslov i prodje. Hvala vam na angazovanju.

vidak 07. 11. 2010. 15:43

Kôd:

if($add_member)
sto ne moze da stoji i postavim pravilno uslov i prodje. Hvala vam na angazovanju.[/quote]

Isto kao i kod pitanja sa kalendarom

http://php.net/manual/en/function.mysql-query.php

Pročitaj detaljnije uputstvo za svaku funkciju a ovim što si napisao pobio si tvrdnju da ti u lokalu radi OK a na serveru ne.

slavkan 07. 11. 2010. 16:49

Heheheheh, ne znam kako da te ubedim ali stvarno ti kazem da bukvalno stoji
tako u lokalu:

Kôd:

if($add_member)
Ako hoces poslacu ti celu ovu stranicu gde je registracija, ti napravi tabelu u bazi pokreni to sve na wamp serveru 2.0h pa se uveri. Ne kazem ja da je ovo ispravno ali kazem ti da se skript izvrsi, da dobijem zapis u bazi. E sad kako ova if naredba uspije da razresi "uslov koga nema" ja ne znam. Ne znam sto bih pricao neistine kad je stvarno tako. A za kalendar, ja ti opet kazem u Download ne vidim nigde link za download kalendara.

vidak 07. 11. 2010. 18:01

Ok, ajmo 'vako... kakva je razlika između if($add_member) i if($add_member==1) ?

.. ođe http://php.net/manual/en/function.mysql-query.php piše da mysql_query za INSERT vraća TRUE ili FALSE ...

pecili 07. 11. 2010. 18:56

mozda ti je ovo bolje resenje za mail

Kôd:

$subject = "Potvrdite vasu registraciju";
$body ='
<html>
<head>
<style>
{
background-position: top;
background-color: #ffffff;
margin-left:  2em;
margin-top: 1em;
letter-spacing:1px;
font-family: "trebuchet ms";
font-size:  11pt;
font-weight:bold ;
color:#55555;
}
h2{
color:#669E96;
}
a{
color:#0000CC;
}
</style>
</head>
<body>
';
$headers='MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html;charset=utf-8' . "\r\n";
$headers .= "From: cc@cc.com" . "\r\n";
$message = "<h2>Dobrodosli na nas sajt!</h2>Vi ili neko drugi koristi ovu email adresu da se registruje.
Mozete se registrovati klikom na sljedeci <a href=\"http://www.mojsajt.info/act.php?activactionkey=$activactionkey\">Link</a>.<br>
Ako ste ovaj mail dobili greskom ignorisite ga i bicete automatski izbrisani sa liste.<br>
Ukoliko je link neaktivan bla, bla http://www.mojsajt.info/act.php?activactionkey=$activactionkey<br><br><i><u>mojsajt.info</u></i><br>";
$body = $body . $message;
mail ($email, $subject, $body, $headers);

:1021:

slavkan 07. 11. 2010. 19:41

Citat:

Originalno napisao vidak (Napišite 91537)
Ok, ajmo 'vako... kakva je razlika između if($add_member) i if($add_member==1) ?

.. ođe http://php.net/manual/en/function.mysql-query.php piše da mysql_query za INSERT vraća TRUE ili FALSE ...

Pa moram nekako da ispitam sta je funkcija vratila zato uporedjivam sa 1 a mogao sam i sa 0 ne znam sta znaci if petlja ako nema uslov.

vidak 07. 11. 2010. 20:49

pa vidi ...
if($add_member) i if($add_member==1) je jedno te isto.
if($add_member) i if($add_member===1) nije jedno te isto
a if($add_member=1) je česta greška. zato se preporučuje if(1==$add_member) jer tada izbacuje grešku.

if nije petlja. if je uslov, while je petlja.

... samo strpljenja, ispetljačeš se vremenom :)

kada fajlove prebaciš na server, server je po defaultu podešen da ne prikazuje greške u skripti pa je potrebno uključiti prikaz grešaka dok testiraš sajt. Kada krene u produkciju to se mora isključiti...

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_starup_errors', 1);

slavkan 07. 11. 2010. 21:33

Citat:

Originalno napisao slavkan (Napišite 91539)
Pa moram nekako da ispitam sta je funkcija vratila zato uporedjivam sa 1 a mogao sam i sa 0 ne znam sta znaci if petlja ako nema uslov.

E pa sad si me zapetljao momacki alal ti vera. Za if petlju se ne moze nikako reci da je petlja ali dobro ja priznam odvalu.
Lepo si ovo objasnio, a onda da li je moguce ovo sto sam ja rekao da u lokalu radi, a da na serveru nece da prodje? :P

vidak 07. 11. 2010. 22:08

a šta ti tačno ne prođe?
ne upiše u bazu?
ne prikaže poruku nakon upisa t.j. dobiješ beli screen?
da li si 100% siguran da su parametri za pristub bazi OK. Ako nisi, pokušaj da nešto izčitaš iz baze.

probaj da nakon $add_member = mysql_query($insert);
die($add_member.""); // ovo ."" je da integer pretvori u string i ispiše ga pa ćeš videti da li vraća 1 ili 0 t.j TRUE ili FALSE

Probaj celu skriptu malo da reorganizuješ. Zgodno je na početku skripte da imaš sve ono što kod upisa u bazu a tek nakon toga da uradiš ubacivanje forme u promenjivu a ako tako podesiš, onda i ne moraš da ubaviš HTML u promenjivu već možeš samo da završiš ?> i nastaviš HTML a ako ti negde traba da u HTML ubaciš $var onda <?php echo $var; ?>.
Tako ćeš imati bolji pregled skripte pa ćeš i lakše da logički kačiš gde je greška, mada nije pogrešno ni kako si sada postavio....

... ali pre ili kasnije svima nama se pojave gremlini u programu....eeeee... zbog nekog zareza ili ; pogubi se dosta vremena...

slavkan 07. 11. 2010. 23:10

Pa sad sve radi ok kako sam zelio. Objasnio sam gore iznad kakve greske su se javljale i kazem ti sta sam promenio i eto proradilo je. Takodje sve dok u onoj "if petlji" (hahah) $add_member nisam izjednacio sa 1 nisam dobijao ovo obavestenje da sam uspesno registrovao diplomca ali podaci su se upisivali u bazu. No dobro ovo sad radi i nema potrebe vise trositi vreme na ovo. Hvala jos jednom i pozdrav


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

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.