[ spezia @ 17.07.2007. 17:14 ] @
Radim seminarski,gde vesti iz baze podataka se pokazuju na naslovnoj..
Pre toga postoji stranica unos,gde se formom vest stavlja u bazi..
Problem je sledeci-kad god pokrenem stranicu unos(da iskucam vest)on vec automatski salje sva prazna polja formulara u bazu(kao da nista nisam ukucivao a pretisnuo submit")
Znaci cim se otvori strana automatski se salju prazna polja u bazu..
Code:

//unos u tabelu
$base="vesti";
$link=db_connect();
mysql_select_db($base);
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','$datum')";
$ressult=mysql_query($aSQL);

Kada prolazi kroz kodove(otvara se strana) on izgleda vidi prazna polja forme,i pomocu ovih redova ih automatski salje..Meni ovi redovi sluze da posaljem rezultate forme u bazu.

Isto tako -ne znam zasto nece da upisuje u bazu ,bez ovih kodova (vec sam napravio bazu)


Code:

<?php
//kreiranje tabele
$base="vesti";
$tabela="novosti";
$tab_def="idnovost INT(11) NOT NULL AUTO_INCREMENT,";
$tab_def.="naslov CHAR(30) NOT NULL,";
$tab_def.="tekst TEXT NOT NULL,";
$tab_def.="autor CHAR(20) NOT NULL,";
$tab_def.="datum  DATE  NOT NULL,";
$tab_def.="PRIMARY KEY (idnovost)";

$link=db_connect();

mysql_query("CREATE DATABASE $base");
mysql_select_db($base);     //ide obavezno
mysql_query("CREATE TABLE $tabela($tab_def)"); //kraj kreiranja tabele

?>

Narocito sto u gornjem kodu,biram i selektujem bazu(isti kodovi)..

[ Nemanja Avramović @ 17.07.2007. 17:51 ] @
Ne šalje formular prazna polja nego ti nigde ne prihvataš vrednosti iz prosleđenih polja.

Pogledaj http://www.php.net/register_globals

p.s. Uvek koristi mysql_query($aSQL) or die(mysql_error()); kako bi znao da li je query izvršen ili ima greška u query-ju, i ako ima videćeš koja je greška.
[ centaur @ 17.07.2007. 20:02 ] @
Citat:
Nemanja Avramović:

p.s. Uvek koristi mysql_query($aSQL) or die(mysql_error()); kako bi znao da li je query izvršen ili ima greška u query-ju, i ako ima videćeš koja je greška.


Moje mišljenje je da die() nikada ne treba koristiti u skriptovima (čak ni u develop fazi).
Sama funkcija mysql_query() vraća FALSE ako query nije bio uspešan što je sasvim dovoljno za preduzimanje neke elegantnije akcije nego da se skript jednostavno ubije (ko je rekao exceptions????).
[ Miroslav Ćurčić @ 17.07.2007. 20:05 ] @
Ili još bolje, postavi:
error_reporting(E_ALL);
na početku svakog svog skripta da bi video sve greške.
[ spezia @ 17.07.2007. 21:43 ] @
Ma meni ne javlja greske(i kada sam to stavio) i konektuje se i upisuje podatke..
evo ceo kod stranice
Code:

<?php
include ("./header.html");
include ("./fun.php");
include ("./common_db.php");
include ("./baza.php");
?>


<body bgcolor="#CCFFFF">
<?php
naziv("unos vesti:::");
echo "<br><br>";
print ("dobrodosli na skolski sajt");
echo "<br>datum:".date("Y-m-d")."<br>";
echo "<br><br>";
?>
<br><hr><br>
<FORM method="post" action="<?php $PHP_SELF ?>" >
Naslov:<input type="text" name="naslov"><br>
Tekst vesti:<textarea name="tekst"></textarea><br>
Autor:<input type="text" name="autor"><br>
Datum unosa:<input type="text" name="datum"><br>
<input type="submit" name="submit" value="posalji">
<input type="reset" name="reset" value="ponisti">
</FORM>

<br><a href="naslovna.php">povratak na naslovnu</a>

<?php
error_reporting(E_ALL);
//unos u tabelu
$base="vesti";
$link=db_connect();
mysql_select_db($base);
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','datum')";
($ressult=mysql_query($aSQL)) or die(mysql_error());;
include ("./footer.html");
?>

Mozda vam je sada lakse da komentarisete..
2)I jos jedno pitanje..Ovog puta rec je o naslovnoj strani..
Uredno mi prikazuje celu vest iz baze.Ja sam zeleo da recimo prikaze 150 prvih znakova (deo vesti,gde ce za opsirnije/celu vest da stoji link)..
Jel ima neke funkcija ili MySQL naredba koja pojednostavljuje.
Ja sam isao na foru,kreiranje datoteke u koju ce biti upisana cela vest,a zatim pomocu funkcije fgets() uzeto 150 znakova..
Javlja mi se problem-sto je na nalovnoj prva vest prazna,a sadrzaj prve se prepisuje u drugu,i tako redom gde sadrzaj poslednje vesti ne prikazuje,a na njenom mestu je sadrzaj prethodne.Naravno radi da se prikazuju prvih 150 karaktera


[ Mister_rap @ 17.07.2007. 21:55 ] @
Ako je ovo citav kod trebao si da obratis paznju na ono sto ti je Nemanja rekao!

Moras dodjeliti vrijednosti varijablama.
Dakle $naslov = $_POST[naslov]; i tako dalje...

Trebas "bolje organizovati kod" inace :)

2. Postoji vise nacina da to "sredis"...
Jedan od njih je da imas polje intro u bazi u kojem bi unosio "intro text".
A konkretan odgovor na tvoju zamisao potrazi na http://php.net/strings
[ spezia @ 18.07.2007. 15:06 ] @
Dobro -ok za proveru ..ja to namerno nisam stavljao,ali racunam da stavim.
Pokusao sam i ne ide..
$naslov=$_POST[naslov];
$tekst=$_POST[tekst];
$autor=$_POST[autor];
pravio sam i funkcije i ukljucivao kao global ali ista prica
gledao sam ove linkove na php.net(i preveo sto se moglo prevesti)
Sada cak pokazuje po dva prazna polja (pre je bilo jedno prazno a drugo unos)..
Inace primer koji koristim iz jedne knjige uopste ne definise tako $_POST...
vec kao u mojim gornjim kodovima..i radi.Tako da ovo nije obavezno(mislim moze i bez toga)
2)problem za "intro polje"-mislis definisem polje od recimo CHAR(150),i kopiram deo teksta koji unosim pri unosu u to polje koje zelim da bude intro..mislio si na takav princip..
[ dakipro @ 18.07.2007. 15:25 ] @
Samu akciju unosa u bazu (u ovakvom nacinu kodiranja) uvek stavis pre stampanja podataka i aktiviras je nekim kontrolnim parametrom (npr: $_GET['action']) a ako nema parametra, onda stampas samu formu.
Nemoj da se ucis sa ukljucenim register_globals parametrima. Procitaj prvo osnove php-a, TOP teme, uvod u php/mysql manual ili jos bolje nadji nekog mentora (pa makar i platio) da te odma uvede u dobre prakse, moze za 1nedelju da ti skrati mesece ucenja i provaljivanja
[ spezia @ 19.07.2007. 10:22 ] @
Ok.
Meni ni najobicniji primer iz top teme sa $_POST ne radi (ispisuje nedefinisana promenljiva..)
a prosledjuje promenljivu samo da napisem na strani echo "$ime $prezime";
Tako da su meni ukljuceni register_globals parametri.Kako da ih iskljucim i da radim sa $_POST,$_GET ??
p.s.koristim Abria Merlin,koji automatski instalira php,mysql,apache ..i na php4 sam

[Ovu poruku je menjao spezia dana 19.07.2007. u 11:52 GMT+1]
[ Miroslav Ćurčić @ 19.07.2007. 12:06 ] @
Pre će biti da ti ispisuje "nepoznata konstanta" ili "nepoznat index", i to zato što si u $_POST[naslov] zaboravio da naslov staviš pod navodnike.
[ spezia @ 19.07.2007. 13:10 ] @
Ma jeste,treba navodnici (Mister_rap je pogresno napisao),ali i kad stavim opet pise nedefinisana promenljiva $_POST ..stavljao sam i u niz,i sa ' i sa "..
Code:
Warning: Undefined variable: _POST in e:/abria merlin/apache/htdocs/primer5/mail.php on line 11


Jel to treba normalno da funkcionise iako su mi ukljucene register_globals,ili zbog toga pravi problem?


[Ovu poruku je menjao spezia dana 19.07.2007. u 15:02 GMT+1]
[ Miroslav Ćurčić @ 19.07.2007. 14:21 ] @
Ti onda ili teraš PHP verziju 3 (gde ne postoji $_POST), ili si sam ubio (unset) tu promenljivu prethodno (ovo sam viđao ne nekim glupim XSS zaštitama).
Stavi na početak skripta (linija 1): print_r($GLOBALS); pa vidi pominje li se "[_POST]".
[ spezia @ 19.07.2007. 15:29 ] @
Pominje i dalje :( izbacio je razne nizove ,varijable,...)Inace u phpinfo pise da je verzija 4.0.4 ,i da su register_globals ukljucene,a medju variablama nema $_POST.
evo nasao na netu primere koji govore o prosledjivanju $_POST.
Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>

<body>
<form action="mail.php" method="post">
Your Name: <input type="text" name="name"><br>
E-mail: <input type="text" name = "email"><br><br>
Comments<br>
<textarea name="comments"></textarea><br><br>
<input type="submit" value="Submit">
</form>

</body>
</html>

i druga strana koja radi sa promenljivama
Code:

<?php
print_r($GLOBALS);
error_reporting(E_ALL);

$name=$_POST['name'];

$email=$_POST['email'];

$comments=$_POST['comments'];

//konekcija i unos podataka u bazu
$link=mysql_connect("localhost","alek","a");
if(!$link){
echo "nije uspostavljena veza<br>";
}
else
{
echo "veza je uspostavljena<br>";
}
if(!mysql_select_db('baza'))
{
echo "nije uzeta baza";
}
else
{
echo "uspesno uzeta baza<br>";
}
$query="INSERT INTO korisnik(username,usermail,userprofile) VALUES ('$name','$email','$comments')";
 $result=mysql_query($query,$link);
 $result=mysql_insert_id($link);
 if(!$result){
 echo "nisu upisani podaci";
 }
 else
 {
 echo "upisani su podaci uspesno";
 }
 
?>

i kada popunite formu i kliknete na submit-izbacuje ovo

Code:
Warning: Undefined variable: _POST in e:/abria merlin/apache/htdocs/primer5/mail.php on line 5

Warning: Undefined variable: _POST in e:/abria merlin/apache/htdocs/primer5/mail.php on line 7

Warning: Undefined variable: _POST in e:/abria merlin/apache/htdocs/primer5/mail.php on line 9
[ dakipro @ 19.07.2007. 15:42 ] @
Stavi error reporting ispred ovog print_r, mnogo se cudnih stvari ovde desava.



error_reporting(E_ALL);
print_r($GLOBALS);
[ Miroslav Ćurčić @ 19.07.2007. 15:48 ] @
Moja greška, evo sad nađoh u helpu:
$_POST: Introduced in 4.1.0. In earlier versions, use $HTTP_POST_VARS.

Znači za tvoju verziju PHPa umesto $_POST koristi $HTTP_POST_VARS, ali ti ipak preporučujem da unaprediš PHP, barem na 4.1.1.
[ spezia @ 19.07.2007. 18:55 ] @
Ok.Radi sa $HTTP_POST_VARS ,ali to uopste nije resilo moj problem iz prvog posta..
Evo dobrog primera:u kodu ispod zapazite da u formi pod action-nema php koda (<?php ?>)..
Kada kliknem na ovu stranu i otvori se,automatski se u bazi jedan red popuni praznim poljima.Ja kad popunim formu i kliknem na submit
,baza se ne puni(a ako vratim php oznake ,tekst se posalje u bazu..)Kako da mi se baza ne puni praznim poljima..buljim u kod i ne primecujem da nesto fali ili nije u redu..

p.s.unapredio bih ja da znam,ovaj program automatski instalira i podesava php,tako da ne znam kako da unapredim,narocito sto je instaliranje i podesavanje PHP-a,na windows-u,
teska stvar(ja sam licno pokusao i nisam uspeo,a i neki admini su se zalili da je tesko)..tako da sam trazio program koji ce to sve podesiti.
Code:

<?php
include ("./header.html");
include ("./fun.php");
include ("./common_db.php");
include ("./baza.php");

?>


<body bgcolor="#CCFFFF">
<?php
naziv("unos vesti:::");
echo "<br><br>";
print ("dobrodosli na skolski sajt");
echo "<br>datum:".date("Y-m-d")."<br>";
echo "<br><br>";
?>
<br><hr><br>
<br><a href="naslovna.php">povratak na naslovnu</a>

<FORM method="post" action=" $PHP_SELF " > <!--******  OVAJ RED ****** -->
Naslov:<input type="text" name="naslov"><br>
Tekst vesti:<textarea name="tekst"></textarea><br>
Autor:<input type="text" name="autor"><br>
Datum unosa:<input type="text" name="datum"><br>
<input type="submit" name="submit" value="posalji">
<input type="reset" name="reset" value="ponisti">
</FORM>

<?php
error_reporting(E_ALL);

//definisanje promenljive
 $naslov=$HTTP_POST_VARS['naslov'];
 $tekst=$HTTP_POST_VARS['tekst'];
 $autor=$HTTP_POST_VARS['autor'];
 $datum=$HTTP_POST_VARS['datum'];
//unos u tabelu
$base="vesti";
$link=db_connect();
mysql_select_db($base);
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','datum')";
($ressult=mysql_query($aSQL)) or die(mysql_error());;

include ("./footer.html");
?>
[ mb_sa @ 19.07.2007. 20:37 ] @
Naravno da ce ti se pri prvom pokretanju, upsiati prazan red, jer nemas nigdje kontrolnih struktura u programu. Tebi se izvrsava svaka linija koda bez obizra na sve.

Code:
// ako je posjetioc stisnuo dugme "posalji" vrsi upis u bazu
if(isset($HTTP_POST_VARS['submit'])) {

//definisanje promenljive
 $naslov=$HTTP_POST_VARS['naslov'];
 $tekst=$HTTP_POST_VARS['tekst'];
 $autor=$HTTP_POST_VARS['autor'];
 $datum=$HTTP_POST_VARS['datum'];
//unos u tabelu
$base="vesti";
$link=db_connect();
mysql_select_db($base);
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','$datum')";
($ressult=mysql_query($aSQL)) or die(mysql_error());;

}


I skini sa ove lokacije http://www.appservnetwork.com/ paketnu instalaciju apache, php & mysql. Ljudi ovo redovno odrzavaju. Mozes izbarati izmedju PHP 4 i PHP 5. Instalacije i podesvanje je u svega nekoliko pristika na next button kroz wizard instalaciju!
[ spezia @ 20.07.2007. 11:54 ] @
U pravu si ..Ja sam nameravao da to resim sa empty polja (dok se ne popune sva ne salje formu)..
Hvala za savet,i skinuo sam ovo sto si preporucio.
Ostalo jos jedno osnovno pitanje.
Kada sam napisao skript za kreiranje baze i tabele-on je uspesno uradio
$link=db_connect();
naravno pre toga include ("./common_db.php");
Napravio sam skript unos koji radi sa formom i koji upisuje u bazu podataka-ranije je radilo i upisivalo..a sada
izbacuje
Code:

Fatal error: Cannot redeclare db_connect() (previously declared in C:\AppServ\www\primer6\common_db.php:9) in C:\AppServ\www\primer6\common_db.php on line 7

isto je pozvan sa
$link=db_connect();
..koristio sam kroz razne skripte i radilo a sada javlja gresku-i to direktno u common_db.
evo tih redova
Code:

function db_connect()
{
global $dbhost,$dbusername,$dbuserpassword;
$link_id=mysql_connect($dbhost, $dbusername, $dbuserpassword);
return $link_id;

[ milton @ 20.07.2007. 12:04 ] @
ako hoces sve u istoj page onda moras ovako:

Code:

<?php
include ("./header.html");
include ("./fun.php");
include ("./common_db.php");
include ("./baza.php");
$naslov=$HTTP_POST_VARS['naslov'];
$tekst=$HTTP_POST_VARS['tekst'];
$autor=$HTTP_POST_VARS['autor'];
$datum=$HTTP_POST_VARS['datum'];
$insert=$HTTP_POST_VARS['insert'];

?>


<body bgcolor="#CCFFFF">
<?php
naziv("unos vesti:::");
echo "<br><br>";
print ("dobrodosli na skolski sajt");
echo "<br>datum:".date("Y-m-d")."<br>";
echo "<br><br>";
?>
<br><hr><br>
<FORM method="post" action="<?php $PHP_SELF ?>" >
<input type="hidden" name="insert" value="1">
Naslov:<input type="text" name="naslov"><br>
Tekst vesti:<textarea name="tekst"></textarea><br>
Autor:<input type="text" name="autor"><br>
Datum unosa:<input type="text" name="datum"><br>
<input type="submit" name="submit" value="posalji">
<input type="reset" name="reset" value="ponisti">
</FORM>

<br><a href="naslovna.php">povratak na naslovnu</a>

<?php
if ($insert == 1){
$myconn=OpenMyDB(); //uvek je bolje koristiti funkciju za kacenje na db
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','datum')";
mysql_query($aSQL,$myconn);
}
include ("./footer.html");

function OpenMyDB() {
    global $myconn;
    global $dbserv;
    global $usr;
    global $pwd;
    global $dbname;
    if ($myconn) {
        mysql_select_db($dbname, $myconn);    
        return $comconn;
    }
    // echo "CON..\n";

    $myconn = mysql_connect($dbserv, $usr, $pwd);
    if (!mysql_select_db($dbname, $myconn)) {
         return false;
         exit;
    }

    if (!$myconn) {
         return false;
         exit;
    }
    return $myconn;
}


?>


[Ovu poruku je menjao milton dana 20.07.2007. u 13:15 GMT+1]
[ milton @ 20.07.2007. 12:13 ] @
mada je uvek preciznije i cistije raditi u dve strane:

na primer:

frmVesti.php
Code:

<?php
include ("./header.html");
include ("./fun.php");
include ("./common_db.php");
include ("./baza.php");
?>
<body bgcolor="#CCFFFF">
<?php
naziv("unos vesti:::");
echo "<br><br>";
print ("dobrodosli na skolski sajt");
echo "<br>datum:".date("Y-m-d")."<br>";
echo "<br><br>";
?>
<br><hr><br>
<FORM method="post" action="goVesti.php" >
Naslov:<input type="text" name="naslov"><br>
Tekst vesti:<textarea name="tekst"></textarea><br>
Autor:<input type="text" name="autor"><br>
Datum unosa:<input type="text" name="datum"><br>
<input type="submit" name="submit" value="posalji">
<input type="reset" name="reset" value="ponisti">
</FORM>

<br><a href="naslovna.php">povratak na naslovnu</a>
<?include ("./footer.html");?>


i
goVesti.php

Code:

<?
include ("./header.html");
include ("./fun.php");
include ("./common_db.php");
include ("./baza.php");
$naslov=$HTTP_POST_VARS['naslov'];
$tekst=$HTTP_POST_VARS['tekst'];
$autor=$HTTP_POST_VARS['autor'];
$datum=$HTTP_POST_VARS['datum'];

$myconn=OpenMyDB(); //uvek je bolje koristiti funkciju za kacenje na db
$aSQL="insert into $tabela (naslov,tekst,autor,datum)";
$aSQL.="values('$naslov','$tekst','$autor','datum')";
mysql_query($aSQL,$myconn);

function OpenMyDB() {// ova funkcija bi trebalo da ti stoji u common_db.php recimo
global $myconn;
global $dbserv;
global $usr;
global $pwd;
global $dbname;
if ($myconn) {
mysql_select_db($dbname, $myconn);
return $comconn;
}

$myconn = mysql_connect($dbserv, $usr, $pwd);
if (!mysql_select_db($dbname, $myconn)) {
return false;
exit;
}

if (!$myconn) {
return false;
exit;
}
return $myconn;
} //end function OpenMyDB

header("location:frmVesti.php");
?>
[ spezia @ 20.07.2007. 14:54 ] @
isto javlja
Fatal error: Cannot redeclare OpenMyDB() (previously declared in C:\AppServ\www\primer6\common_db
Ma ja mislim i da je ona sto sam ja napisao dobro resenje,ali zasto nece ne znam.
Ja sam zamenio direktno $link=mysql_connect(...);
i radi,ali imam na mnoga mesta da stavljam-tako funkcija bi mnogo znacila
[ mdostanic @ 21.07.2007. 08:12 ] @
Probaj ovako nesto.... meni radi...
Code:


<?php
$naslov = $_POST['naslov']; 
$tekst = $_POST['tekst'];
$autor = $_POST['autor'];
$datum = $_POST['datum'];

if (!empty($_POST['naslov']) && !empty($_POST['tekst']) && !empty($_POST['autor']) && !empty($_POST['datum']))
  {
    
    $baza = new mysqli ('localhost','korisnik','lozinka','imebaze');
    
    if (mysqli_connect_errno())
    {
      echo 'Problem sa konektovanjem na bazu...';
      exit();
    }
    
    $upit = "insert into unos values ('$naslov','$tekst','$autor','$datum')";
    $rezultat = $baza -> query ($upit);
    
    if ($rezultat)
    {
      echo 'Broj zapisa unetih u bazu'.$baza->affected_rows;
    }
    $baza -> close();
    exit();
  }

else 
  {
// ovde stavis html formu za unos... na primer ovako nesto
    echo '<form action="unos.php" method="post">Naslov<input name="naslov" type="text" /><br />Tekst<input name="tekst" type="text" /><br />Autor<input name="autor" type="text" /><br />';
    echo 'Datum<input name="datum" type="text" /><br /><input value="go" type="submit" />';
    echo '</form>';
    exit();
  }

?>

[ mb_sa @ 21.07.2007. 08:32 ] @
Citat:
spezia: Fatal error: Cannot redeclare db_connect() (previously declared in C:\AppServ\www\primer6\common_db.php:9) in C:\AppServ\www\primer6\common_db.php on line 7


Sve je uredu sa funkcijom za konekotvanje na MySQL server i odadir baze, problem je što imaš 2x deklarisanu funkciju db_connect(). Izgleda da su ti obje te funkcije u istom fajlu common_db.php?
[ spezia @ 21.07.2007. 13:29 ] @
Ovako,mislim da znam..
Imao sam common_db ukljucen u stranicu baza.php(skript za kreiranje baze i tabele,i konekcija za mysql pravljenje iste.)
Ta ista strana je ukljucena u stranici unos.php gde se nalazi forma i upis u bazu.Stranicu bazu.php sam morao da ukljucim
jer su tamo promenljive nazivi za tabele,i polja..I zbog toga je duplo..
osnovna greska :(
hvala za pomoc
[ spezia @ 22.07.2007. 13:52 ] @
Slucajno sam pretrazivajuci forum nasao post ,gde lik trazi navigaciju strane..kao na forum
1>2>3>4...znaci stampa se samo prvih 5 vesti,6 ide na sledecu stranu..Ima gotove skripte na net..ali sam greskom obrisao te stranice sajtova..Tacnije strucan naziv je 'p...',po tome sam nasao na google..
E sad nikako da nadjem taj post i taj strucni naziv..
[ Miroslav Ćurčić @ 22.07.2007. 13:56 ] @
"pagination"
[ spezia @ 22.07.2007. 16:03 ] @
jeste ,hvala ti
[ mdostanic @ 23.07.2007. 07:47 ] @
http://www.elitesecurity.org/t105050-0
http://www.elitesecurity.org/t83944-0
Evo paginacije....