Stampa valori correlati

  • Creatore Discussione Creatore Discussione pup3770
  • Data di inizio Data di inizio

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Salve,
ho un piccolo problema.
Ho una tabella:

ordini(id_ordine, id_dipendente, tipo_articoli, quantità)
dipendenti(id_dipendente, nome, cognome, sesso, telefono, mansione)

vorrei stampare il contenuto a video di ordini, utilizzo lo script seguente:

PHP:
<?php
	
	$connessione = mysql_connect("localhost","root","root") or die ("ATTENZIONE: Errore di connessione al database\n");
	
	$selezione_db = mysql_select_db("ProgDataWarehouse", $connessione) or die ("ATTENZIONE: Errore nella selezione del database\n");

	$query = "SELECT * FROM ordini";
	
	$result = mysql_query($query, $connessione);
	
	$numrows = mysql_num_rows($result);
	echo "<big> Sono stati letti <span style=\"color:red\"> $numrows </span> valori </big>";
	
	echo "<h2><big> Dati tabella ordini </big></h2>";
	
		
	//se il database è vuoto lo stampo a video
if ($numrows==0){
	echo "<span style=\"color:red\"><big>Database vuoto! </big></span><b>";
}
//Se invece trovo delle occorrenze...
else
{
  //Avvio un ciclo for che si ripete per il numero di occorrenze trovate
  for($x=0; $x<$numrows; $x++){
    //Recupero il contenuto di ogni record rovato
    $resrow = mysql_fetch_row($result);
    $id_ordine = $resrow[0];
    $id_dipendente = $resrow[1];
    $tipo_articoli = $resrow[2];
    $quantita = $resrow[3];
    

    //Stampo il risultato
    echo "ID_ordine: <b>" . $id_ordine . "</b><br/>";
    echo "ID_dipendente: <b>" . $id_dipendente . "</b><br/>";
    echo "tipo articoli: <b>" . $tipo_:articoli . "</b><br/>";
    echo "quantità: <b>" . $quantita . "</b><br/>";

    
    echo "<br>"."<br>"."==========================="."<br>"."<br>";

Fin qua tutto ok. Per chi dovesse essere interessato al codice ma è alle prime armi, non faccio altro che vedere quanti ordini ho inserito, ciclo per il numero di ordini incrementando ad ogni passo ed ogni volta stampo le righe che sono contenute nella tabella del database.

Adesso mi voglio complicare la vita facendo si che per ogni ordine, vado a vedere in corrispondenza dell'ID_dipendente che ha generato l'ordine, il nome e cognome che prelevo dalla tabelle
Codice:
dipendenti
.

Ho fatto delle prove, esempio:

prendo l'id_dipendente della tabella dipendenti con:
PHP:
        $query_dip = "SELECT * FROM dipendenti";
	
	$result_dip = mysql_query($query_dip, $connessione);
	
	$id_dip = ($_POST['id_dipendente']);
	$qu_dip = mysql_query("SELECT * FROM dipendenti WHERE id_dipendente=".(int)$id_dip);

e poi avevo pensato di fare un controllo dopo l'else e prima del for in modo di dirgli: se l'id_dipendente che hai recuperato dalla tabella dipendenti è uguale a quello della tabella ordini, allora stampa anche il nome e cognome del dipendente che avevo pensato di recuperare:

PHP:
        $nome_dip = ($_POST['nome']);
	$qu_nome = mysql_query("SELECT * FROM dipendenti WHERE nome=".(int)$nome_dip);
		
	$cognome_dip = ($_POST['cognome']);
	$qu_cognome = mysql_query("SELECT * FROM dipendenti WHERE cognome=".(int)$cognome_dip);

Il problema è che non mi preleva dalla tabella dipendenti il tutto e il costrutto if non vede i parametri per il test.

Dove sbaglio?
 
Ciao,
se non sono fuori strada te la puoi cavare con un JOIN

esempio:
PHP:
$query = "SELECT * FROM ordini O
                    JOIN dipendenti D ON D.id_dipendente = O.id_dipendente";

$id_ordine = $resrow[0];
$id_dipendente = $resrow[1];
$tipo_articoli = $resrow[2];
$quantita = $resrow[3];
$nome_dipendente = $resrow[6]; // 6 o quello che è
$cognome_dipendente = $resrow[7]; // 7 o quello che è
 
grazie per la risposta.
anch'io avevo pensato al join perché sarebbe quello che serve però non riesco a fargli prelevare le informazioni su
Codice:
nome
e
Codice:
cognome
.

ho provato mediante:
PHP:
        $dipendente1 = ($_POST['nome']);

	$nome_dipendente = mysql_query("SELECT * FROM dipendenti WHERE nome=".(int)$dipendente1);

però mi da:
Nome: Resource id #4
Cognome: Resource id #5

questo perché quello che vorrei prelevare non è (int) ma varchar suppongo. Non trovo altro metodo.

Posto tutto il codice senza la modifica da te consigliata:
PHP:
<html>
<head>
<title> Visualizzazione degli ordini </title>
</head>
<body>

<font color="#FF0000" size = 5> Pagina in cui viene visualizzato il contenuto della tabella ordini </font>
	
	
<?php
	
	$connessione = mysql_connect("localhost","root","root") or die ("ATTENZIONE: Errore di connessione al database\n");
	
	$selezione_db = mysql_select_db("ProgDataWarehouse", $connessione) or die ("ATTENZIONE: Errore nella selezione del database\n");

	$query = "SELECT * FROM ordini";
	
	$result = mysql_query($query, $connessione);
	
	$numrows = mysql_num_rows($result);
	echo "<big> Sono stati letti <span style=\"color:red\"> $numrows </span> ordini </big>";	
	
	echo "<h2><big> Dati tabella Ordini </big></h2>";

		
	//se il database è vuoto lo stampo a video
if ($numrows==0){
	echo "<span style=\"color:red\"><big> Database vuoto! </big></span><b>";
}
//Se invece trovo delle occorrenze...
else
{
	
  //Avvio un ciclo for che si ripete per il numero di occorrenze trovate
  for($x=0; $x<$numrows; $x++){
    //Recupero il contenuto di ogni record rovato
    $resrow = mysql_fetch_row($result);
    $id_ordine = $resrow[0];
    $id_dipendente = $resrow[1];
    $tipo_articoli = $resrow[2];
    $quantita = $resrow[3];
   

    //Stampo il risultato
    echo "ID ordine: <b>" . $id_ordine . "</b><br/>";
    echo "ID dipendente: <b>" . $id_dipendente . "</b><br/>";
    echo "Tipo articoli: <b>" . $tipo_articoli . "</b><br/>";
    echo "Quantita': <b>" . $quantita . "</b><br/>";
    
    echo "<br>"."<br>"."==========================="."<br>"."<br>";

    
  }
	
}

	
	
?>
</body>
</html>

questo codice non fa altro che leggere tutti i dati dalla tabella
Codice:
ordini
e stampare a video.

Ma se volessi stampare anche il nome e cognome in corrispondenza dell'ID dipendente???? E' da oggi che ci sbatto la testa.
 
ciao
prova così
PHP:
<?php
//dati di connessione
//a parte tutte le verifiche necessarie quando si accede al db sui valori immessi
$nome_dip = $_POST['nome'];
$cognome_dip = $_POST['cognome'];
$ris = mysql_query("SELECT * FROM dipendenti WHERE nome='$nome_dip' AND cognome='$cognome_dip'");
$riga_dip=mysql_fetch_array($ris);
$id_dip=$riga_dip['id_dipendente'];
echo "il dipendente $nome_dip $cognome_dip<br />";
$ris=mysql_query("SELECT * FROM ordini WHERE id_dipendente=$id_dip");
if(mysql_num_rows($ris)==0){
	echo "non ha acquistato nulla<br />";
}else{
	echo "ha acquistato:<br />";
	while($riga_ord=mysql_fetch_array()){
		echo "ID ordine: ".$riga_ord['id_ordine']."<br />";
		echo "articolo: ".$riga_ord['tipo_articolo']."<br />";
		echo "quantità: ".$riga_ord['quantita']."<br />";
	}
}
?>

al massimo non funzia
p.s.
verifica che abbia scritto esatti i nomi dei campi
 
Ma così no?
PHP:
<!DOCTYPE html>
<html>
    <head>
        <title>Visualizzazione degli ordini</title>
        <meta charset="utf-8">
    </head>
    
    <body>
        <font color="#FF0000" size="5">Pagina in cui viene visualizzato il contenuto della tabella ordini</font>

        <?php
        $db = mysql_connect('localhost', 'root', 'root') or die ("ATTENZIONE: Errore di connessione al database\n");
        mysql_select_db('ProgDataWarehouse', $db) or die ("ATTENZIONE: Errore nella selezione del database\n");

        $sql   = 'SELECT * FROM ordini';
        $query = mysql_query($query, $db);

        $numRows = mysql_num_rows($result);
        
        echo "<big>Sono stati letti <span style=\"color:red\">{$numRows}</span> ordini</big>";
        echo "<h2><big> Dati tabella Ordini </big></h2>";

        if ($numRows == 0) {
            echo "<span style=\"color:red\"><big>Database vuoto!</big></span><b>";
        } else {
            while ($row = mysql_fetch_assoc($query)) {
                echo "ID ordine: <strong>{$row['id_ordine']}</strong><br>";
                echo "ID dipendente: <strong>{$row['id_dipendente']}</strong><br>";
                echo "Tipo articoli: <strong>{$row['tipo_articoli']}</strong><br>";
                echo "Quantità: <strong>{$row['quantita']}</strong><br>";
                
                $subSql   = "SELECT * FROM dipendenti WHERE id_dipendente = {$row['id_dipendente']}";
                $subQuery = mysql_query($subSql, $db);
                $subRow   = mysql_fetch_assoc($subQuery);
                
                echo "Nome dipendente: <strong>{$subRow['nome']}</strong><br>";
                echo "Cognome dipendente: <strong>{$subRow['cognome']}</strong><br>";
                
                echo "<br><br>===========================<br><br>";
            }
        }
        ?>
    </body>
</html>
 
ciao, purtroppo non entra nell'else, quindi stampa a video:

Codice:
il dipendente 
non ha acquistato nulla
 
ok finalmente abbiamo trovato la soluzione.

Intanto ringrazio tutti, sia i lettori che coloro i quali hanno dedicato del tempo per sistemare lo script.

Lo script di
mi dava problemi in quando non entrava nell'else e quindi non procedeva, probabilmente sbagliavo in qualcosa.

Lo script proposto da
alessandro1997
a livello funzionale è corretto anche se qualcosa l'ho dovuta modificare, vi posto la soluzione completa, corretta e testata:

PHP:
<html>
<head>
<title> Visualizzazione degli ordini </title>
</head>
<body>

<font color="#FF0000" size = 5> Pagina in cui viene visualizzato il contenuto della tabella ordini </font>
    

<?php
	
	$connessione = mysql_connect("localhost","root","root") or die ("ATTENZIONE: Errore di connessione al database\n");
	
	$selezione_db = mysql_select_db("ProgDataWarehouse", $connessione) or die ("ATTENZIONE: Errore nella selezione del database\n");

	$sql = 'SELECT * FROM ordini'; 
        $query = mysql_query($sql, $connessione); 

        $numRows = mysql_num_rows($query); 
         
        echo "<big>Sono stati letti <span style=\"color:red\">{$numRows}</span> ordini</big>"; 
        echo "<h2><big> Dati tabella Ordini </big></h2>"; 

        if ($numRows == 0) { 
            echo "<span style=\"color:red\"><big>Database vuoto!</big></span><b>"; 
        } else { 
            while ($row = mysql_fetch_assoc($query)) { 
                echo "ID ordine: <strong>{$row['id_ordine']}</strong><br>"; 
                echo "ID dipendente: <strong>{$row['id_dipendente']}</strong><br>"; 
                
                $subSql   = "SELECT * FROM dipendenti WHERE id_dipendente = {$row['id_dipendente']}"; 
                $subQuery = mysql_query($subSql, $connessione); 
                $subRow   = mysql_fetch_assoc($subQuery); 
                 
                echo "Nome dipendente: <strong>{$subRow['nome']}</strong><br>"; 
                echo "Cognome dipendente: <strong>{$subRow['cognome']}</strong><br>";
                
                echo "Tipo articoli: <strong>{$row['tipo_articoli']}</strong><br>"; 
                echo "Quantita': <strong>{$row['quantita']}</strong><br>"; 
                 
                 
                 
                echo "<br><br>===========================<br><br>"; 
            } 
        }
	
?>
</body>
</html>
 
E' da oggi che ci sbatto la testa.
pclab.gif
 
ci stai sbattendo la testa per trovare una soluzione migliore oppure stai implementando il tutto e testando ma non ti riesce?

Se hai perplessità esponi pure il tutto
 

Discussioni simili