Stránka 1 z 1
Problém s PHP scriptem.
Napsal: čtv 23. úno 2006, 20:47
od MILHI
Zdravím. Učím se PHP a ještě na tom nejsem zrovna nejlíp. Napsal sem takový jednodušší script, který má vstup pomocí formuláře porovnat s daty v databázi a vypsat heslo uživatele, který je zadán na vstupu. Problém je že při zápisu který je níže mi to vyhodí chybu
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\documents and settings\mlha\plocha\php\index.php on line 29
Zde je samotný zápis:
<form method="post" action="<?echo $_SERVER["PHP_SELF"]?>">
Nick: <input name="nick">
<input type="Submit" name="odesli">
</form>
<?
If (!empty($_POST))
{
include ("config.php");
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Nelze se připojit k MySQL: " . mysql_error());
mysql_select_db(SQL_DBNAME) or die("Nelze vybrat databázi: ". mysql_error());
$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST["nick"]);
while ($tisk = mysql_fetch_array($zaznamy)):
echo $tisk["heslo"]."<BR>\n";
endwhile;
}
?>
problém bude pravděpodobně v tom WHERE v příkazu SELECT, když zapíšu WHERE nick='Dement z databáze' tak to opravdu najde Dementa z databáze a vypíše to jeho heslo, jak chci ale zadávat informace z formuláře narazím na výše popsanou chybu. Pokud máte někdo znalosti a mohl byste mi poradit v čem je problém, byl bych za to moc vděčný. Děkuji
Napsal: čtv 23. úno 2006, 21:06
od Lemra
Kód: Vybrat vše
$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST["nick"]);
Co ty uvozovky?

Napsal: pát 24. úno 2006, 17:28
od MILHI
Lemra píše:Kód: Vybrat vše
$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST["nick"]);
Co ty uvozovky?

Co s nima? Ty by měly bet dobře ne? první blok končí za nick= a k tomu je tečkou připojen post nicku.... myslim že takhle by to mělo fungovat.... ale nefunguje
Napsal: pát 24. úno 2006, 18:07
od sheriff.wiggum
$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST['nick']."");

mas select ("") a do toho vnorene ".$bla." proste uvozovky
// muzes jeste pridat WHERE nick = '".$_POST['nick']."' aby to bylo pekne

Napsal: pát 24. úno 2006, 23:59
od MILHI
sheriff.wiggum píše:$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST['nick']."");

mas select ("") a do toho vnorene ".$bla." proste uvozovky
// muzes jeste pridat WHERE nick = '".$_POST['nick']."' aby to bylo pekne

Problém je že když to tak zapíšu tak mi to hodí Parse error, používam PHP4 jestli to má nějakej vliv....
Napsal: sob 25. úno 2006, 11:29
od sheriff.wiggum
napis jakej parse error to pise
Napsal: sob 25. úno 2006, 11:57
od MILHI
sheriff.wiggum píše:napis jakej parse error to pise
Tak ne, když to zapíšu přesně jako si mi napsal ty, tak to nehází Parse error, ale taky varování jako když jsem to psal stejně jako dřív. Každopádně je to proto že to co mi radíš je vlastně to samí jako sem zapisoval já, akorát že ty k tomu pak ještě ."" připojíš prázdnej "znak". Takže to vlastně hází stejný varování ale nevim v čem je právě problém. Vyplivne to na mě tohle varování:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\documents and settings\mlha\plocha\php\index.php on line 28
Napsal: sob 25. úno 2006, 14:04
od sheriff.wiggum
co mas v tom configu? prihlasis se spravne do mysql? navic nechapu to while kdyz vybiras jen jeden radek ...
//
Kód: Vybrat vše
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>">
Nick: <input name="nick">
<input type="Submit" name="odesli">
</form>
<?php
$sql_server = ("");
$sql_user = ("");
$sql_password = ("");
$sql_database = ("");
if($_POST['odesli'])
{
@mysql_pconnect($sql_server, $sql_user, $sql_password) or die("Nelze se připojit k databázi.");
@mysql_select_db($sql_database) or die("Nelze se připojit k databázi.");
$sql_dotaz = "SELECT * FROM test WHERE nick = '".$_POST['nick']."'";
$dotaz = mysql_query($sql_dotaz) or exit (mysql_error());
$zaznam = @mysql_fetch_array($dotaz);
echo $zaznam['heslo'];
}
?>
Kód: Vybrat vše
--
-- Struktura tabulky `test`
--
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`nick` varchar(20) NOT NULL default '',
`heslo` varchar(32) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
--
-- Vypisuji data pro tabulku `test`
--
INSERT INTO `test` VALUES (1, 'pct', 'pct');
Napsal: sob 25. úno 2006, 15:37
od MILHI
sheriff.wiggum píše:co mas v tom configu? prihlasis se spravne do mysql? navic nechapu to while kdyz vybiras jen jeden radek ...
Mno tak v tom configu mam :
Kód: Vybrat vše
<?
if ($_SERVER["SERVER_ADDR"]=="127.0.0.1")
{
define("SQL_HOST","localhost");
define("SQL_DBNAME","new_db");
define("SQL_USERNAME","root");
define("SQL_PASSWORD","tady mam heslo");
}
else
{
define("SQL_HOST","mysql.nekde.cz");
define("SQL_DBNAME","databaze_u_providera");
define("SQL_USERNAME","user2");
define("SQL_PASSWORD","password2");
}
?>
Btw. do databáze se přihlásim a funguje to. Když například použiju "SELECT * FROM zensky WHERE rok>1980" tak to opravdu vypíše všechny z databáze narozený po roce 1980. Ale jak použiju POST z formuláře tak to nefunguje. Zkoušel sem tvůj zápis, už to nehází Warning, ale to bude pravděpodobně jen kvůli tomu @. A stejně to nefunguje ;o) Nevybere to z databáze ani čárku.
Kód sem přepsal podle tebe na:
Kód: Vybrat vše
<?
If (!empty($_POST))
{
include ("config.php");
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Nelze se připojit k MySQL: " . mysql_error());
mysql_select_db(SQL_DBNAME) or die("Nelze vybrat databázi: ". mysql_error());
$sql_dotaz = "SELECT * FROM zensky WHERE nick = '".$_POST['nick']."'";
$dotaz = mysql_query($sql_dotaz) or exit (mysql_error());
$zaznam = @mysql_fetch_array($dotaz);
echo $zaznam['heslo'];
}
?>
[/code]
Napsal: sob 25. úno 2006, 16:19
od sheriff.wiggum
Kód: Vybrat vše
CREATE TABLE `zensky` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`nick` VARCHAR( 20 ) NOT NULL ,
`heslo` VARCHAR( 32 ) NOT NULL ,
PRIMARY KEY ( `id` )
) TYPE = MYISAM ;
Kód: Vybrat vše
INSERT INTO `zensky` ( `id` , `nick` , `heslo` )
VALUES (
'', 'pct', 'pct'
);
Kód: Vybrat vše
<?php
define("SQL_HOST","xxx");
define("SQL_DBNAME","xxx");
define("SQL_USERNAME","xxx");
define("SQL_PASSWORD","xxx");
?>
Kód: Vybrat vše
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>">
Nick: <input name="nick">
<input type="Submit" name="odesli">
</form>
<?php
if($_POST['odesli'])
{
include ("./config.php");
mysql_connect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD) or die("Nelze se pøipojit k MySQL: " . mysql_error());
mysql_select_db(SQL_DBNAME) or die("Nelze vybrat databázi: ". mysql_error());
$sql_dotaz = "SELECT * FROM zensky WHERE nick = '".$_POST['nick']."'";
$dotaz = mysql_query($sql_dotaz) or exit (mysql_error());
$zaznam = @mysql_fetch_array($dotaz);
echo $zaznam['heslo'];
}
?>
napisu pct a vypise se pct

tak jako v predchozim skriptu co jsem posilal
Napsal: sob 25. úno 2006, 16:42
od MILHI
sheriff.wiggum píše:...
Tak jo, udělal sem to přesně podle tebe a nakopíroval tvůj kód a funguje to ano. Nevim v čem sem dělal chybu, každopádně při prvnim spuštění stránky to hodí
Notice: Undefined index: odesli in c:\documents and settings\mlha\plocha\php\index.php on line 23
A bylo by docela vhodný se tohohle upozornění zbavit. Tobě to nedělá? Nemůže to nějak souviset s nastavením PHP?
Napsal: sob 25. úno 2006, 16:46
od sheriff.wiggum
cim je tohle netusim na hostingu mi to nedela. localhost jsem nezkousel. imho to tim nastavenim bude
// register globals off?
Napsal: sob 25. úno 2006, 16:52
od MILHI
sheriff.wiggum píše:cim je tohle netusim na hostingu mi to nedela. localhost jsem nezkousel. imho to tim nastavenim bude

Hmm, tak to je potom špatný

)) Já taky nevim čim to je a pochybuju že to v nastavení jen tak najdu. Takže se asi můžu jít tak trochu odstřelit. Kdyby to neházelo tu dementní hlášku tak by to bylo už v pohodě.

///
Napsal: sob 25. úno 2006, 16:56
od MILHI
Ha, výborně. podmínku jsem použil opět tu mojíif(!empty($_POST)) a už to funguje. Tak teď vážně nevim v čem byl problém. Každopádně děkuju za pomoc. Už to funguje.... tak teď to budu opisovat do zblbnutí abych se to naučil a už nedělal hovadiny jako předtim... díky ;o)
Napsal: sob 25. úno 2006, 16:58
od sheriff.wiggum
mas zaple register globals? prej to muze byt tim
Napsal: sob 25. úno 2006, 17:25
od MILHI
sheriff.wiggum píše:mas zaple register globals? prej to muze byt tim
Ee, nemam. Prej když je to vyplý tak je to bezpečnější. Každopádně děkuju za pomoc. Bez tebe bych to nevyřešil. Díky

Napsal: sob 25. úno 2006, 18:55
od next_ghost
sheriffe, máš tam jenom vyplý warningy (na webhostingu běžný, z bezpečnostních důvodů). Čistej kód vypadá takhle:
Když se předtim nevodešle formulář, tak $_POST[] nemá žádnej index pojmenovanej 'odesli', tak to bude nadávat.
Napsal: pon 27. úno 2006, 21:59
od sovicka
Přesně tak, na většině serverů pro development jsou zapnutý notices, který tě upozorní i na nedefinovanou proměnou - register_globals na to nemá vliv...
nastavuje se v php.ini (u php.ini-recomended je to na řádce 350)
Kód: Vybrat vše
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; error_reporting is a bit-field. Or each number up to get desired error
; reporting level
; E_ALL - All errors and warnings (doesn't include E_STRICT)
; E_ERROR - fatal run-time errors
; E_WARNING - run-time warnings (non-fatal errors)
; E_PARSE - compile-time parse errors
; E_NOTICE - run-time notices (these are warnings which often result
; from a bug in your code, but it's possible that it was
; intentional (e.g., using an uninitialized variable and
; relying on the fact it's automatically initialized to an
; empty string)
; E_STRICT - run-time notices, enable to have PHP suggest changes
; to your code which will ensure the best interoperability
; and forward compatibility of your code
; E_CORE_ERROR - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
; initial startup
; E_COMPILE_ERROR - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR - user-generated error message
; E_USER_WARNING - user-generated warning message
; E_USER_NOTICE - user-generated notice message
;
; Examples:
;
; - Show all errors, except for notices and coding standards warnings
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors, except coding standards warnings
;
error_reporting = E_ALL