Visualizzazione risultati 1 fino 16 di 16

Discussione: [db] while e switch insieme

  1. #1
    Guest

    Predefinito [db] while e switch insieme

    Ciao a tutti ho un problema non so come spiegarlo bene, ho una tabella formata cosi
    Codice PHP:
    CREATE TABLE IF NOT EXISTS `pagine` (
    `
    id` int(11) NOT NULL auto_increment,
    `
    indirizzo` varchar(255) NOT NULL default '',
    `
    pagina` varchar(255) NOT NULL default '',
    PRIMARY KEY (`id`)
    )
    ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    INSERT INTO `pagine` (`id`, `indirizzo`, `pagina`) VALUES
    (1, 'contact', 'contatto.php'),
    (
    2, 'info', 'info.php');
    le pagine contatto.php e info.php si trova nella cartella tipo/
    che contiene 3 file
    la pagina contact contiene il testo "contattami"
    la pagina info contiene il testo "Info su di me"
    la pagina errore contiene il testo "Errore"

    la pagina index e formata cosi
    Codice PHP:
    if(isset($_GET["tipo"])){
    $pagine = mysql_query("SELECT * FROM pagine");
    while(
    $elenco = mysql_fetch_array($pagine)){
    switch(
    $_GET["tipo"]){

    case
    $elenco[1]:
    include
    'tipo/'.$elenco[2];
    break;

    default;
    include
    'tipo/errore.php';
    break;
    }}}
    ?>
    diventa una cosa tipo cosi
    index.php?tipo=contact
    index.php?tipo=info

    il problema se clicco nella pagina tipo index.php?tipo=contact
    compare il testo "Errorecontattami"
    come posso fare che compaia solo il testo "contattami" come devo sistemare lo switch e il while...

  2. #2
    Guest

    Predefinito

    Non credo tu possa fare uno switch... al massimo degli if (else if)

  3. #3
    Guest

    Predefinito

    tu dici ma come devo mettere il while...
    potresti fare un esempio ^^

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Hai mai sentito parlare degli array associativi?

    Codice PHP:
    $q = mysql_query('SELECT * FROM pagine');
    $pagine = array();

    while(
    $r = mysql_fetch_assoc($q)) { // crea la lista delle pagine
    $pagine[$r['indirizzo']] = $r['pagina'];
    }

    if(isset(
    $_GET['tipo'])) {
    $pag = 'tipo/errore.php';

    if(
    array_key_exists($_GET['tipo'], $pagine)) {
    $pag = 'tipo/' . $pagine[$_GET['tipo']];
    }

    include(
    $pag);
    }

  5. #5
    Guest

    Predefinito

    Codice PHP:
    <?php
    if(isset($_GET["tipo"])){
    $q = mysql_query("SELECT * FROM pagine");
    $pagine = array();

    while(
    $r = mysql_fetch_assoc($q)){
    $pagine[$r['indirizzo']] = $r['pagina'];
    }

    $pag = 'tipo/errore.php';
    if(
    array_key_exists($_GET["tipo"],$pagine)){
    $pag = 'tipo/'.$pagine[$_GET["tipo"]];
    include(
    $pag);
    }}else{
    ?>
    il problema se la pagina non esiste non stampa errore perché...^^

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Chiudi l'if troppo tardi.
    Codice PHP:
    $pag = 'tipo/errore.php';
    if(
    array_key_exists($_GET["tipo"],$pagine)) {
    $pag = 'tipo/'.$pagine[$_GET["tipo"]];
    }

    include(
    $pag);
    } else{
    Impara ad indentare il codice...

  7. #7
    Guest

    Predefinito

    ti ringrazio funziona...^^
    secondo te non ce un altro modo per fare la stessa cosa...

    Codice PHP:
    <?php
    if(isset($_GET["tipo"])){
    $q = mysql_query("SELECT * FROM pagine");
    $pagine = array();

    while(
    $r = mysql_fetch_assoc($q)){
    $pagine[$r['indirizzo']] = $r['pagina'];
    }

    $pag = 'tipo/errore.php';
    if(
    array_key_exists($_GET["tipo"],$pagine)){
    $pag = 'tipo/'.$pagine[$_GET["tipo"]];
    }include(
    $pag);
    }else{
    if(isset(
    $_GET['id'])){
    include
    'pagina2.php';
    }else{
    include
    'pagina.php';
    }}
    ?>

  8. #8
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Se ho capito quello che vuoi fare stai sbagliando.

    Primo.
    Se vuoi continuare questa strada ti basta cercare con la query la pagina
    "Select * from Pagine where tipo =".$_GET["tipo"]
    Senza dover fare array o altra roba

    Secondo.
    Sei veramente sicuro di aver bisogno di indirizzi di pagine modificabili da database?
    Potrebbe convenirti semplciemente fare una funzione o oggetto che dato il tipo ti restituisce l'indirizzo della pagina secondo una logica fissa.
    Tipo
    Codice PHP:
    Switch($tipo){
    case
    "index":
    return
    "dir/index.php"
    case "me":
    return
    "dir/personale.php?variabile"
    }
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  9. #9
    Guest

    Predefinito

    scusa ma non ho capito bene...^^

  10. #10
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    1) Tu fai:
    -una query che ti restituisce tutta la tabella pagine.
    -Carichi il risultato in un array
    -Cerchi nell'array il tipo passato da get.
    Questo lo puoi fare con una query che ti restituisce direttamente la pagina del tipo richiesto.

    2)Le query sono "lente" e il database va usato solo quando effetivamente ti serve.
    Se è l'utente a creare le pagine ha senso usare il database per salvarle.
    Se invece hai semplciemente bisogno di un posto dove scrivere la trascodifica tipo->pagina puoi scriverlo in una funzione e fai prima.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  11. #11
    Guest

    Predefinito

    non ci sto riuscendo....
    non funziona per includere le pagine io dico tipo
    www.sito.it/?file
    www.sito.it/?testo
    www.sito.it/?id
    www.sito.it/ (paginadefault)
    www.sito.it/? (qualunque altra cosa deve includere la pagina di errore)
    Codice PHP:
    switch(non so cosa mettere qui){
    case
    'file':
    $query = mysql_query("SELECT * FROM pagine");
    $pagine = array();

    while(
    $r = mysql_fetch_assoc($query)){
    $pagine[$r['indirizzo']] = $r['pagina'];
    }

    $pagina = 'errore.php';
    if(
    array_key_exists($_GET["file"],$pagine)){
    $pagina = $pagine[$_GET["file"]];

    }include
    $pagina;
    break;
    case
    'testo':
    include
    'testo.php';
    break;
    case
    'id':
    include
    'id.php';
    break;
    default:
    include
    'pagina_principale.php';
    break;
    }

  12. #12
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    www.sito.it/?file
    non mi ricordo come viene chiamata la variabile
    Siciamo che chiami la pagina
    www.sito.it/?pagina=file

    Codice PHP:
    $pagina = $_GET['pagina'];

    Switch(
    $pagina){
    case
    "testo":
    include
    'testo.php';
    break;
    case
    "id":
    include
    'id.php';
    break;
    default:
    include
    'index.php';
    break;
    }
    Anche se l'include usato così è concettualmente sbagliato.
    MA almeno in questo modo non fai inutilmente una query.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  13. #13
    Guest

    Predefinito

    Comunque hotmailpower, per favore, indenta quel codice. Non si capisce molto se non lo indenti. L'indentazione, su wikipedia la spiegano bene, diventa utilissima per trovare gli errori perchè velocizza la comprensione del codice.

    Prova a leggere questo :

    Codice PHP:
    private function is_mail($Email) {
    if (
    is_string($Email) && $Email != '') {
    $Email = mb_strtolower($Email);
    $length = mb_strlen($Email);
    $i = 0;
    $notAdmittedChar = False; //Indica se è stato trovato un carattere non valido
    $atFound = False; //Indica se è stato trovato una @
    $dotFound = False; //Indica se è stato trovato un . in un qualsiasi carattere DOPO la @
    while ($i <= $length - 1 && !$notAdmittedChar) {
    $char = mb_substr($Email, $i++, 1);
    if (
    $atFound) {
    if (!
    $dotFound) {
    $dotFound = $char == '.';
    }
    $notAdmittedChar = !($char >= 'a' && $char <= 'z' || $char >= '0' && $char <= '9' || $char == '.' || $char == '_');
    } else {
    ...
    e ora questo e vedrai la differenza :

    Codice PHP:
    private function is_mail($Email) {
    if (
    is_string($Email) && $Email != '') {
    $Email = mb_strtolower($Email); $length = mb_strlen($Email); $i = 0;
    $notAdmittedChar = False; //Indica se è stato trovato un carattere non valido
    $atFound = False; //Indica se è stato trovato una @
    $dotFound = False; //Indica se è stato trovato un . in un qualsiasi carattere DOPO la @
    while ($i <= $length - 1 && !$notAdmittedChar) {
    $char = mb_substr($Email, $i++, 1);
    if (
    $atFound) { if (!$dotFound) {
    $dotFound = $char == '.';
    }
    $notAdmittedChar = !($char >= 'a' && $char <= 'z' || $char >= '0' && $char <= '9' || $char == '.' || $char == '_');
    } else {
    ...
    //Buon divertimento xD
    (Il secondo è il codice che scriverebbero alcuni miei amici e compagni di classe xD)

  14. #14
    Guest

    Predefinito

    @binarysun
    non come dici tu cosi
    www.sito.it/?pagina=file
    www.sito.it/?pagina=id

    ma invece devo fare una cosa del genere capito ^^
    www.sito.it/?file=ciao
    www.sito.it/?testo=testo+da+cercare
    www.sito.it/?id=7
    www.sito.it/ o www.sito.it/index.php(paginadefault)
    www.sito.it/?bau o altro dopo il punto interrogativo che non si trova nello switch deve comparire la pagina di errore

    @provaphpprova non capisco cosa centra il tuo esempio con quello che chiedo io...

  15. #15
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Fare , si può fare ma è concetualmente sbagliato.

    www.sito.it/?testo=testo+da+cercare
    Significa che richiami il file index.php e gli passi una variabile che si chiama "testo" e che contiene "testo+da+cercare"

    al massimo puoi fare
    www.sito.it/?pagina =testo&testo=testo+da+cercare
    In questo modo carichi lo script testo.php e gli passi la variabile "testo"
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  16. #16
    Guest

    Predefinito

    perché e sbagliato...^^
    se io volessi fare in questo modo come dovrei impostare il codice php...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •