webForumDet fria alternativet

hjärnsläpp - behöver hjälp med att få med id

PHP

21 svar · 1 730 visningar · startad av maweer

Medlem sedan juli 2012123 inlägg
Frågan#1

Jag har fått fullständigt hjärnsläpp

Jag har 5 checkboxar som jag läser av med

if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1)

När alla fem checkboxar är checked så skickar den ett mail...så långt funkar det bra!
Men, jag vill ha med variblerna för det unika id:et i mailet, så jag tänkte att jag skulle göra så här

if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1) {

$sql = "SELECT * FROM eva_spelningar";
while ($rad = mysql_fetch_array($sql)) {
		$id = $rad['id'];
		$datum = $rad['datum'];
		$plats = $rad['plats'];		
	}

   $to = "mail@exempel.com";
   $subject = $plats . ' ' . $datum . ' TEXT';
   $message="Okej:$plats, $datum\n http://exempel.se";
   $from = "postmaster@exempel.se";
   $headers .= "Reply-To: $visitor_email \r\n";
   $headers = "From:" . $from;
   mail($to,$subject,$message,$headers);

Men, det vill sig inte. Var skall jag lägga in min $_GET['id'] någonstans?
Jag har provat att lägga det både före och efter den har "läst" av checkboxarna, men det vill sig inte

Medlem sedan aug. 2008815 inlägg
#2

Förstår inte riktigt. Har du /../.php?id=blblb i din url och du vill bara mejla med det idt?

 $message="id är:".$_GET['id']." \n Okej:$plats, $datum\n http://exempel.se ";

Eller vill du ta med varje id från databasen?

 $message="Okej:$plats, $datum, $id\n http://exempel.se";

Eller menar du ngt annat?

Medlem sedan juli 2012123 inlägg
#3

Förlåt jag kanske förklarade lite otydligt :)
Jag har en form och varje ny post innehåller lite info plus fem olika checkboxar med fem olika namn.
Jag "läser" av mina checkboxar med

if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1)

när man trycker på en "knapp" som jag döpt till "spara"

Varje ny post får ju ett id, så jag vill få med variablerna $datum och $plats från just det id:et som checkboxarna "tillhör" i mailet.

Problemet kan nog vara att min if-sats läser av alla checkboxar på hela sidan och att den inte blir associerat till något speciellt id, så jag behöver få in $_GET['id'] någonstans...förmodligen i min if-sats, men jag kommer inte på hur. För om jag lägger in isset($_GET['id']) i min if-sats, så "läser" den inte av checkboxarna

Medlem sedan aug. 2008815 inlägg
#4

Jag förstår fortfarande inte... Är det detta du vill?

$id=$_GET['id']:
$sql = "SELECT * FROM eva_spelningar WHERE id=$id";

EDIT

Medlem sedan juni 20019 519 inlägg
#5

noshornin skrev:

Jag förstår fortfarande inte... Är det detta du vill?

$id=$_GET['id']:
$sql = "SELECT * FROM eva_spelningar WHERE id='$id'";

Nu är jag rätt säker på att ID inte är en sträng i maweer fall.

Medlem sedan juli 2012123 inlägg
#6

Jag trodde att det var så också och försökte med

$id=$_GET['id']

och med $rad['id'] och en väldigt långsökt

$id=$_GET['id'] == $rad['id'];

Men, inget av det funkar

Kommer faktiskt inte på något annat som gör att man får med informationen från den valda posten i ett mail.

Är det något galet och skumt med denna koden kanske, som gör att infon inte följer med?

$subject = $plats . ' ' . $datum . ' TEXT';
$message="Okej:$plats, $datum\n http://exempel.se";
Medlem sedan juni 20019 519 inlägg
#7

Du vill väl hämta spelningen med samma id som $_GET['id']? Fattar inte vad du försöker göra om jag skall vara ärlig...

Medlem sedan juli 2012123 inlägg
#8

Hahaha ojdå, är jag så otydlig :)
Mja, jag försöker eller rättare sagt jag trodde att jag kunde hämta informationen från en spelning med $_GET['id']

Jag har bifogat en skärmdump, så jag hoppas att det blir lite tydligare.
För varje gång någon kryssar i checkboxen så trycker dom spara.
När den sista checkboxen har blivit ikryssad och någon trycker spara, så skickas automatiskt ut ett mail. Men, i det mailet vill jag ha med datum och plats i både ämnesrad och meddelandefält som stämmer överrens med den posten man tryckt spara på, och det är där det fallerar.

Ex. alla 5 checkboxarna i Bromölla-spelningen har blivit "Checked", då vill jag ha med datumen och platsen (i detta fallet Bromölla, 5-jan-2013) i mailet.
Mailet skickas...men jag får inte med den infon.
Likadant gäller för Ystad-spelningen och alla övriga poster som finns :)

skarmdump.gif
Medlem sedan aug. 2008815 inlägg
#9

Den uppenbara fråga är då om idt finns i din url? Alltså om du skriver echo $_GET['id'] på den sidan du skickar mejlet på. Skrivs idt ut då?

Annars måste du skriva:

<form action="dinsida.se/ngnfil.php?id=ditt id" method="post">
/.../ alla checkboxar osv
</form>

på sidan med alla checkboxar osv

Sen kan du använda koden jag skrev tidigare:

$id=$_GET['id']:
$sql = "SELECT * FROM eva_spelningar WHERE id=$id";

för att hämta ut rätt värden till mejlutskicket...

Medlem sedan juni 20019 519 inlägg
#10

din if fråga säger att alla checkboxar måste vara markerade (så du vet det). Och som noshornin skriver, du vill ju inte hämta upp alla eva_spelningar utan bara det specifika spelningen med det ID du skickar in.

Medlem sedan juli 2012123 inlägg
#11

Nä, det verkar inte finnas med, för det skrivs inte ut
Men, jag har allting på samma sida. Då blir det väl två <form>-element, vilket inte är tillåtet...väl?

<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);

include "conn.php"; 

$tony = isset($_POST['tony']) ? 1 : 0; 
$ulf = isset($_POST['ulf']) ? 1 : 0; 
$carina = isset($_POST['carina']) ? 1 : 0; 
$anders = isset($_POST['anders']) ? 1 : 0; 
$magnus = isset($_POST['magnus']) ? 1 : 0;

if(isset($_POST['Spara'])) { // om knappens namn är spara  
$sql = " 
      UPDATE eva_spelningar 
         SET tony = '{$tony}',
             ulf = '{$ulf}',
             carina = '{$carina}',
             anders = '{$anders}',
             magnus = '{$magnus}' 
       WHERE id = {$_POST['id']}
    ";

    mysql_query($sql) or die(mysql_error()); 
    
    header("Location: form2.php?id=".$_POST['id']);

// Kolla igenom checkboxar längst ner och skicka mail
if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1) {

$id=$_GET['id'];
$sql = "SELECT * FROM eva_spelningar WHERE id='$id'";
while ($rad = mysql_fetch_array($sql)) {
		$id = $rad['id'];
		$datum = $rad['datum'];
		$plats = $rad['plats'];
	}

   $to = "mail.exempel.se";
   $subject = $plats . ' ' . $datum . ' TEXT';
   $message="Okej:$plats, $datum\n http://exempel.se";
   $from = "from@exempel.se";
   $headers .= "Reply-To: $visitor_email \r\n";
   $headers = "From:" . $from;
   mail($to,$subject,$message,$headers);  
    
  } 

} 
//Här slutar kollen av checkboxar och formen börjar
?> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="sv">
  
  <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    <title>Eva Evenemang</title> 

<style type="text/css"> 
<!-- 

--> 
</style>

</head> 
<body> 

<div id="form">
      <form id="form1" method="post" action="spara_ner_i_DB.php" enctype="multipart/form-data" class="padding">
        <input type="hidden" name="MAX_FILE_SIZE" value="12343000" />
        <fieldset>
          <label>Tid <span class="red">(ex. 13:00)</span><br />
            
            <input type="text" name="tid" style="width: 160px;" /></label><br />
          
          <label>Datum <span class="red">(13-feb-2012)</span>:<br />
            
            <input type="text" name="datum" style="width: 160px;" /></label><br />
          
          <label>Var:<br />
           
            <input id="suggest1" name="plats" style="width: 160px; color:#000000; border:solid 1px #999999;" /></label><br />

	  <label>Typ av fest:<br />
            
            <input type="text" name="fest" style="width: 160px;" /></label><br />

	  <label>Kundens e-mail:<br />
            
            <input type="text" name="kundmail" style="width: 160px;" /></label><br />

	  <label>Antal personer:<br />
            
            <input type="text" name="antal" style="width: 45px;" /></label><br />

	  <label>Kund kontaktad:<br />
            
            <select name="kundkontakt">
		<option value="Nej">Nej</option>
		<option value="Ja">Ja</option>
	    </select></label><br />
          
          <label>Detaljerad beskrivning:<br />
            <textarea name="beskrivning" cols="35" rows="6"></textarea></label><br />
          
          <br />
          <input type="file" name="karta" />&nbsp;<input type="submit" name="klar" value="Skicka" />
          
          
        </fieldset>
      </form>
    </div>
    
    <h2>Alla evenemang</h2>

<?php

    $sql = mysql_query("SELECT * FROM eva_spelningar ORDER BY id DESC"); 

    if (mysql_num_rows($sql) == 0)  {
      echo "För tillfället finns inga evenemang";
    }

    while ($rad = mysql_fetch_array($sql)) { 

      $id = htmlspecialchars($rad['id']);
      $tid = htmlspecialchars($rad['tid']); 
      $datum = htmlspecialchars($rad['datum']);
      $plats = htmlspecialchars($rad['plats']);

      echo("<form method=\"post\" action=\"{$_SERVER['PHP_SELF']}\">");

      echo("<input type=\"hidden\" name=\"id\" value=\"{$rad['id']}\" />");

      echo('<table class="gridtable">'); 
      echo("<tr>");
      echo('<th class="datum">Datum</th>'); 
      echo('<th class="tid">Tid</th>');
      echo('<th class="plats">Plats</th>');
      echo('<th class="fest">Typ av fest</th>');
      echo('<th class="antal">Antal pers</th>');
      echo('<th class="kundkontakt">Kund kontaktad</th>');

      echo("<tr>");

      echo("<td>");
      echo($rad["datum"]); 
      echo("</td>");

      echo("<td>"); 
      echo($rad["tid"]);
      echo("</td>");

      echo("<td>"); 
      echo($rad["plats"]);
      echo("</td>");

      echo("<td>");
      echo($rad["fest"]); 
      echo("</td>");

      echo("<td>"); 
      echo($rad["antal"]);
      echo("</td>");

      echo("<td>"); 
      echo($rad["kundkontakt"]);
      echo("</td>");

      echo('<td> <input type="checkbox" name="tony" value="tony"' . ($rad['tony']==1 ? ' checked="checked"' : '') . ' /> </td>');

      echo('<td> <input type="checkbox" name="ulf" value="ulf"' . ($rad['ulf']==1 ? ' checked="checked"' : '') . ' /> </td>');

      echo('<td> <input type="checkbox" name="carina" value="carina"' . ($rad['carina']==1 ? ' checked="checked"' : '') . ' /> </td>');

      echo('<td> <input type="checkbox" name="anders" value="anders"' . ($rad['anders']==1 ? ' checked="checked"' : '') . ' /> </td>');

      echo('<td> <input type="checkbox" name="magnus" value="magnus"' . ($rad['magnus']==1 ? ' checked="checked"' : '') . ' /> </td>');
      echo('<td> <input type="submit" value="Spara" name="Spara" /> </td>');

      echo("</tr>");

      echo("</table>");

      echo('</form>');
 }

?>
    
  </body> 
</html>

spara_ner_i_DB.php heter egentligen något annat :)

voigtann1 skrev:

din if fråga säger att alla checkboxar måste vara markerade (så du vet det). Och som noshornin skriver, du vill ju inte hämta upp alla eva_spelningar utan bara det specifika spelningen med det ID du skickar in.

Gör den? Men, den skickar ju ett mail (dock utan den info som jag vill ha med :P) trots att där finns checkboxar på övriga poster som inte är markerade

Medlem sedan juni 20019 519 inlägg
#12

Om du använder metoden POST så måste du hämta upp innehålle med $_POST, om du använder dig av GET (querystrings, eller metoden GET) så är det $_GET du använder dig av.

Medlem sedan aug. 2008815 inlägg
#13

Men grejen är att du sparar idt i en hidden textfield?

Allt du behöver göra då är ju att skriva:

$id =$_POST['id'];
$sql = "SELECT * FROM eva_spelningar WHERE id=$id";

läs på om post och get requests mannen ;)

Medlem sedan juli 2012123 inlägg
#14

voigtann1 skrev:

Om du använder metoden POST så måste du hämta upp innehålle med $_POST, om du använder dig av GET (querystrings, eller metoden GET) så är det $_GET du använder dig av.

Jo, jag har en förkärlek för att blanda ihop detta tyvärr, fast egentligen så vet jag ju om det...hmmm

noshornin skrev:

Men grejen är att du sparar idt i en hidden textfield?

Allt du behöver göra då är ju att skriva:

$id =$_POST['id'];
$sql = "SELECT * FROM eva_spelningar WHERE id=$id";

Skall min hidden textfield vara här?

<form id="form1" method="post" action="write2.php" enctype="multipart/form-data" class="padding">
        <input type="hidden" name="MAX_FILE_SIZE" value="12343000" />
	<input type="hidden" name="hiddenid" id="hiddenid"  value="<?php $_GET['id'] ?>" />

eller här? För inget av det verkar funka

 echo('<td> <input type="submit" value="Spara" name="Spara" /></td>');
     ("<input type=\"hidden\" name=\"hiddenid\" id=\"hiddenid\"  value=\"{$_GET['id']}\" />");

noshornin skrev:

läs på om post och get requests mannen ;)

Hahaha jo, jag får nog göra det...fast jag blir så jäkla förvirrad ibland när jag läser, måste nog hitta någon som kan förklara på ett enkelt sätt

Jag provade med denna också

 echo("<input type=\"hidden\" name=\"id\" value=\"{$rad['id']}\" />");
Medlem sedan aug. 2008815 inlägg
Medlem sedan juni 20019 519 inlägg
#16

Skall min hidden textfield vara här?

Du kan ju ha det, som noshornin säger, lär dig POST/GET, bli betydligt enklare att förstå vad som är fel.

Du måste nog också lära dig indentera din kod för att förstå vad som händer:

<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);
include "conn.php"; 

if(isset($_POST['Spara'])) { // om knappens namn är spara  
	$tony = isset($_POST['tony']) ? 1 : 0; 
	$ulf = isset($_POST['ulf']) ? 1 : 0; 
	$carina = isset($_POST['carina']) ? 1 : 0; 
	$anders = isset($_POST['anders']) ? 1 : 0; 
	$magnus = isset($_POST['magnus']) ? 1 : 0;
	$sql = "UPDATE eva_spelningar 
         SET tony = '{$tony}',
             ulf = '{$ulf}',
             carina = '{$carina}',
             anders = '{$anders}',
             magnus = '{$magnus}' 
       WHERE id = {$_POST['id']}
    ";

    mysql_query($sql) or die(mysql_error()); 

    header("Location: form2.php?id=".$_POST['id']);

	// Kolla igenom checkboxar längst ner och skicka mail
	if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1) {
		$id=$_GET['id'];
		$sql = "SELECT * FROM eva_spelningar WHERE id='$id'";
		while ($rad = mysql_fetch_array($sql)) {
			$id = $rad['id'];
			$datum = $rad['datum'];
			$plats = $rad['plats'];
		}

		$to = "mail.exempel.se";
		$subject = $plats . ' ' . $datum . ' TEXT';
		$message="Okej:$plats, $datum\n http://exempel.se";
		$from = "from@exempel.se";
		$headers .= "Reply-To: $visitor_email \r\n";
		$headers = "From:" . $from;
		mail($to,$subject,$message,$headers);  
	} 
} 
//Här slutar kollen av checkboxar och formen börjar
?>

Är din kod....

du säger (om jag förstå PHP rätt):

header("Location: form2.php?id=".$_POST['id']);

skicka till form2.php dvs ingen kod efter detta kommer köras.

PS:
Flyttade dina variabler lite med....

Du måste också lära dig återanvända kod lite:

<?php 
ini_set('display_errors',1);
error_reporting(E_ALL);
include "conn.php"; 

if(isset($_POST['Spara'])) { // om knappens namn är spara  
	$tony	= isset($_POST['tony']) ? 1 : 0; 
	$ulf	= isset($_POST['ulf']) ? 1 : 0; 
	$carina	= isset($_POST['carina']) ? 1 : 0; 
	$anders	= isset($_POST['anders']) ? 1 : 0; 
	$magnus	= isset($_POST['magnus']) ? 1 : 0;
	$id		= $_POST['id'];
	$sql = "UPDATE eva_spelningar
			SET tony = '{$tony}', ulf = '{$ulf}', carina = '{$carina}', anders = '{$anders}', magnus = '{$magnus}'
			WHERE id = {$id}";

    mysql_query($sql) or die(mysql_error()); 

	// Kolla igenom checkboxar längst ner och skicka mail
	if($tony && $ulf && $carina && $anders && $magnus) {

		$sql = "SELECT * FROM eva_spelningar WHERE id = {$id}";
		while ($rad = mysql_fetch_array($sql)) {
			$datum = $rad['datum'];
			$plats = $rad['plats'];
		}

		$to = "mail.exempel.se";
		$subject = $plats . ' ' . $datum . ' TEXT';
		$message="Okej:$plats, $datum\n http://exempel.se";
		$from = "from@exempel.se";
		$headers = "From:" . $from;
		mail($to, $subject, $message, $headers);  
	} 
    header("Location: form2.php?id=".$id);
} 
//Här slutar kollen av checkboxar och formen börjar
?>

gissar jag på att det är detta du vill göra?

du är lite väl glad i att kopiera och klistra in koder utan att kontrollera att det kommer fungera, $headers hade du skrivit med .= vilket känns som att det borde crasha för dig om du kommer ner så långt ner i din kod.

Medlem sedan juli 2012123 inlägg
#17

Tusen tack för länkarna!

Tack voigtann1, jag får kolla på det ikväll, då jag måste sticka till jobbet

Medlem sedan juli 2012123 inlägg
#18

Oh yes där fick jag allt i mailet :)
Men, det blir den första postens varibaler som följer med och tyvärr inte den som jag har checkat för checkboxarna.

I min ursprungskod så gjorde jag så här

    echo('<td> <input type="submit" value="Spara" name="Spara" /></td>');
      echo("<input type=\"hidden\" name=\"id\" value=\"{$rad['id']}\" />");

      echo("</tr>");

      echo("</table>");

      echo('</form>');
 }

if(isset($_POST['tony']) && isset($_POST['ulf']) && isset($_POST['carina']) && isset($_POST['anders']) && isset($_POST['magnus'])==1) {

$id=$_POST['id'];
$sql = "SELECT * FROM eva_spelningar WHERE id='$id'";
while ($rad = mysql_fetch_array($sql)) {
		$id = $rad['id'];
		$datum = $rad['datum'];
		$plats = $rad['plats'];		
	}

   $to = "mail.exempel.se";
   $subject = $plats . ' ' . $datum . ' TEXT';
   $message="Okej:$plats, $datum\n http://exempel.se";
   $from = "from@exempel.se";
   $headers .= "Reply-To: $visitor_email \r\n";
   $headers = "From:" . $from;
   mail($to,$subject,$message,$headers);  
    
  } 
?>
  </body> 
</html>

Alltså la koden efter alla checkboxarna och la en ("<input type=\"hidden\" name=\"id\" value=\"{$rad['id']}\" /> efter min submit och det blev samma grej som nu med din kod. Den plockade variablerna från första postens id.
Så det verkar ju som om den inte får med något id.

header("Location: form2.php?id=".$_POST['id']); ligger på samma sida. Skulle kanske använd mig av $_SERVER['PHP_SELF'] isället.

Hehehe jo, jag är rätt glad för att kopiera och klistra in. Oftast förstår jag vad som händer och vad som menas och jag testar åtskilliga gånger och olika varianter också.
Får jag inte rätt på det försöker jag felsöka själv genom att spana igenom hundratals sidor och lägga flera, flera timmar på att försöka läsa mig till och förstå felet innan jag ställer mina konstiga frågor här.
95% av gångerna fixar jag till felen själva, men denna lyckades jag inte lösa

Medlem sedan juni 20019 519 inlägg
#19

nu hänger jag inte med alls längre vad du försöker/vill göra... $headers koden känns fortfarande grymt fel ut med att ha . där... du har ju redan en hidden fält för dina idn så att lägga till ett till kommer knappast hjälpa dig... och är ditt ID en sträng eller ett tal? SQL frågan är nog fel där... om inte din INSERT fråga är fel också. Tips är att kanske inte kopiera kod från oss från wF utan se det som exempelkod och rätta till det som saknas för att få in det du vill ha.

Medlem sedan juli 2012123 inlägg
#20

Nu blev jag också förvirrad

Jag testade din kod igen och då fick jag
Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in - line 23
Notice: Undefined variable: plats - line 29
Notice: Undefined variable: datum - line 29
Notice: Undefined variable: plats - line 30
Notice: Undefined variable: datum - line 30
Warning: Cannot modify header information - headers already sent by (output started at /eva_spelningar/form2.php:23) in /eva_spelningar/form2.php on line 35

När jag trycker på spara, vilket jag inte fick innan

289 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
143 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
142 ms — ändringar (db)