Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    2

    Problema validazione array con query mysql.

    Salve popolo di HTML.it ! è da un bel po che vi seguo..
    Dunque, ho intenzione di prelevare delle frasi "random" dal database che però debbano avere dei requisiti specifici.
    Il primo passo è stato creare una funzione che mi ritornava in un array php tutti gli id che erano tra una certa condizione e fino a qui, tutto ok: ho l'array con i rispettivi id, ma adesso ho la necessità di controllare che questi specifici ID(array) soddisfino un altra condizione, quella del tempo. Cioè voglio controllare che non sono stati usati entro 2 giorni. Come posso fare?
    Ho provato a creare un altra funzione ma non appena c'è un ID che non soddisfa la mia richiesta nel nuovo array che dovrebbe contenere soltanto gli id che sono idonei, scompare un risultato..
    Questa è la funzione
    Codice PHP:
    function validaFrasi($categoria,&$var,$max){    $accettati = [];     $i 0;    $conto count($varCOUNT_RECURSIVE);    for($i 0$i<= $conto-1$i++)    {        $q "SELECT id FROM frasi".$categoria." WHERE DATEDIFF(CURDATE(),lastused) > 7 AND id = '".$var[$i]."'";        $res mysql_query($q);        if (mysql_num_rows($res) == 1)         {            echo 'Accettato ID: '.$var[$i].'<br />';            $accettati[$i] = $var[$i];                     }    }    echo 'Gli accettati sono: '.count($accettati).' totali. Ecco i rispettivi id:<br />';    for($o 0$o <=count($accettati)-1$o++)    {        echo '<br />ID: '.$accettati[$o].'<br />';    }} 
    L'output del codice mi appare cosi:
    Accettato ID: 9
    Accettato ID: 16
    Accettato ID: 31

    Gli accettati sono 3 totali. Ecco i rispettivi ID:

    ID:

    ID: 9

    ID:
    Qualcuno sà come aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Prima di tutto, non puoi mettere la condizione temporale insieme a quella per determinare gli id? Così fai tutto con una query:
    Codice PHP:
    SELECT FROM frasi WHERE <tua condizione> AND DATEDIFF(CURDATE(), lastused) > 
    In caso contrario, visto che hai degli id, puoi usare la IN senza ciclare (non proprio) l'array:

    Codice PHP:
    "SELECT id FROM frasi".$categoria." WHERE DATEDIFF(CURDATE(),lastused) > 7 AND id IN (".implode(',',$var).")"
    Infine, il tuo "buchi" nell'array son dovuti al fatto che usi lo stesso indice per scorrere $var e per inserire in $accettati. Se poi aggiungi il fatto che usi un for($i=0 ...) allora avrai solo delle incongruenze in quanto gli indici non saranno contingui al contrario dei valori di $i. Per risolvere basta che cambi
    Codice PHP:
    $accettati[$i] = $var[$i]; 
    in
    Codice PHP:
    $accettati[] = $var[$i]; 

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    2
    Grazie della risposta, ho appena provato e funziona, non sapevo che si potessero inserire altre condizioni in un unica query per questo mi sono complicato la vita creando funzioni e funzioni..
    Solo che il problema adesso rimane quello dei buchi.. ho cambiato l'intera funzione che uso per richiamare e salvare le frasi, solo che nei messaggi di successo certe volte non mi compare l'ID della frase assegnata e di conseguenza, vado a controllare sul db e il campo frase risulta vuoto.. da cosa potrebbe essere causato? Il codice che uso è questo
    codice:
    <?php function assegnaFrase($categoria,$giocatore) {
    	 $aumento = ($config[4] + mt_rand(1, 10));
    	 $randomau = rand($config[4],$aumento);
    	 $minimo = dammiPunteggioGiocatore($giocatore);
    	 $max = ($minimo + $randomau); 
    	 $sql = "SELECT * FROM frasi".$categoria." WHERE percentuale BETWEEN ".$minimo." AND ".$max." AND DATEDIFF(CURDATE(), lastused) > 2";
    	 $result = mysql_query($sql) or die(mysql_error()); 
    	 
         $row = mysql_fetch_array($result);
    
    
    	 $frasehtml = htmlspecialchars($row['frase']);
    	 $aggiorna = "UPDATE oroscopi SET ".$categoria." = '".$frasehtml."' WHERE id = '".$giocatore."'";//SQL che aggiorna la frase del $giocatore della $categoria scelta.
    	 mysql_query($aggiorna); 
    	 mysql_query("SET CHARACTER SET utf8 ") or die ("errore codifica:".mysql_error()."");//Query x  CHARACTER SET
    	 $lol = mysql_query("UPDATE frasi".$categoria." SET lastused = CURDATE() WHERE id = '".$row['id']."'")or die("Errore nel salvataggio lastused " . mysql_error());
    	
    	if($aggiorna == TRUE)
    	{
    		msgErrore(3,"<br />FRASE ".$categoria." GIOCATORE ".getNamePlayer($giocatore)." salvato con successo con la frase ID ".$row['id']."<br />");
    	}
    	else if($aggiorna == FALSE)
    	{
    		msgErrore(1,"<br />FRASE GIOCATORE: ".getNamePlayer($giocatore)." ERRORE: ".mysql_error()."<br />");
    	}
    	
    	if($lol == true)
    	{
    		msgErrore(3,"<br />lastused aggiornata per la frase id ".$row['id']."<br />");
    	}
    	else if($aggiorna == FALSE)
    	{
    		msgErrore(1,"<br />lastused non aggiornato ERRORE: ".mysql_error()."<br />");
    	}
    	
     }
     
     ?>

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ad occhio penserei che la query non trova nessun record. Controlla che effettivamente ritrovi qualcosa:
    Codice PHP:
    $sql "SELECT * FROM ...";
    $result mysql_query($sql) or die(mysql_error());

    if(
    mysql_num_rows($result) == 0){
       
    // Nessun record trovato


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 © 2024 vBulletin Solutions, Inc. All rights reserved.