Problém s PHP scriptem.

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Problém s PHP scriptem.

Příspěvek 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
Lemra
Čestný člen
Čestný člen
Uživatelský avatar
Registrován: 03. zář 2003

Příspěvek od Lemra »

Kód: Vybrat vše

$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST["nick"]);
Co ty uvozovky? :twisted:
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek od MILHI »

Lemra píše:

Kód: Vybrat vše

$zaznamy = mysql_query("SELECT * FROM zensky WHERE nick=".$_POST["nick"]);
Co ty uvozovky? :twisted:

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
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek 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 :)
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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....
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek od sheriff.wiggum »

napis jakej parse error to pise
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek 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');
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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]
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek 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
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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?
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek od sheriff.wiggum »

cim je tohle netusim na hostingu mi to nedela. localhost jsem nezkousel. imho to tim nastavenim bude :)

// register globals off?
Naposledy upravil(a) sheriff.wiggum dne sob 25. úno 2006, 16:57, celkem upraveno 1 x.
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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ý :o)) 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ě. :o///
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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)
sheriff.wiggum
Začátečník
Začátečník
Uživatelský avatar
Registrován: 08. dub 2005
Bydliště: Skotsko/Ceska republika
Kontaktovat uživatele:

Příspěvek od sheriff.wiggum »

mas zaple register globals? prej to muze byt tim
MILHI
Začátečník
Začátečník
Uživatelský avatar
Registrován: 31. črc 2005
Kontaktovat uživatele:

Příspěvek 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 :)
next_ghost
Začátečník
Začátečník
Registrován: 12. kvě 2005
Bydliště: Chomutov
Kontaktovat uživatele:

Příspěvek od next_ghost »

sheriffe, máš tam jenom vyplý warningy (na webhostingu běžný, z bezpečnostních důvodů). Čistej kód vypadá takhle:

Kód: Vybrat vše

if(isset($_POST['odesli']))
Když se předtim nevodešle formulář, tak $_POST[] nemá žádnej index pojmenovanej 'odesli', tak to bude nadávat.
sovicka
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 17. pro 2003
Bydliště: východní prágl
Kontaktovat uživatele:

Příspěvek 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
Francie ... sladká Francie
Odpovědět

Zpět na „Programování a web“