Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    "if" in istruzione "echo"

    Salve a tutti,

    Volevo sapere se si puo inserire una istruzione "IF" in una riga "ECHO".
    Mi spiego:

    echo "<tr bgcolor=$color><td bgcolor=#CCCCCC>$id</td><td>$data_ordine $mese_ordine $anno_ordine</td><td bgcolor=$colorallarm >$descrizione</td>

    Pensavo di inserire un if nell'echo qui sopra al posto della variabile $colorallarm tipo:

    echo "<tr bgcolor=$color><td bgcolor=#CCCCCC>$id</td><td>$data_ordine $mese_ordine $anno_ordine</td><td bgcolor= "if ($rowmultiorder > "2") {
    $colorallarm = "#FFCC33";
    }
    else {
    $colorallarm = $color;
    };"
    >$descrizione</td>.....

    ma mi da errore.... sicuramente la sintassi è sbagliatissima....

    come si puo fare ????

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Infatti... la sintassi non funge
    perchè non fai semplicemente quella if prima dell'echo?

    Puoi però usare l'operatore ternario in questo modo

    Codice PHP:
    <?php
    $x 
    1;
    echo 
    "prima dell'if - " . ($x=="SI" "NO") . " - dopo l'if"

    ?>
    In base al valore di X stamperò "SI" oppure "NO"
    Nel tuo caso diventa

    Codice PHP:
    echo "<tr bgcolor=$color>
    <td bgcolor=#CCCCCC>[b]
    $id[/b]</td>
    <td>
    $data_ordine $mese_ordine $anno_ordine</td>
    <td bgcolor="
    .($rowmultiorder "2" "#FFCC33" $color) ."  >$descrizione</td> 

  3. #3
    dicendomi cosi mi fai capire che forse ho sbagliato tutto lo script.....

    lo scrip interroga il db e mi restituisce i valori in riga a lcolori alternati.
    Io devoi fare in modo che se uno stesso nome_utente ha piu di un ordine pagato mi rende gialla la cella della descrizione cosi capisco che ci sono altri ordini in giro. Ma purtroppo mi diventano gialle tutte le celle della descrizione invce di essere gialla solo quella delle righe dello stesso nome_utente

    questo è il link in funzione sul link http://www.settantallora.com/spedizioni/allentries.php

    questo è il codice

    <table width="518" border="0" align="center" cellpadding="0" cellspacing="2" bgcolor="#FFFFFF">
    <tr>
    <td width="112" height="54" bgcolor="#CCCCCC"><div align="center">MOSTRA TUTTI </div></td>
    <td width="128" bgcolor="#CCCCCC"><div align="center">ORDINE ALFABETICO </div></td>
    <td width="134" bgcolor="#CCCCCC"><p align="center">AGGIUNGI SPEDIZIONE</p></td>
    <td width="124" bgcolor="#CCCCCC"><div align="center">EFFETTUA RICERCA </div></td>
    </tr>
    </table>
    <form id="form1" name="form1" method="post" action="allentries.php">
    <label></label>
    <table width="900" border="0" align="center" bgcolor="#CCCCCC">
    <tr>
    <td width="143">Riordina i risultati per:
    <label></label></td>
    <td width="194"><select name="metodo" id="metodo">
    <option value="<?php echo $myrow["metodo"]?>"selected= "selected"><?php echo $myrow["metodo"]?></option>
    <option value="id">N°PROGRESSIVO</option>
    <option value="descrizione">DESCRIZIONE</option>
    <option value="taglia">TAGLIA</option>
    <option value="nome_cliente">CLIENTE</option>
    <option value="dati_cliente">DATI CLIENTE</option>
    <option value="email">EMAIL</option>
    <option value="pagato">IMPORTO PAGATO</option>
    <option value="prezzo">PREZZO</option>
    <option value="costo_maglia">COSTO MAGLIA</option>
    <option value="costo_spedizione">COSTO SPEDIZIONE</option>
    <option value="metodo_pagamento">METODO PAGAMENTO</option>
    <option value="stato_pagamento">STATO PAGAMENTO</option>
    <option value="tracking_number">TRACKING NUMBER</option>
    </select></td>
    <td width="221"><label>Ascendente
    <input name="modo" type="radio" value="ASC" />
    Discendente
    <input name="modo" type="radio" value="DESC" checked="checked" />
    </label></td>
    <td width="314"><input type="submit" name="Submit" value="Invia" /></td>
    </tr>
    </table>
    </form>
    <div align="center">
    <link rel="stylesheet" href="include/style.css" type="text/css">
    <?


    include("include/dbconnect.php");
    if ($metodo == "") {
    $metodo = "stato_pagamento";
    }
    if ($modo == "") {
    $modo = "DESC";
    }
    $result = mysql_query("SELECT * FROM $table ORDER BY $metodo $modo, nome_cliente ASC",$db);
    $multiorder = mysql_query("SELECT nome_cliente FROM $table WHERE stato_pagamento = 'pagato'",$db);
    $rowmultiorder = mysql_num_rows($multiorder);
    echo "<table width=900 cellpadding=5 cellspacing=1 border=0>";
    $alternate = "2";
    while ($row = mysql_fetch_array($result)) {
    $id = $row["id"];
    $descrizione = $row["descrizione"];
    $taglia = $row["taglia"];
    $nome_cliente = $row["nome_cliente"];
    $dati_cliente = $row["dati_cliente"];
    $email = $row["email"];
    $pagato = $row["pagato"];
    $prezzo = $row["prezzo"];
    $costo_maglia = $row["costo_maglia"];
    $costo_spedizione = $row["costo_spedizione"];
    $metodo_pagamento = $row["metodo_pagamento"];
    $stato_pagamento = $row["stato_pagamento"];
    $tracking_number = $row["tracking_number"];
    $data_ordine = $row["data_ordine"];
    $mese_ordine = $row["mese_ordine"];
    $anno_ordine = $row["anno_ordine"];

    if ($alternate == "1") {
    $color = "#ffffff";
    $alternate = "2";
    }
    else {
    $color = "#efefef";
    $alternate = "1";
    }
    if ($stato_pagamento == "PAGATO") {
    $colortb = "#339900";
    }
    else {
    $colortb = "#FF3300";
    }
    if ($tracking_number == "") {
    $colortr = "#CCCCCC";
    }
    else {
    $colortr = "##66CCFF";
    }
    if ($rowmultiorder > "1") {
    $colorallarm = "#FFCC33";
    }
    else {
    $colorallarm = $color;
    }
    echo "<tr bgcolor=$color><td bgcolor=#CCCCCC>$id</td><td>$data_ordine $mese_ordine $anno_ordine</td>
    <td bgcolor=$colorallarm>$descrizione</td><td>$taglia</td><td bgcolor=#EAEAEA>$nome_cliente<td bgcolor=#CCCCCC>$dati_cliente</td><td>$email</td><td>$pagato</td><td>$prezzo</td><td>$costo_maglia</td><td>$costo_spedizione</td><td>$metodo_pagamento</td><td bgcolor=$colortb>$stato_pagamento</td><td bgcolor=$colortr>$tracking_number</td></td><td>Modifica</td><td>Cancella</td></tr>";
    }
    echo "</table>";

    ?>
    </div>

  4. #4
    nell'esempio del link anche l'utente nicola diventa giallo invece solo franco dovrebbe

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    L'errore è "concettuale"

    la riga
    $rowmultiorder = mysql_num_rows($multiorder);

    da come risultato il totale delle righe selezionate dal query, che nel tuo caso sarà SEMPRE maggiore di 2

  6. #6
    franco deve aver fatto piu di due ordini e averli pagati affinche diventiono gialle le sue descrizioni. Esempio

    se da http://www.settantallora.com/spedizioni/allentries.php clicchi su modifica
    e imposti su "NON PAGATO" lo stato di pagamento, il giallo si spegne.

    Quando è acceso invece, vorrei che fosso accesso solo sulle riche di franco dove è pagato

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Per fare quello che dici devi PRIMA leggerti i risultati del query valorizzando ad esempio degli array o cose del genere e poi iniziare le echo
    Altrimenti, quando fai la echo del primo ordine di Franco non potrai mai sapere se lo stesso Franco ha anche altri ordini nelle righe che ancora devi leggere e quindi non potrai scegliere il colore

    P.S.
    $multiorder = mysql_query("SELECT nome_cliente FROM $table WHERE stato_pagamento = 'pagato'",$db);
    $rowmultiorder = mysql_num_rows($multiorder);
    Queste due righe contano il TOTALE DEI PAGATI e non i pagati di un determinato utente... infatti diventano gialle anche se metti pagate 2 di franco e 1 di nicola

  8. #8
    grazie dei consigli....
    non credo riuscirò ad impostarlo....
    devo studiare ancora tanto per riuscirci

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    595
    Ti metto un codice semplificato di come si può gestire una cosa del genere (è una metodologia che viene chiamata "rottura di livello", ovvero fare determinate operazioni solo quando cambia un determinato valore in una serie di valori)
    Codice PHP:
    <?php
    echo "<table width=900 cellpadding=5 cellspacing=1 border=0>";
    $ultimo_nome_cliente "";
    $contatore 0;
    $riga "";
    $result mysql_query("SELECT * FROM $table ORDER BY $metodo $modo, nome_cliente ASC",$db);
    while (
    $row mysql_fetch_array($result)) 

      
    $descrizione $row["descrizione"];
      
    $nome_cliente $row["nome_cliente"];
      
    $pagato $row["pagato"];
      if(
    $ultimo_nome_cliente != $nome_cliente)
      {
        if(
    $ultimo_nome_cliente != "")
        {
          if(
    $contatore 2)
            
    $colore "yellow";
          else
            
    $colore "red";
          
    $riga str_replace("miocolore",$colore,$riga);
          echo 
    $riga;
        }
        
    $riga "";
        
    $contatore 0;
        
    $ultimo_nome_cliente $nome_cliente;
      }
      
    $riga .= "<tr bgcolor='miocolore'><td>$nome_cliente</td></tr>";
      if(
    $pagato == "PAGATO"$contatore++;
    }
    // per l'ultima riga ancora non stampata
    if($contatore 2)
        
    $colore "yellow";
      else
        
    $colore "red";
      
    strreplace("miocolore",$colore,$riga);
      echo 
    $riga;

    ?>
    In pratica come funziona
    Ogni riga viene memorizzata in questo modo
    $riga .= "<tr bgcolor='miocolore'><td>$nome_cliente</td></tr>";
    Quindi $riga conterrà diverse righe (grazie al .=)
    e un contatore ($contatore) viene incrementato ogni volta che la riga è PAGATA
    Quando leggi un cliente NUOVO (nome diverso dal precedente => $nome_cliente != $ultimo_nome_cliente) il php sostituisce (str_replace) la scritta "miocolore" con "yellow" o "red" a seconda se contatore è > 2 o meno
    Dopo di che fa echo di $riga (che quindi stamperà le righe di quell'utente con il colore giusto) e setta di per il nuovo cliente
    $riga = "";
    $contantore = 0;
    $ultimo_nome_cliente = $nome_cliente;

    In pratica non fa nessuna echo fin quando non cambia il cliente, tenendo tutto "in memoria" nella variabile $riga

    Dato però che non fa echo fino a che non cambia cliente l'ultima riga non viene stampata nel ciclo, per questo motivo fuori della while ti ritrovi le istruzioni
    if($contatore > 2)
    $colore = "yellow";
    else
    $colore = "red";
    $riga = str_replace("miocolore",$colore,$riga);
    echo $riga;

    Spero possa esserti utile

  10. #10
    decisamente grazie mille!!!!!!!!!

    sto pian piano capendo la struttura ... ora provo ad implementarla !!

    Grazie ancora!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.