mali problem sa unosom u bazu podataka

Zaključano
  • 27 odgovora
  • 7.255 pregleda
mali problem sa unosom u bazu podataka 17.07.2007. u 17:14 · pre 234 meseci #1
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)..

Re: mali problem sa unosom u bazu podataka 17.07.2007. u 17:51 · pre 234 meseci #2
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.
Potpis
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
Re: mali problem sa unosom u bazu podataka 17.07.2007. u 20:02 · pre 234 meseci #3
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????).
Potpis
Powered by Slackware 13
Re: mali problem sa unosom u bazu podataka 17.07.2007. u 21:43 · pre 234 meseci #5
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


Re: mali problem sa unosom u bazu podataka 17.07.2007. u 21:55 · pre 234 meseci #6
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
Re: mali problem sa unosom u bazu podataka 18.07.2007. u 15:06 · pre 234 meseci #7
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..
Re: mali problem sa unosom u bazu podataka 18.07.2007. u 15:25 · pre 234 meseci #8
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
Potpis
http://norway.dakipro.com/
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 10:22 · pre 234 meseci #9
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]
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 12:06 · pre 234 meseci #10
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.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 13:10 · pre 234 meseci #11
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]
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 14:21 · pre 234 meseci #12
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]".
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 15:29 · pre 234 meseci #13
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
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 15:48 · pre 234 meseci #15
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.
Potpis
"The quieter you become, the more you are able to hear."
Blog | PowerCMS
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 18:55 · pre 234 meseci #16
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");
?>
Re: mali problem sa unosom u bazu podataka 19.07.2007. u 20:37 · pre 234 meseci #17
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!
Re: mali problem sa unosom u bazu podataka 20.07.2007. u 11:54 · pre 234 meseci #18
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;
} 
Re: mali problem sa unosom u bazu podataka 20.07.2007. u 12:04 · pre 234 meseci #19
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]
Potpis
http://www.playnow.rs
Re: mali problem sa unosom u bazu podataka 20.07.2007. u 12:13 · pre 234 meseci #20
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");
?>
Potpis
http://www.playnow.rs
Tema je zaključana, nove poruke nisu moguće.

Premeštanje teme