PDA

Visualizza versione completa : sto sclerando da una settimana


a_nello
10-11-2003, 22.34.37
ciao a tutti.
ho un problema che non riesco a risolvere da una settimana
ho installato apache 2.0.47 php 4.3.2 e phpmyadmin 2.5.1
ho un database vedi sotto:
cognome nome numero_personale stipendio data_di_nascita
Rossi Mario 6714 3500.00 1962-03-15
Colombo Anna 2297 3621.00 1959-12-30
Brambilla Giuseppe 81343 3750.00 1958-04-12
ed ho cresto uno script del genere:

<html>
<body>
<?php
$db=mysql_connect();
$sqlinterr="select cognome,stipendio";
$sqlinterr.="from persone where";

if($stip==1)
$sqlinterr.="stipendio<=3000,00";
else if($stip==2)
$sqlinterr.="stipendio >3000,00 and stipendio<=3500,00";
else if($stip==3)
$sqlinterr.="stipendio>3500,00 and stipendio<=5000,00";
else
$sqlinterr.="stipendio >5000,00";

$res=mysql_db_query("azienda",$sqlinterr);
$num=mysql_num_rows($res);
if($num==0)
echo"nessun record trovato";

for ($i=0;$i<$num;$i++)
{
$cg=mysql_result($res,$i,"cognome");
$st=mysql_result($res,$i,"stipendio");
echo"$cg,$st<br>";
}
mysql_close($db);
?>
</body>
</html>

FORM HTML:

<html>
<body>
Elenco delle persone con stipendio:
<form action="uf10.php" method="post">

<input type="radio" name="stip" value="1" checked>
fino a 3000,00 compreso<p>
<input type="radio" name="stip" value="2">
da 3000,00 a 3500,00 compreso<p>
<input type="radio" name"stip" value="3">
da 3500,00 a 5000,00 compreso<p>
<input type="radio" name="stip" value="4">
oltre 5000,00<p>

<input type="submit">
<input type="reset">
</form>
</body>
</html>

lo ho copiato da un libro (PROGRAMMARE CON PHP4)
quando vado per testarlo mi da questo errore :

Notice: Undefined variable: stip in C:\Programmi\Apache Group\Apache2\htdocs\uf\uf10.php on line 8

Notice: Undefined variable: stip in C:\Programmi\Apache Group\Apache2\htdocs\uf\uf10.php on line 10

Notice: Undefined variable: stip in C:\Programmi\Apache Group\Apache2\htdocs\uf\uf10.php on line 12

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programmi\Apache Group\Apache2\htdocs\uf\uf10.php on line 18
nessun record trovato

non ci capisco piu niente aiutatemi.
:confused:

quipo.it
12-11-2003, 09.29.28
beh, intanto dopo la chiamata a mysql_connect() [con i vari parametri], devi selezionare il db con mysql_select_db().

I NOTICEs che vedi sono causati da un settaggio di php.ini, nello specifico "register_globals" che dalla v. 4.1 di PHP stato messo su "off". Per far funzionare il tuo script, non puoi chiamare direttamente la variabile $stip, perch non stata definita nella pagina. Quel che cerchi "$_POST['stip']", e puoi inserire una cosa del genere all'inizio della pagina:

$stip = (int)$_POST['stip'];


Poi stai sbagliando a concatenare le stringhe:
$sqlinterr="select cognome,stipendio";
$sqlinterr.="from persone where";
$sqlinterr.="stipendio<=3000,00";

ti viene fuori una cosa del genere:
"select cognome,stipendiofrom persone wherestipendio<=3000,00"
devi mettere uno spazio all'inizio della stringa, cos:
$sqlinterr='select cognome,stipendio';
$sqlinterr.=' from persone where';
$sqlinterr.=' stipendio<=3000,00';

Un'altra cosa: la funzione "mysql_db_query" stata sconsigliata a partire dal PHP 4.0.6. Non usare questa funzione. Usa invece mysql_select_db() e mysql_query().

HTH

a_nello
12-11-2003, 11.51.31
grazie adesso faccio un paio di prove e ti faro sepere.

a_nello
12-11-2003, 19.01.26
inserendo il codice $stip = (int)$_POST['stip']; e facendo qualche altri ritocchini di sintassi sembra andare bene.
Mi sembra strano che sul libro che sto seguendo non ci siano scritte queste cose, infatti lo script che ti ho proposto stato copiato dal libro come ti dicevo(PROGRAMMARE con PHP4 dell'Apogeo)
Mha....!!!
inoltre potresti spiegarmi quel pezzettino di codice che mi hai scritto e perche si inserisce (int).
Te ne sarei molto grato, ci sentiamo, a molto presto e grazie mille

quipo.it
12-11-2003, 19.22.28
Se vuoi imparare il PHP, il tuo miglior amico il manuale. Vai a questa pagina: http://www.php.net/download-docs.php e scaricati il formato che preferisci.

Dal PHP 4.1 sono stati introdotti gli array "superglobali", che sono $_POST, $_GET, $_SESSION, $_SERVER, pi altre che trovi qui:
http://www.php.net/manual/it/language.variables.predefined.php

Sono stati introdotti principalmente per aumentare la sicurezza, e per controllare lo scope delle variabili. Prima esistevano degli array simili, $HTTP_*_VARS.

Quando tu cerchi di accedere alla variabile $stip creata dal form della pagina precedente, devi stare attento a come viene creata: nel tag <form> c' l'attributo action="post", quindi la tua variabile verr memorizzata nell'array $_POST.

Ho inserito (int) per forzare il casting ad un intero ( buona regola non fidarsi mai degli input esterni, e controllare sempre i tipi di dato in ingresso). Non strettamente necessario, ma una buona pratica di sicurezza.

Il fatto che lo script che hai trovato sul libro non funziona dipende da questo cambiamento nel linguaggio, ora il settaggio "register_globals" su "off" di default, altrimenti il tuo script sarebbe stato eseguito correttamente (a parte gli altri errori degli spazi mancanti).

Un'altra cosa... per definizione, ogni libro che viene stampato e che parla di un linguaggio, se tale linguaggio ancora sotto attivo sviluppo, allora il libro gi vecchio prima di venire messo in vetrina ;)