Domanda

Sto provando a chiamare una funzione da un modulo all'interno dello stesso file .php, ma quando viene premuto il pulsante Invia, la tabella non viene generata.

Ecco il codice:

<p>
<?php
function selectQuery()
{
    $con = mysql_connect("localhost","readonly","");
    if (!$con)
    {
      die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("mediadb", $con);
    $result = mysql_query("SELECT title, director FROM movies WHERE year = '

Sto provando a chiamare una funzione da un modulo all'interno dello stesso file .php, ma quando viene premuto il pulsante Invia, la tabella non viene generata.

Ecco il codice:

<*>

Hai idea del perché questo non funziona?

POST[year_txt]'"); echo "<table border='1' background='lightgray'> <tr> <th>Title</th> <th>Director</th> </tr>"; while($row = mysql_fetch_array($result)) { echo "<tr>"; echo "<td>" . $row['title'] . "</td>"; echo "<td>" . $row['director'] . "</td>"; echo "</tr>"; } echo "</table>"; mysql_close($con); } ?> </p> <p> <!-- start of entry form --> <form action="index.php?action=selectQuery" method="post"> Year: <input type="text" name="year_txt" /> <input type="submit"/> </form> <!-- end of entry form --> </p>

Hai idea del perché questo non funziona?

È stato utile?

Soluzione

Se ti aspetti un numero intero come un anno, prendilo dal superglobal POST come

$year=(int)

Se ti aspetti un numero intero come un anno, prendilo dal superglobal POST come

<*>

E aggiungi un parametro alla tua funzione select per prendere l'anno, quindi esegui come suggerito da SanHolo.

A proposito, nota che ho lanciato la variabile in un numero intero (la parte (int)) nell'esempio che ho fornito. Il codice come lo hai è un enorme buco di sicurezza. È necessario cercare la santizzazione dei dati, l'iniezione di SQL e, eventualmente, le istruzioni preparate con parametri (consultare PDO).

Dove hai inserito $ _POST ['year_txt'], qualcuno potrebbe inserire ANYTHING direttamente nella tua istruzione SQL ... Come, " 90; elimina dai filmati dove 1; " ;. Dai un'occhiata all'istruzione SQL che verrebbe creata!

Non mai stampare l'input fornito dall'utente e Certamente non inserirlo in un comando SQL senza prima averne verificato l'integrità e sanificarlo. Se è un numero, esegui il cast in int. Se ricevi una stringa, usa preg_replace per filtrare eventuali caratteri dispari. Puoi anche utilizzare alcune funzioni filter_var di PHP - http://php.net/manual /en/function.filter-var.php

POST['year_txt'];

E aggiungi un parametro alla tua funzione select per prendere l'anno, quindi esegui come suggerito da SanHolo.

A proposito, nota che ho lanciato la variabile in un numero intero (la parte (int)) nell'esempio che ho fornito. Il codice come lo hai è un enorme buco di sicurezza. È necessario cercare la santizzazione dei dati, l'iniezione di SQL e, eventualmente, le istruzioni preparate con parametri (consultare PDO).

Dove hai inserito $ _POST ['year_txt'], qualcuno potrebbe inserire ANYTHING direttamente nella tua istruzione SQL ... Come, " 90; elimina dai filmati dove 1; " ;. Dai un'occhiata all'istruzione SQL che verrebbe creata!

Non mai stampare l'input fornito dall'utente e Certamente non inserirlo in un comando SQL senza prima averne verificato l'integrità e sanificarlo. Se è un numero, esegui il cast in int. Se ricevi una stringa, usa preg_replace per filtrare eventuali caratteri dispari. Puoi anche utilizzare alcune funzioni filter_var di PHP - http://php.net/manual /en/function.filter-var.php

Altri suggerimenti

Non vedo dove si CHIAMA effettivamente la funzione, la definisci solo. Devi implementare un blocco che legge qualcosa del genere:

if (isset(

Non vedo dove si CHIAMA effettivamente la funzione, la definisci solo. Devi implementare un blocco che legge qualcosa del genere:

<*>GET['action'])) { if ('selectQuery' ==

Non vedo dove si CHIAMA effettivamente la funzione, la definisci solo. Devi implementare un blocco che legge qualcosa del genere:

<*>GET['action']) { selectQuery(); } }

Ok, ecco una versione riscritta. Ovviamente non è ancora l'ideale ma questo dovrebbe aiutare.

<html>
<head><title>Movies, yo</title></head>
<body>

<?php
$year=(int)

Ok, ecco una versione riscritta. Ovviamente non è ancora l'ideale ma questo dovrebbe aiutare.

<*>POST['year_txt']; function selectQuery($year) { $con = mysql_connect("localhost","readonly",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("mediadb", $con); $result = mysql_query("SELECT title, director FROM movies WHERE year = $year"); $movie_results=array(); while($row = mysql_fetch_array($result)) { $movie_results[]=$row; } mysql_close($con); return $movie_results; } function print_movies($movie_array) { ?> <table border='1' background='lightgray'> <tr> <th>Title</th> <th>Director</th> </tr> <?php foreach($movie_array as $a_movie) { ?> <tr> <td><?php echo $a_movie['title'];?></td> <td><?php echo $a_movie['director'];?></td> </tr> <?php }//end foreach movie_array?> </table> <?php }?> <p> <!-- start of entry form --> <form action="index.php" method="post"> Year: <input type="text" name="year_txt" value='<?php echo $year;?>'/> <input type='hidden' value='selectQuery' name='action'/> <input type="submit"/> </form> <!-- end of entry form --> </p> <?php if ('selectQuery'==

Ok, ecco una versione riscritta. Ovviamente non è ancora l'ideale ma questo dovrebbe aiutare.

<*>POST['action']) { if ($year>0) $movie_results=selectQuery($year); if(!empty($movie_results)) { print_movies($movie_results); } else { echo "No movie was found for $year<br>"; } }//end if 'year is valid' else { echo "Please enter a valid year<br>"; } }//end if 'action was selectQuery' ?> </body> </html>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top