[PHP][MY SQL] - Estrazione dati database tramite form

  • Creatore Discussione Creatore Discussione Caibo81
  • Data di inizio Data di inizio

Caibo81

Nuovo Utente
4 Nov 2014
8
0
1
Salve a tutti ;)

Sono un grafico e ho pochissima dimistichezza con il php e la progettazione web in generale.
Sto lavorando per un'associazione onlus senza scopo di lucro e chi si occupava della scrittura del codice php mi ha abbandonato nel bel mezzo del progetto.
Fortunatamente tra tutorial e guide varie sono riuscito a creare ciò che mi serviva ad eccezione di una pagina.
Questa pagina in pratica dovrà visualizzare dati presenti nel database del sito che io minuziosamente ho già inserito.
La tabella che contiene i dati è composta da 4 campi quali "id, data (formato yyyy-mm-gg), titolo, contenuto".
In pratica chi visualizzerà la pagina vedrà a video l'articolo del giorno composto da titolo e contenuto e all'occorrenza scegliere l'articolo in base alla data.

es: Pinco Pallino visualizza di default l'articolo del giorno, ma avrà a disposizione, grazie ad un menù a tendina, la possibilità di cambiare il giorno. Non sò se sono stato chiaro e per questo mi scuso in anticipo.
Spero mi possiate aiutare. Comunque sia vi ringrazio tutti.
 
Cioa, ma hai già provato a buttar giù qualcosa ?
PHP:
$data = date("Y-m-d");
if(isset($_POST['data'])) {
    $data = $_POST['data'];
}
$query = "SELECT * FROM tabella WHERE data = '$data'";
 
Intanto grazie per la risposta. Comunque più che buttare giù, ho letteralmente copiato il codice da questo forum ed è il seguente:

Codice:
<?
/* dichiariamo alcune importanti variabili per collegarci al database */
$DBhost = "Hostname o IP del tuo database";
$DBuser = "il tuo username";
$DBpass = "la tua password";
$DBName = "il nome del database";

/* specifichiamo il nome della nostra tabella */
$table = "amici";

/* Connettiamoci al database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");

/* impostiamo la query e cerchiamo solo le amiche donne...*/
$sqlquery = "SELECT * FROM $table WHERE sex = 'donna'";
$result = mysql_query($sqlquery);
$number = mysql_num_rows($result);

$i = 0;
if ($number < 1) {
  print "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
}else{
  while ($number > $i) {
    $nome = mysql_result($result,$i,"nome");
    $email = mysql_result($result,$i,"email");
    echo "<p><b>Nome:</b> $nome<br>
    <b>E-Mail:</b> $email</p>";
    $i++;
  }
}
?>

Dopo aver settato tutto, funziona alla perfezione, tranne per il fatto che il valore nella query lo devo inserire manualmente.
A me servirebbe creare un form data (se col calendario meglio ancora), dove l'utente avrà la possibilità di scegliere l'articolo relativo alla data e che di default esca l'articolo del giorno corrente.
Mi scuso in anticipo per quanto sono capra in merito :)
 
Ciao, se ho ben capito ti serve un form in cui scegliere la data della pubblicazione di un articolo (magari con un calendario) e mostrare a video i risultati. Se è questo che cerchi di ottenere allora il processo è molto semplice.
Per prima cosa ti serve un form con cui interagire con il databae in modo da non modificare la query manualmente.

Ti ho creato un form in cui viene mostrato il calendario. Il form salvalo con estensione .php...esempio form.php

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento senza titolo</title>
</head>
<meta charset="utf-8">
<title>jQuery UI Datepicker - Default functionality</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
</script>
</head>
<body>
<form action="insert_article.php" method="post">
<span>Data inserimento articolo:</span><br />
<input type="text" name="data" id="datepicker">

<input type="submit" name="submit" value="Cerca" />
</form>
</body>
</html>

Il valore della data scelta è racchiuso all'interno del valore data, ovvero name="data".
Ora dobbiamo solo far passare questo valore al database. Per fare questo ho modificato il tuo file precedente e creato una tabella in cui verranno visualizzati i dati.
Il file l'ho denominato insert_article.php (vedi action="insert_article.php). Ovviamente puoi creare una cartella a parte se vuoi.

Fatto questo basta semplicemente cliccare sul tasto Cerca e il tutto verrà stampato a video.

Questo è il file insert_article.php:

PHP:
<?
/* dichiariamo alcune importanti variabili per collegarci al database */
$DBhost = "Hostname o IP del tuo database";
$DBuser = "il tuo username";
$DBpass = "la tua password";
$DBName = "il nome del database";

/* specifichiamo il nome della nostra tabella */
$table = "amici";

/* Connettiamoci al database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");


//VERIFICO L'INVIO DEL FORM
if(isset($_POST['submit'])){
$data_articolo = $_POST['data'];//RECUPERO IL VALORE DELLA DATA
}//FINE ISSET


/* impostiamo la query e cerchiamo gli articoli in base alla data...*/
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_articolo);
$number = mysql_num_rows($sqlquery);

if ($number < 1) {
echo "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
}else{

?>


<table>
<tr>
<td>Nome articolo</td>
<td>Data articolo</td>
</tr>

<?php 
while($riga = mysql_fetch_array($sqlquery)){
?>
<tr>
<td><?php echo $riga['nome_art'];?></td>
<td><?php echo $riga['data_art'];?></td>
</tr>
<?php
}//FINE WHILE
}//FINE IF
?>
</table>

Non sapendo come è strutturata la tabella che contiene gli articoli, ho chiamato la colonna data data_art e quella relativa all'articolo nome_art. Sostituisci i nomi con quelli della tabella.

Prova se funziona e se riscontri dei problemi fammi sapere.
 
...Prova se funziona e se riscontri dei problemi fammi sapere.

L'ho provato e il codice sembra corretto perchè non mi da nessun errore di sintassi, ma sta di fatto che mi dà sempre l'output "La ricerca non ha prodotto nessun risultato". Credo perchè il calendario restituisce il valore data nel formato m/g/Y mentre la tabella nel database ha il formato Y-m-d.

Intanto grazie per la risposta :)

Ps. Il calendario è molto carino, più di quello che speravo l'unica pecca è che in inglese ;)
 
Ciao, in questo caso dobbiamo cambiare il formato della data.
Ho riscritto il codice della pagina insert_article. php

PHP:
<?php
/* dichiariamo alcune importanti variabili per collegarci al database */
$DBhost = "Hostname o IP del tuo database";
$DBuser = "il tuo username";
$DBpass = "la tua password";
$DBName = "il nome del database";

/* specifichiamo il nome della nostra tabella */
$table = "amici";

/* Connettiamoci al database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");


//VERIFICO L'INVIO DEL FORM
if(isset($_POST['submit'])){
$data_articolo = strtotime($_POST['data']);//RECUPERO IL VALORE DELLA DATA
$data_config = date("Y-m-d",$data_articolo);//CAMBIO IL FORMATO IN Y-m-d
}//FINE ISSET


/* impostiamo la query e cerchiamo gli articoli in base alla data...*/
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_config);
$number = mysql_num_rows($sqlquery);

if ($number < 1) {
echo "<center><p>La ricerca non ha prodotto nessun risultato</p></center>";
}else{

?>




<table>
<tr>
<td>Nome articolo</td>
<td>Data articolo</td>
</tr>

<?php 
while($riga = mysql_fetch_array($sqlquery)){
?>
<tr>
<td><?php echo $riga['nome_art'];?></td>
<td><?php echo $riga['data_art'];?></td>
</tr>
<?php
}//FINE WHILE
}//FINE IF
?>

</table>
Prova e fammi sapere se funziona.
 
Ultima modifica:
In pratica ho risolto la questine del datepicker in inglese scaricando il js da jquery e settandolo per la lingua italiana e con il formato Y-m-d

Fatto questo non c'è più bisogno di convertire il formato e quindi ho applicato il tutto al primo codice che mi hai postato:

PHP:
<?

/* impostiamo la query e cerchiamo gli articoli in base alla data...*/
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_articolo);
$number = mysql_num_rows($sqlquery);

?>

Ma non andava perchè c'era un errore di sintassi infatti dopo WHERE data_art = mancavano le virgolette e non andava messo il punto. La sintassi corretta è funzionante (e per questo vi ringrazio) è la seguente:

PHP:
<?

/* impostiamo la query e cerchiamo gli articoli in base alla data...*/
$sqlquery = mysql_query("SELECT * FROM $table WHERE data = '$data_articolo'");
$number = mysql_num_rows($sqlquery);

?>

Ora la casella di ricerca fa egregiamente il suo lavoro, l'unica cosa che mi servirebbe ancora è che di default dovrebbe uscire l'articolo del giorno corrente.
Attualmente essendo la casella vuota, di default mi esce "La ricerca non ha prodotto nessun risultato".
 
Ciao, non esce alcun risultato perché il form non è validato.
Comunque se vuoi che esca per default il giorno attuale modifica il codice del file insert_artcle.php
Ho aggiunto questa parte di codice


PHP:
<?php
if(empty($data_articolo)){
//SE IL CAMPO DATA E' VUOTO ALLORA MOSTRA L'ARTICOLO DEL GIORNO CORRENTE, ALTRIMENTI MOSTRA L'ARTICOLO CORRELATA ALLA DATA SELEZIONATA
$sqlquery = mysql_query("SELECT * FROM $table WHERE DATE($data_art) = DATE(NOW()");
 }else{
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_articolo);
}
?>

ed elimnato la visualizzazione "Nessun articolo trovato"...se ne hai bisogno puoi sepre reintegrarlo


PHP:
<?
/* dichiariamo alcune importanti variabili per collegarci al database */
$DBhost = "Hostname o IP del tuo database";
$DBuser = "il tuo username";
$DBpass = "la tua password";
$DBName = "il nome del database";

/* specifichiamo il nome della nostra tabella */
$table = "amici";

/* Connettiamoci al database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");


//VERIFICO L'INVIO DEL FORM
if(isset($_POST['submit'])){
$data_articolo = $_POST['data'];//RECUPERO IL VALORE DELLA DATA
}//FINE ISSET


if(empty($data_articolo)){
//SE IL CAMPO DATA E' VUOTO ALLORA MOSTRA L'ARTICOLO DEL GIORNO, ALTRIMENTI MOSTRA L'ARTICOLO CORRELATA ALLA DATA SELEZIONATA
$sqlquery = mysql_query("SELECT * FROM $table WHERE DATE($data_art) = DATE(NOW()");
 }else{
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_articolo);
}

?>


<table>
<tr>
<td>Nome articolo</td>
<td>Data articolo</td>
</tr>

<?php 
while($riga = mysql_fetch_array($sqlquery)){
?>
<tr>
<td><?php echo $riga['nome_art'];?></td>
<td><?php echo $riga['data_art'];?></td>
</tr>
<?php
}//FINE WHILE
 ?>
</table>

Con questo codice dovresti ottenere il risultato sperato.
 
Perfetto tutto funzionante :jolly:

Il codice che mi hai scritto così non funzionava:

PHP:
if(empty($data_articolo)){ 
//SE IL CAMPO DATA E' VUOTO ALLORA MOSTRA L'ARTICOLO DEL GIORNO, ALTRIMENTI MOSTRA L'ARTICOLO CORRELATA ALLA DATA SELEZIONATA 
$sqlquery = mysql_query("SELECT * FROM $table WHERE DATE($data_art) = DATE(NOW()"); 
 }else{ 
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = ".$data_articolo); 
}

Dopo averlo modificato in quest'altro modo va tutto alla perfezione

PHP:
if(empty($data_articolo)){ 
//SE IL CAMPO DATA E' VUOTO ALLORA MOSTRA L'ARTICOLO DEL GIORNO, ALTRIMENTI MOSTRA L'ARTICOLO CORRELATA ALLA DATA SELEZIONATA 
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = DATE(NOW())"); 
 }else{ 
$sqlquery = mysql_query("SELECT * FROM $table WHERE data_art = '$data_articolo'"); 
}


Grazie infinite :) ho risolto!
 

Discussioni simili