PDA

View Full Version : Urgente php e mysql


Iuzzo
15-12-2003, 22:42
Ciao ragazzi, ho un problema con php. Tra pochi giorni debbo consegnare una tesina per un esame e sono 2 giorni che perdo tempo appresso a sta cosa.
Debbo recuperare i dati da un db mysql v4.1.0 alpha con una query php v4.3.4. I suddetti dati (una colonna di n numeri) li debbo mettere in una lista di selezione su una pagina html (salvata con estensione.php). Le istruzioni che uso sono le seguenti:

<?php
$connection = mysql_connect("localhost", "root", "")
or die ("Connessione fallita!".mysql_errno().mysql_error());
if($connection) mysql_select_db("Telefonia");

$query="SELECT Numero FROM contratto";

$ris=mysql_query($query)
or die("Problema nella lettura dei numeri".mysql_errno().mysql_error());

?>
Numero: <SELECT name="numero">
<OPTION Value=0>Seleziona un numero
<?php
While(mysql_fetch_row($ris))
echo "<OPTION Value=$ris[0]>$ris[0] </OPTION>";
?>
</SELECT>

In realtà, la query trova il numero giusto di elementi lo capisto perchè mi aggiunge alla lista N righe vuote, dove N è corretto (ho controllato),anche stampando direttamente il risultato della select con echo o print dentro lo script, mi trovo sempre con campi vuoti.

vi ringrazio anticipatamente

recoil
16-12-2003, 00:36
ho lavorato su php e mysql fino ad ora e scusami se magari dico cose banali ma poi me ne vado a letto...

non è che il problema sta nel mysql_fetch_row?
io uso sempre mysql_fetch_array perché mi pare che avevo avuto qualche problema con altri tipi di funzioni (forse proprio la fetch_row che usi tu).

cmq non sono un grande esperto di php, devo riconoscerlo... ma tu intanto prova, ci metti un attimo

Iuzzo
16-12-2003, 10:33
Avevo già provato, sia con mysql_fetch_row sia con mysql_fetch_array, sia con mysql_fetch_object, ma danno tutti lo stesso esito. Non c'è nessun "guru" del php qui nel forum che mi possa aiutare?

cmq recoil grazie lo stesso.

Python
16-12-2003, 14:16
Originariamente inviato da Iuzzo
<?php
$connection = mysql_connect("localhost", "root", "")
or die ("Connessione fallita!".mysql_errno().mysql_error());
if($connection) mysql_select_db("Telefonia");

$query="SELECT Numero FROM contratto";

$ris=mysql_query($query)
or die("Problema nella lettura dei numeri".mysql_errno().mysql_error());

?>
Numero: <SELECT name="numero">
<OPTION Value=0>Seleziona un numero
<?php
While(mysql_fetch_row($ris))
echo "<OPTION Value=$ris[0]>$ris[0] </OPTION>";
?>
</SELECT>


scusa non è che mi diresti com'è composta la tabella?

cioè non ho capito il problema, cosa devi visualizzare in quella lista? e come è strutturata la tabella?

cioè se devi far vedere singoli numeri tanto vale che conti quante righe escono dalla query e fai u nwhile semplicissimo....



<?php
While(mysql_fetch_row($ris))
echo "<OPTION Value=$ris[*?label-colonna?*]>$ris[*?label-colonna?*] </OPTION>";
?>

Python
16-12-2003, 14:22
se devi creare una lista con la scelta di opzioni solo numeri (cioè una lista di numeri, tanti quante sono le righe uscite dalla query) fai semplicemente cosi

Originariamente inviato da Iuzzo
<?php
$connection = mysql_connect("localhost", "root", "")
or die ("Connessione fallita!".mysql_errno().mysql_error());
if($connection) mysql_select_db("Telefonia");

$query="SELECT Numero FROM contratto";

$ris=mysql_query($query)
or die("Problema nella lettura dei numeri".mysql_errno().mysql_error());

$numfind = mysql_num_rows($ris);

?>
Numero: <SELECT name="numero">
<OPTION Value=0>Seleziona un numero
<?php
$num = "1";

While($numfind != "0"){
echo "<OPTION Value=$num]>$num </OPTION>";
$num++;
$numfind--; /* si diminuiva cosi? :D */
}

?>
</SELECT>

Iuzzo
16-12-2003, 21:34
La tabella contiene dei numeri telefonici oltre che ad altri dati.
Quendi dalla tabella debbo estrarre tutti i numeri telefonici (solo), e debbo poterli selezionare da una lista. Come corrispondente valore per ogni numero selezionato, debbo avere lo stesso numero.

spero di essermi spiegato un po' meglio, ammetto che probabilmente non sono stato molto chiaro con il primo post.

Python
16-12-2003, 22:00
cioè tipo così?

<OPTION Value=028783409>028783409</OPTION>

allora al posto di 0 devi mettere il label che hai dato alla colonna contenente i numeri di telefono nella tua tabella




<?php
While(mysql_fetch_array($ris))
echo "<OPTION Value=\"$ris[*?label-colonna?*]\">$ris[*?label-colonna?*] </OPTION>";
?>



e non 0

Iuzzo
16-12-2003, 22:30
Ho provato come mi hai detto, non funziona, ma cmq era una prova che avevo già fatto. Usando mysql_fetch_row($ris) , per accedere ai dadi di ris, bisogna usare l'indice nomerico, se invece usi mysql_fetch_object($ris) allora devo usare l'indice associativo (la label della colonna che vuoi leggere), se usi mysql_fetch_array($ris,OPT), hai la possibilità di scegliere quale indice utilizzare, quello numerico, quello associativo o entrambi. Ho provato tutte queste soluzioni, il risultato è sempre quello, una lista con N righe bianche al posto dei numero telefonici (dove N rappresenta il giusto numero di righe che dovrebbero agiungersi alla lista).

Non ti viene in mente niente, anche qualche trucco per aggirare l'ostacolo?? Io ci sto diventando matto!! Ho messo le mani sul php per la prima volta 6 giorni fa e già mi stà passando la voglia di usarlo :muro: . Oggi ho scaricato un sacco di esempi di script e tutti funzionano bene.... solo il mio fa i capricci!!:cry: :cry: :cry:

Python
17-12-2003, 13:29
prova una cagata simile :D




<?php
While(mysql_fetch_array($ris))

$temp = $ris[label];

echo "<OPTION Value=\"$temp\">$temp </OPTION>";
?>

Iuzzo
17-12-2003, 16:53
Ho risolto, non so come, ho riscritto il codice ed ora funziona. Ti riporto di seguito l'attuale codice, confrontalo con quello che avevo scritto prima e dimmi che cambia (apparte il nome delle variabili)!..:confused: :confused:

<?php
$db_con = mysql_connect("localhost","root","")
or die("Problema nella nella connessione".mysql_errno().mysql_error());
if($db_con) mysql_select_db("telefonia");

//$db_query="SELECT Numero FROM contratto";
?>

<

<?php

echo "Numero: <SELECT name=\"numero\">";
echo "<OPTION Value=0>Seleziona un numero";

$db_ris=mysql_query("Select Numero from contratto;")
or die("Problema nella lettura dei numeri".mysql_errno().mysql_error());

while ($row = mysql_fetch_row($db_ris))
echo "<option value=\"$row[0]\">$row[0]</option>\n";

echo "</select>";

?>


ciao

Iuzzo
17-12-2003, 17:11
Ora ho un'altro problema! :mad:
In base ad un confronto (un if) fra due stringhe, debbo selezionare o meno un elemento di una lista di selezione. Rispettivamente le due stringhe sono: 1) un parametro (valore di una text box della pag php precedente) passato attraverso html (action="pagina.php"?parametro) e caricato tramite $HTTP_GET_VARS. 2) una stringa risultante da una select (che restituisce tutti i valori di una colonna di una tabella). Ora, anche essendo sicuro che la 1 è presente nella 2, non c'è verso di effettuare questo confronto per ottenere il giusto risultato!! Non capisco se il problema, ho provato con "strcmp","strncmp","==", ho provato a convertire entrambe in stringhe con "sprintf" per poi fare il confronto, ma non ne vengo fuori!!!
Giuro, il php mi sta simpatico... perchè lui invece ce l'ha con me?:cry:

Python
17-12-2003, 17:56
prova cosi




$stringa1 = "ciao";
$stringa2 = "ciaoamico";

if ( strchr($stringa2, $stringa1) ){


}



la funzione strcmp() esegue un confronto case-sensitive tra due stringhe str1 e str2 restituendo un valore minore di 0 se str1 è minore di str2, uguale a 0 se str1 è uguale a str2, maggiore di 0 se str1 è maggiore di str2


ciao

Iuzzo
18-12-2003, 10:11
Ho risolto anche questo. :D :D Il problema non era usare strcmp o strcasecmp, lo conoscevo lil loro utilizzo, il problema (penso sia un bug di php :confused: ), è che la variabile che passavo la chiamavo "par", una volta importata la salvavo così $Par=$http_get_vars["par"];. E poi non so cosa diavolo succedeva ma, in sostanza, non funzionava il confronto. Cambiando nome a $Par in $par (minuscolo) ed utilizzando strncasecmp() sui primi 16 caratteri, tutto funziona come dovrebbe.
Ancora grazie per l'aiuto.
Ora vorrei fare una cosa ma non so se è possibile. In base alla selezione di un controllo "radio" (penso si chiami così, le caselle per la selezione), vorrei far comparire dei campi di input piuttosto che altri (le possibili scelte sono 2) sulla stessa pagina che ospita il controllo. Dovrebbe essere possibile, e dovrebbe entrarci qualcosa l'azione $PHP_SELF, di cui però il manuale che ho io non parla (dice solo che esiste :rolleyes: ).

ps:giuro che poi non rompo + le scattole!

ciao e di nuovo grazie