PDA

Prikaži potpunu verziju : [PHP] Da li su gremlini ili nesto drugo?


PeTkO
26.1.2008, 21:45
Danas se ceo dan zezam sa ovim problemom i nikako da ga resim.Obrnuo net gledajuci tutorijale da vidim gde gresim ali nigde nisam pronasao gresku u kodu.Evo ga ceo kod:

<?php

function register_form(){

$date = date('D, M, Y');
echo "<form action='?act=registracija' method='post'>"
."Nick: <input type='text' name='username' size='30'><br>"
."Sifra: <input type='password' name='password' size='30'><br>"
."Potvrdi password: <input type='password' name='password_conf' size='30'><br>"
."Email <input type='text' name='email' size='30'><br>"
."Ime <input type='text' name='ime' size='30'><br>"
."Prezime <input type='text' name='prezime' size='30'><br>"
."Ime drzave <input type='text' name='imenacije' size='30'><br>"
."Nacija <select name='nacija' id='nacija'>
<option>Amerikanci</option>
<option>Rusi</option>
<option>Evropljani</option>
<option>Kinezi</option>
<option>Teroristi</option>
</select><br>"
."<input type='hidden' name='date' value='$date'>"
."<input type='submit' value='Register'>"
."</form>";
}

function register()
{
$connect = mysql_connect("localhost", "root","");
if(!$connect)
{
die (mysql_error());
}
$select_db = mysql_select_db("wiw", $connect);
if(!$select_db)
{
die(mysql_error());
}
$username = $_POST['username'];
$password = $_POST['password'];
$pass_conf = $_POST['password_conf'];
$email = $_POST['email'];
$date = $_POST['date'];
$ime = $_POST['ime'];
$prezime = $_POST['prezime'];
$imenacije = $_POST['imenacije'];
$nacija = $_POST['nacija'];



//E sad batice...ako je sve uredu aj da se upise to u bazu ***** ti materina

$insert = mysql_query("INSERT INTO podaci(username, password, email, ime, prezime, nacija, imenacije) VALUES ('$username', '$password', '$email', '$ime', '$prezime', '$nacija', '$imenacije')");
if(!$insert)
{
die ("Hjuston imamo problem".mysql_error());
}

echo "Sada ste se registrovali i mozete poceti sa svojim pokoravanjem sveta! <a href='index.php'>LOGIN</a>";

}

switch($act){

default;
register_form();
break;

case "registracija";
register();
break;

}
?>

Ovo je skripta za registraciju.Izbacio sam deo gde se proverava da li je korisnik uneo podatke u sva polja i da li vec postoji username, email i naziv drzave u bazi.Mislim da to nepravi problem.

Problem je taj sto nikako nece da upise podatke u bazi.Znaci neam blage veze u cemu je problem.Pitao sam neke ljude sa MSN-a koji su strucniji u PHP-u od mene, ali ni oni ne znaju u cemu je problem.

I jos nesto.Kada sam dao link jednom liku sa MSN-a koji se bavi PHP programiranjem on moze lepo da se registruje i ispise mu poruku "Uspesno ste se registrovali" ali nikako nece da upise u bazi podatke (kod mene).Dok kod njega sve se lepo upise, a kod je isti.Koristim XAMPP 1.6.5 verziju.
Ne znam vise u cemu je problem

GoranSTX
26.1.2008, 21:54
Pa ako je sa PHP kodom sve u redu, preostaje samo da nešto sa MySQL-m ne valja. Jel imaš u bazi wiw sve pomenute tabele? Jel konekcija sa bazom OK?

Nisam php programer, al' eto laički i logički rezon...

PeTkO
26.1.2008, 22:09
Ma sve je ok i sa bazom i sa tabelama i sa konekcijom

Evo exporta iz baze:

-- phpMyAdmin SQL Dump
-- version 2.11.3
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jan 26, 2008 at 08:12 PM
-- Server version: 5.0.51
-- PHP Version: 5.2.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Database: `wiw`
--

-- --------------------------------------------------------

--
-- Table structure for table `podaci`
--

CREATE TABLE `podaci` (
`id` int(10) unsigned NOT NULL auto_increment,
`username` varchar(20) character set utf8 collate utf8_bin NOT NULL,
`password` varchar(12) character set utf8 collate utf8_bin NOT NULL,
`email` varchar(20) character set utf8 collate utf8_bin NOT NULL,
`ime` varchar(50) character set utf8 collate utf8_bin NOT NULL,
`prezime` varchar(50) character set utf8 collate utf8_bin NOT NULL,
`nacija` varchar(50) character set utf8 collate utf8_bin NOT NULL,
`imenacije` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `podaci`
--

urke
26.1.2008, 22:18
Zameni ovo
$connect = mysql_connect("localhost", "root","");
if(!$connect)
{
die (mysql_error());
}
$select_db = mysql_select_db("wiw", $connect);
if(!$select_db)
{
die(mysql_error());
}

sa ovim

$connect = mysql_connect("localhost", "root","") or die("greska kod konekcije na bazu");
if(!$connect)
{
die (mysql_error());
}
$select_db = mysql_select_db("wiw", $connect) or die("greska kod selekcije baze");
if(!$select_db)
{
die(mysql_error());
}

i daj da vidimo šta kaže.

urke
26.1.2008, 22:21
Pošto iz unknown razloga ne mogu da izmenim svoju poruku (počelo od juče tako), evo ti dodatak. Deo za pisanje formulara umesto sa echo ""; odradi sa:

print <<<eof
ovde ide tvoj HTML kôd kao da pišeš u običan HTML
eof;

PeTkO
26.1.2008, 23:07
Nece ni ono prvo ni drugo.Za drugo mi izbaci silne erore, a za drugo opet izbrise sav text iz polja za unos i nece da upise u bazu

A probao sam i da form izbacim iz php koda i da ga stavim pre php koda i pogodite, nece.


Probao sam i da izbrisem ono "?act=registracija", izbrisao i switch i nece opet...jel moze neko da proba na svom kompu ovaj kod.Predpostavljam da me PHP nesto zeza ali neam pojma gde i kako

holodoc
26.1.2008, 23:52
Ostatak koda neću da komentarišem ali najverovatniji razlog zbog čega kod tebe navedeni kod ne radi a kod tvog "PHP eksperta" radi leži u switch petlji. Zašto? Zato što je kod "eksperta" najverovatnije u php.ini-ju uključena opcija register_globals pa je sasvim u redu act parametar koji se prosleđuje u URL-u tvoje forme očitati sa čistim $act. Međutim, po defaultu sve novije distribucije PHP-a (pa i sam XAMPP) dolaze sa ovim parametrom isključenim tako da se sve vrednosti polja koje se prosleđuju URL-om moraju eksplicitno očitavati $_GET superpromenljivom.

Da skratim priču... Podatke poslate POST formom moraš da očitavaš iz $_POST superpromenjljive, one koje prosleđuješ GET formom (preko URL-a) očitavaš $_GET superpromenjljivom.

Da bi ovaj tvoj kod funkcionisao kako je predviđeno potrebno je da ovaj deo koda
switch($act){

default;
register_form();
break;

case "registracija";
register();
break;

}zameniš sa ovim kodom
switch($_GET['act']){

default;
register_form();
break;

case "registracija";
register();
break;

}

PeTkO
27.1.2008, 0:09
tnx holodoc

Uopste nisam predpostavljao da u tom delu koda gresim.

edit: opet nece...

@holodoc Jel mozes da svratis na MSN caskom?Pitao bi te preko PM/LP ali si odlucio da ne primas PM/LM :)

vladimir.s
27.1.2008, 0:38
Umesto da promenljivu "act" prosleđuješ kroz tag <form action='?act=registracija' ..., pošalji je kao polje tipa hidden, znači:
<input type='hidden' name='act' value='registracija'> i pokupi je pri proveri sa $_POST.

holodoc
27.1.2008, 1:03
S obzirom da je kod sa mojom ispravkom vezanom za switch potpuno ispravan (uključujući i izgled tvoje baze) problem očigledno leži negde u podešavanju tvog sistema.

Napiši ovde koje greške dobijaš prilikom izvršavanja.

PeTkO
27.1.2008, 1:37
pa gresaka nema...Znaci, popunim sva polja i kliknem na Register.U tom momentu, sva polja se isprazne, i uopste ne napise "Uspesno ste se registrovali...bla,bla", nego samo isprazni polja.Onda ja proverim bazu da li je mozda izvrsio neki upis i naravno, od upisa nema nista.Videcu da instaliram neku stariju verziju XAMPP-a...izgleda da je do toga

vladimir.s
27.1.2008, 1:44
Ponovo sam pogledao tvoj kod i čitava zbrka nastaje zbog promenljive "act". Ovo što sam napisao iznad treba uraditi, a ja bih umesto ovog switch koristio stari dobri if. Nešto ovako:

if ($_POST['act']=='registracija')
{
register();
}
else
{
register_form();
}

PDarko
27.1.2008, 2:16
Nisam neki stručnjak, aki ovaj deo koda mi je nejasan.
<form action='?act=registracija' method='post'>
Ja ovaj deo obično pišem ovako:
<form action='<?php echo $_PHP['SELF'] ?>?act=registracija' method='post'>

PeTkO
27.1.2008, 12:29
Ljudi, bilo je do xamp-a!

Malopre sam reinstalirao XAMPP i umesto moje switch petlje, upotrebio sam holodocovu swich petlju i zamislite radilo je, dok juce nije htelo ni da pisne.

Radi i sa if petljom.

Hvala svima koji su mi pomogli.Ali ocigledno da nije bilo do koda vec do samog PHP-a