» »

problem z phpjem

problem z phpjem

zdobersek ::

rad bi, da bi se po kliku v formularju v mysql bazo vpisali nekateri podatki. php kodo datoteke admin_postnews.php sem obesil sem. pac, malo modificiram phpbb :D . tu je se template.

po vsej logiki bi moral formular vse skupaj preusmeriti na admin_postnews.php?action=save, tam pa bi se podatki shranili v bazo. vendar se v bazo nic ne shrani. lepo bi prosil za pomoc, ker si s tem razbijam glavo ze dva dni ;((

se to: problem ni v bazi, 100%

kopriva ::

Ti je že kadarkoli uspelo kaj vpisati v bazo? Mislim, da si samostojno naredil neko skripto, ki je vpisovala podatke v bazo?

Ali si kr prvič vzel phpBB in se začel s tem igrat? ---> Če je tu odgovor da, potem idi raje od začetka. Najdi si nek tutorial, ker jih je xy^z na to temo ... Če ti je angleščina trn v peti, obišči php-si.com.

Srečno!

zdobersek ::

to ni problem...
sem ze vpisoval v mysql bazo, pravzaprav skozi tole skripto. prakticno ista kot tista, katera me muci, vendar pri slednji formular noce preusmeriti na admin_postnews.php?action=save, zato se tudi podatki ne shranijo v mysql bazo... ;((

kopriva ::

Torej ... formular te preusmeri na admin_postnews.php?

Če te in če ti potem nič ne vpiše v bazo, mi je malo sumljiva tale vrstica:
$db->sql_query($sql);

Kolikor vem, bi naj bil $db objekt, ki pa ga prej nikjer ne ustvariš - vsaj v tej kodi, kolikor jo je vidne. Žal pa ne vem, kako je s temi templejti v phpBB in ti težko kaj več pomagam.

Napake pa nobene ne izpiše?

Alpheus ::

V formularju maš metodo POST, v skripti pa preverjaš $_GET, mogoče bi to rad popravu. Sicer nisem 100% če je v tem napaka, je pa dober začetek.

LP
VI VERI VENIVERSUM VIVUS VICI.

zdobersek ::

@kopriva: vrstica deluje, preverjeno - uporabljena povsod v phpbb skripti, ko se upravlja z sql bazo. napake ni nobene...

@Alpheus: metodo POST uporabljam, ker nameravam potem dodati se inpute za news_subject in news_text. tu ne bi smel biti problem, ker je akcija nastavljena na admin_postnews.php?action=save, GET metoda pa posilja vsote iz inputov skozi url...

medobear ::

else {
include('./page_header_admin.'.$phpEx);
$template->set_filenames(array(
	'body' => 'admin/admin_postnews_body.tpl')
);
$template->pparse('body');
include('./page_footer_admin.'.$phpEx);
}


probej spremenit v

else {
print "V tem grmu tici zajec";
}


da se prepricas, da tale get deluje kot je treba

Lp

Zgodovina sprememb…

  • spremenil: medobear ()

Alpheus ::

ja sm opazu, moja napaka.
VI VERI VENIVERSUM VIVUS VICI.

zdobersek ::

@_mAx: izpise se V tem grmu tici zajec. brez problemov...

medobear ::

Ja saj ravno v tem je problem, ker pogoj if stavka ni izpolnjen se izpiše V tem grmu tiči zajec in v bazo se ne vpiše ničesar.


1. Če ima starejšo verzijo php-ja poskusi namesto $_GET s $HTTP_GET_VARS
2. eh nič drugega mi sedaj ne pride na misel :D povej rezultate

fx ::

Jaz bi samo vprašal, če je kdo kaj delal s branjem podatkov iz serijskih vrat v PHP?

EDIT:
Stric google mi je našel to kodo :
<?php
exec('mode com1: baud=9600 data=8 stop=1 parity=n xon=on');
// execute 'help mode' in command line of Windows for help
$fd = dio_open('com1:', O_RDWR);
while (1) {
  $data = dio_read($fd, 256);
  if ($data) {
     echo $data;
  }
}
?>
na tej strani http://si.php.net/manual/ro/function.di... amapk meni javni naslednjo napako:
Fatal error: Call to undefined function dio_open() in C:\AppServ\www\serial.php on line 4
Imam pa namesščeni AppServ 2.5.6 z
- Apache 2.2.2
- MySQL 5.0.22
- PHP 5.1.4
- phpMyAdmin-2.8.2

Če mi kdo kako lahko pomaga bom zelo vesel.

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

kopriva ::

Mislim, da se toliko zagotovo spoznaš, da veš, kje je napaka, ne? Finta je, da ne "najde" funkcije dio_open().

Hm, že vem, kje je tvoj problem ... Preberi si tukaj.

Na kratko: Notã: This extension is not available on Windows platforms.

Če boš pa delal na *nix sistemu, potem pa glej, da boš enableal to knjižico ...

LP

fx ::

Tega pa nisem videl Notã: This extension is not available on Windows platforms.
Torej bom še naprej iskal.

Lp,

fx ::

Koda za WriteInsertSerial.php :
<HTML>
<head></head>
<BODY>
  Vnesite podatek, ki ga zelite poslati na serijska vrata:
  <FORM action="WriteSerial.php" method="POST">
   <INPUT type="text" name="podatek">
   <INPUT type="submit" value="Vnesi!">
  </FORM>
</BODY>
</HTML>


Koda za WriteSerial.php :
<?php
  $Podatek = $_POST['podatek'];
   `mode com1: BAUD=2400 PARITY=N data=8 stop=1 xon=off`;
   $fp = fopen("COM1:", "w+");
   if (!$fp) {
       echo "Vrata so v uporabi!";
   } else {
       echo $Podatek;
       $Podatek = $podatek . " ";
       fwrite($fp, $Podatek);
       fclose ($fp);
   }
   Print("<a href=WriteInserSerial.php><BR><< Nazaj</a>");
?>


To sta kodi kateri vam omogočata da pošiljate podatke na serijska vrata v windowsih.

Sedaj še moram napisati za branje iz vrat.

Lp,

sverde21 ::

Hmm zanimivo... sam za kaj pa nej bi uporabil tole?? Naprav za COM port ne najdeš več skor, boš kej sam zlotu skup pa obesu gor?
<?php echo `w`; ?>

fx ::

Ne jaz, ampak stric. Jaz programiram on lota.

EDIT:

Kako pa naredim, da se mi program sam avtomatično prijavi, kot imajo forum-i to možnost.

Lp,

Zgodovina sprememb…

  • spremenil: fx ()

sverde21 ::

Misliš automatski login? Z piškotki narediš to :) potem pa z sejami naprej (si zapomniš da je uporabnik prestal avtorizacijo ipd.) lahko tudi vse delaš z piškotki ampak kuriš pasovno dolžino pa še piškotke se da lažje zlorabljati (seje so varnejše) ;)

Še nekaj malega o sejah (manual). 8-)
<?php echo `w`; ?>

fx ::

Program ki ga pišem v php bo odrezan od sveta interneta.

Imam en drugi problem.
<?php
 `mode com1: BAUD=2400 PARITY=N data=8 stop=1 xon=off`;
  $fp = fopen("COM1:", "r"); #3
  if (!$fp) {
     echo "Vrata so v uporabi!";
     fclose($fp); #6
  }
  else{
      $Podatek = fread($fp, filesize("COM1:")); 
      fclose ($fp);
      if ($Podatek != " ") {
	     echo $Podatek;
	  }
  }
?>
Če uporbim isto kodo in namesto COM1: uporabim test.txt potem program lepo dela, Ko pa uporabim kodo ki je priložena pa mi program javni dve opozorili:

Warning: fopen(COM1:) [function.fopen]: failed to open stream: Permission denied in C:\AppServ\www\readfile.php on line 3
Vrata so v uporabi!
Warning: fclose(): supplied argument is not a valid stream resource in C:\AppServ\www\readfile.php on line 6

Kaj sem naredil narobe, predvsem mi ni jasno kaj je narobe s fclose() v 6. vrstici.

Lp,

sverde21 ::

probaj z kakšno drugo zastavico mogoče bo delalo turi z "w+" kot imaš pri brisanju (definicija w+ = Open for reading and writing;...) v tej vrstici:
$fp = fopen("COM1:", "r");

fclose ti pa teži zato, ker se zgornja vrstica ne izvrši pravilno, in ne zapiše resourca v spremenljivko $fp.
<?php echo `w`; ?>

fx ::

Ker sem opazil da vsi primeri za serijsko komuunikacijo delajo na linuxu sem se odločil da na linux namestil apacha 2.2.3, MySQL 5.0.24a in PHP 5.1.6. kar mi je tudi uspelo v prvo in je delalo.

Kopriva kako pa to naredim?
Če boš pa delal na *nix sistemu, potem pa glej, da boš enableal to knjižico ...


Lp,

fx ::

A to bi izgledalo nekako tako:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --enable-dio <enter>
# make <enter>
# make install <enter>

ali ne?

fx ::

a res nihče ne ve? Ker med tem časom sem že 3x nanovo namesto apache, mysql in php.

lp,

kopriva ::

Ja, na pravi poti si ... Kaj tisto, kar si napisal, ni uspelo?

fx ::

Ne, ko sem izvedel mi je FF vedno želel index.php prenesti na disk.

Lp,

kopriva ::

Moraš dodat še en stavek, da ti bo PHP strani jemal kot PHP ...

Kopiram iz svojega httpd.conf [sicer teče na Winsih, a če ti pride prav ...]:

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"


Te tri vrstice bi morale zadostovati.

fx ::

Točno jaz pa sem pozabil to naredit ponovno. Hvala ker si me spomno.

Lp,

kopriva ::

Ni kaj! Upam, da ti bo delalo ... Če pa ne bo, pa povej, bomo še probali kaj pogruntat ...

Za zdaj pa lahko noč!

fx ::

PHP sem ponovno namesto oz. bolj posodobo in dela brez problema na koncu configure sem napisal --enable-dio poženem to kodo
<?php

$fd = dio_open('COM1', O_RDWR | O_NOCTTY | O_NONBLOCK);

dio_fcntl($fd, F_SETFL, O_SYNC);

dio_tcsetattr($fd, array(
  'baud' => 9600,
  'bits' => 8,
  'stop'  => 1,
  'parity' => 0
));

while (1) {

  $data = dio_read($fd, 256);

  if ($data) {
     echo $data;
  }
}

?>
In kaj ugotovim, da ne dela in zanimivo je da se program ustavi že pri dio_open in ne gre ne naprej ne nazaj. Seveda sem komunikacijo med dvema pc s pomočjo minicom (Linux) in HT(Win) preveril in dela kot se šika.

Lp,

fx ::

Še za prešnji odgovor! Namesto COM1 bi moralo pisati /dev/ttyS0.

Kaj je narobe s to kodo?
<?php
setcookie("geslo", "12345",time()+3600*72);
setcookie("uporabnik", "root", time()+3600*72);
   $geslo = $_COOKIE['geslo'];
    echo "$geslo <br>";
   $user = $_COOKIE['uporabnik'];
   echo "$user <br>";
?>


Na apache-u ki teče na win dela na linux mašini pa ne (FF vrže samo prazno stran)

Lp,

sverde21 ::

Pritisn refresh :D ...

Razlog, da ti na win pokaže je da je cookie že bil nastavljen...

No za razlago tegale problema je treba malce poseči v zgradbo HTML headerja... torej ko ti zalaufaš tole skripto pošlje FF serverju zahtevo za stran (brez piškotka) in dobi v odgovor tole:
HTTP/1.1 200 OK
Date: Tue, 12 Sep 2006 19:13:37 GMT
Server: Apache/2.0.59
X-Powered-By: PHP/5.1.6
Set-Cookie: geslo=12345; expires=Fri, 15-Sep-2006 19:13:37 GMT
Set-Cookie: uporabnik=root; expires=Fri, 15-Sep-2006 19:13:37 GMT
Content-Length: 10
Connection: close
Content-Type: text/html
kot vidiš tukaj nastaviš cookie, ko pa naslednič hočeš dostopati do strani pa pošlje FF zahtevo za to stran z podatki o piškotku, in šele nato lahko PHP "nafila" svojo $_COOKIE spemenljivko z podatkom o piškotku in prikaže kaj je napisano notri. :)

P.S.: ne priporočam ti pošiljati takole nekodirane podatke v piškotkih, kot sem pokazal zgoraj piškotki potujejo v HTML headerju in zato se jih da prestreči zato je na voljo tudi protokol HTTPS, ki vse podatke zakodira, da če že nekdo prestreže podatke nekaga uporabnika, da jih ne mora uporabiti.
<?php echo `w`; ?>

snow ::

Saj ce ima to na lokalni mašini izolirani od interneta ali za firewallom ni problema.

Ko nastaviš cookie, uporabi location('Header:tjagrem.php') oziroma header('Location:'.$_SERVER['PHP_SELF']) ce želiš na isto stran in da se v prihodnje ne boš rabil zafrkavat z imenom.

Skratka nekaj takega naj bi izgledala stran:

if(isset($_COOKIE['geslo']) && isset($_COOKIE['uporabnik'])
{
    //koda za komunikacijo
}
else
{
    if(isset($_POST['geslo']))
    {
        if($_POST['geslo'] == 'superduperpassword')
        {
			setcookie("geslo", "12345",time()+3600*72);
			setcookie("uporabnik", "root", time()+3600*72);
			header('Location:'.$_SERVER['PHP_SELF']);
        }
		else
		{
			echo 'password je bl bad';
		}
    }
	else
	{
		//obrazec za prijavo
		?>
		<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
		<input type="password" name="geslo">
		<input type="submit" value="send">
		</form>
		<?php
	}
}



Drugače pa je malo lažje in bolj pametno delati z sessioni namesto cookiji.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
!

Postavitev Apache serverja s podporo za PHP in MySQL (strani: 1 2 3 4 5 6 7 )

Oddelek: Izdelava spletišč
322253594 (28259) miko22
»

PHP login skript

Oddelek: Izdelava spletišč
282822 (1408) Lion29
»

Raziskava o ranljivosti spletnih strani z SQL bazami podatkov

Oddelek: Novice / Varnost
204939 (4275) sverde21
»

napaka pri instalaciji foruma

Oddelek: Izdelava spletišč
81401 (1231) no_use4
»

dve spletni strani??

Oddelek: Izdelava spletišč
312417 (1966) MRB0rYS

Več podobnih tem