Autor Zpráva
majja01
Profil
Ahojte mám smyčku while která se opakuje několikrát a mám v ní kod který se má opakovat jenom jednou ale nevím jak to zařídit :( boužel ho nemůžu vyndat. Nevíte jak na to?
Fisir
Profil
Reaguji na majju01:
Počítej si, kolikrát se cyklus provedl a pokud víc než jednou, tu část kódu nenech spustit.

$i = 1;
while(/* … */){
  /* … */
  if($i == 1){
    /* kód, který se má provést jen jednou */
  }
  /* … */
  $i++;
}
majja01
Profil
jo jenomže pokud do toho co se má opakovat jednou dám funkci mail() tak se obsah odešle jenom jednou...
Kcko
Profil
majja01:
Tak ukaž kód, děláš něco špatně.
majja01
Profil
<?php
  session_start();
//  $jmeno = $_POST["jmeno"];
//         $prijmeni = $_POST["prijmeni"];
//         $ulice_cislo_domu = $_POST["ulice_cislo_domu"];
//         $psc = $_POST["psc"];
//         $mesto = $_POST["mesto"];
//         $email = $_POST["email"];
//         $telefon = $_POST["telefon"];
//         $zprava = $_POST["zprava"];
         $a = 1;
         ?>
        <?php 
         include "connect.php"; 
        $celkem = 0;
        $result = mysql_query("SELECT * FROM vyrobek WHERE id IN ('" . implode("', '", array_keys($_SESSION['kosik']))."')");
while($i=mysql_fetch_array($result)):
         $price = $i["price"];
         $ks= $_SESSION["kosik"][$i["id"]];
         $now = $price * $ks;
         $celkem += $now;
         
$mess = '<tr><td><img src="127.0.0.1/mak/img/'.$i['picture'].'" alt="'.$i['name'].'"></td><td>'.$i['name'].'</td><td>'.$ks.'</td><td>200 kč</td><td>400 Kč</td></tr>     
 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td> <td>&nbsp;</td><td>celkově:400 kč + poštovné</td></tr>    
 </table>';
if($a==1) {
 $message = '<h2>Košík</h2><table border="1"><td>náhled</td><td>jméno</td><td>počet ks</td><td>cena za kus</td><td>cena</td></tr>'.$mess.''.$info.'' ;  
 $info = '<h2>Informace o zákazníkovi</h2>
<ul>
    <li>Marian Šimeček</li>
    <li>Sladské 116</li>
    <li>Rožnov pod Radhoštěm</li>
    <li>756 61</li>
</ul>
<h2>Další informace:</h2>
<ul>
    <li>733556604</li>
    <li>mariansimecek@gmail.com</li>
    <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, vitae praesentium cum doloribus officia distinctio labore quisquam assumenda deserunt nostrum laboriosam inventore sequi nisi natus minima amet id dignissimos ut.</li>
</ul>';
$to = "babamakova@gmail.com";
$subject = 'objednavka';
$headers = 'From: YourMail@somewhere.com'."\r\n"; 
$headers .= 'Content-type: text/html; charset=utf-8'."\r\n"; 
if(mail($to, $subject , $message, $headers)) {
echo "odeslán";
}
else {
echo "neodeslán";
}
}



endwhile;
?>
Fisir
Profil
Reaguji na majju01:
A jsi si jistá, že MySQL vrací více než jeden řádek? Mimochodem, v cyklu ti chybí $a++.
majja01
Profil
Fisir:
A jsi si jistá, že MySQL vrací více než jeden řádek?
jistej ;) ano vrací vypisu je to zboží z košíku...

Mimochodem, v cyklu ti chybí $a++.
aha ale i tak to mefunguje
Kcko
Profil
majja01:
Ukaž opravený kód ;)
majja01
Profil
aktuální kod je tento:
<?php
  session_start();
//  $jmeno = $_POST["jmeno"];
//         $prijmeni = $_POST["prijmeni"];
//         $ulice_cislo_domu = $_POST["ulice_cislo_domu"];
//         $psc = $_POST["psc"];
//         $mesto = $_POST["mesto"];
//         $email = $_POST["email"];
//         $telefon = $_POST["telefon"];
//         $zprava = $_POST["zprava"];
         $a = 1;
         ?>
        <?php 
         include "connect.php"; 
        $celkem = 0;
        $result = mysql_query("SELECT * FROM vyrobek WHERE id IN ('" . implode("', '", array_keys($_SESSION['kosik']))."')");
while($i=mysql_fetch_array($result)):
         $price = $i["price"];
         $ks= $_SESSION["kosik"][$i["id"]];
         $now = $price * $ks;
         $celkem += $now;
         
$mess = '<tr><td><img src="127.0.0.1/mak/img/'.$i['picture'].'" alt="'.$i['name'].'"></td><td>'.$i['name'].'</td><td>'.$ks.'</td><td>200 kč</td><td>400 Kč</td></tr>     
 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td> <td>&nbsp;</td><td>celkově:400 kč + poštovné</td></tr>    
 </table>';
if($a==1) {
 $info = '<h2>Informace o zákazníkovi</h2>
<ul>
    <li>Marian Šimeček</li>
    <li>Sladské 116</li>
    <li>Rožnov pod Radhoštěm</li>
    <li>756 61</li>
</ul>
<h2>Další informace:</h2>
<ul>
    <li>733556604</li>
    <li>mariansimecek@gmail.com</li>
    <li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eius, vitae praesentium cum doloribus officia distinctio labore quisquam assumenda deserunt nostrum laboriosam inventore sequi nisi natus minima amet id dignissimos ut.</li>
</ul>';
 $message = '<h2>Košík</h2><table border="1"><td>náhled</td><td>jméno</td><td>počet ks</td><td>cena za kus</td><td>cena</td></tr>'.$mess.''.$info.'' ;  
 
$to = "babamakova@gmail.com";
$subject = 'objednavka';
$headers = 'From: YourMail@somewhere.com'."\r\n"; 
$headers .= 'Content-type: text/html; charset=utf-8'."\r\n"; 
if(mail($to, $subject , $message, $headers)) {
echo "odeslán";
}
else {
echo "neodeslán";
}
}

$a++;

endwhile;
?>
funguje to že se to odešle jenom jednou ale proměná $mess se opakuje jenom jednou
Kcko
Profil
Co to znamená, že se opakuje jenom jednou. Chtěl jsi ukázku, jak v cyklu zařídit, aby se nějaký kód provedl jenom jednou, to Ti ukázal Fisir.

Zkus se vyjadřovat trošku lidštěji (jsem si sice dnes hodně unavený, ale jak do toho koukám, tak prostě nechápu v čem máš problém ..)
Fisir
Profil
Reaguji na majju01:
jistej
Omlouvám se, ale ta přezdívka mě zmátla…

proměná $mess se opakuje jenom jednou
Protože se ti stále přepisuje. Musíš si ji nejdříve někde definovat jako prázdnou a potom do ní jenom připisovat (místo = použiješ .=). Ale i tak se ti odešle jen první řádek, protože email se odesílá při prvním běhu skriptu, a pro odeslání kompletních dat ho potřebuješ odeslat až u konce skriptu:
if($a == mysql_num_rows($result))

Prosím, příště nepoužívej rozšíření mysql_*, je zastaralé a bude v dalších verzích PHP odstraněno. Může použít podobné mysqli.
majja01
Profil
Kcko:
omlouvám se ale blbě se mi to vysvětluje...
prostě když to odešlu tak se mi vypíše jenom jedno zboží...
ale v košíku mám 3...
podlě mě je to kvůli tomu že je funkce mail() v té podmínce a když tam není tak se mi pošlou dva maily a každý obsahuje jiné zboží...


Fisir:
mysqli to je nějaká knihovna ne?? musí se něco stahovat? jak se používá?
moc to nechápu... napíšu to znova :(((
Fisir
Profil
Reaguji na majju01:
musí se něco stahovat?
Ne, ve výchozím nastavení je přítomna v PHP od verze 5.

jak se používá?
Klikl´s na ten odkaz?
majja01
Profil
Fisir:
Klikl´s na ten odkaz?
jo ale nějak moc to nechápu jak se mám např připojit k databázi?

všude kde jsem se díval tak programují objektivně a ne procedurálně...
asi bych se měl naučit OOP... :D
Kcko
Profil
majja01:
Ty bys hlavně měl v cyklu sestavit kompletní výpis těch produktů (přiřazením .=) a odeslat až po skončení cyklu.
Fisir
Profil
Reaguji na majju01:
jak se mám např připojit k databázi?
Objektově:
$mysqli = new mysqli('localhost', 'uživatel', 'heslo', 'databáze');
Procedurálně:
$mysqli = mysqli_connect('localhost', 'uživatel', 'heslo', 'databáze');

programují objektivně a ne procedurálně
Procedurálně to jde také, u všech funkcí mysqli_* jsou popsané oba způsoby.
majja01
Profil
Kcko:
Ty bys hlavně měl v cyklu sestavit kompletní výpis těch produktů (přiřazením .=)
jo to mi funguje ale hlasí mi to chybu Notice: Undefined variable: name in D:\php\mak\scripts\checkout.php on line 22
Fisir:
děkuji
Kcko
Profil
majja01:
Nadefinuj si ji nad začátkem cyklu jako prázdnou.
$promenna = "";
cyklus
{
$promenna .= "neco..";
}
majja01
Profil
Kcko:
jo ted sem na to přišel :))
majja01
Profil
Fisir:
musel sem nahradit to mysql tím mysqli


$mysqli = mysqli_connect("127.0.0.1", "root", "" , "mak");
$query = "select * from vyrobek where type in ($type) ";
        $result = query($query);
        while ($zaznam=mysqli_Fecth_Array($result)):?>
            <a href="detail.php?id=<?php echo $zaznam["id"];?>"> 
                <li style="background:url(img/<?php echo $zaznam["picture"];?>); background-size:contain;">
                    <div class="info">
                           <?php echo $zaznam["name"];?>
                            <span class="right"><?php echo $zaznam["price"];?> Kč</span>
                    </div>
                </li>
            </a>
 <?php endwhile; ?>
Nevíte kde mám chybu?
Fatal error: Call to undefined function query() in D:\php\mak\index.php on line 138
Fisir
Profil
Reaguji na majju01:
Možná by to mělo být mysqli_query().
majja01
Profil
Fisir:
taky nic...
Warning: mysqli_query() expects at least 2 parameters, 1 given in D:\php\mak\index.php on line 138

Fatal error: Call to undefined function mysqli_Fecth_Array() in D:\php\mak\index.php on line 139
han5vk
Profil
Prvý parameter mysqli_query má byť spojenie, čiže v tvojom prípade premenná $mysqli - teda riadok 3 má vyzerať takto:
$result=mysqli_query($mysqli,$query);.
Čo sa týka Fatal Erroru, máš tam preklep. Takéto chyby si stačí preložiť, alebo aspoň prečítať názov volanej funkcie :)
majja01
Profil
han5vk:
už to mám trochu jinak... nový topic

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: