Ik heb een drop down lijst met items uit een database en nu wou ik graag van het geselecteerde de tekst weergeven of via $_POST doorsturen.
Van alles wat ik op het net al kon vinden lijkt niets te werken, javascript, enz...







<div class="water">


<form name="victor" action="mail_handler.php" method="post">   

<div class="mailtop">


 


<div class="mailvan"><h1 class="hmailvan">Van:</h1></div>

<div class="mailvanform">
    
<select name="owner" id="owner">
<?php 
$sql = mysql_query( "SELECT email FROM namen");
while ($row = mysql_fetch_array($sql)){
echo "<option value=\"owner1\">" . $row['email'] . "</option>";




}


?>



</select> 


<input type="hidden" name="country" id="country_hidden">

<script>
  $(document).ready(function() {
    $("#owner").change(function(){
      $("#country_hidden").val(("#itemType_id").find(":selected").text());
    });
  });
</script>
    
    
    </div>

</div>



<div class="mailvoor"><div class="mailvoortitel"><h1 class="hmailvan">Aan:</h1></div>

<div class="mailvoorform">

  <?php
if(isset($_POST['lombi'])){
    
$mailvoor = $_POST['lombi'];    
 
}

if(isset($_POST['variable'])){
    
    $mailonderwerp = $_POST['variable'];
    
 
    
    
  $eind1= mysql_query("SELECT e1 FROM items WHERE item='$mailonderwerp'");
 
 while ($row = mysql_fetch_object($eind1)){   
    
    $titel1=$row->e1;
     
     
     };
    
 $mails1= mysql_query("SELECT email FROM namen WHERE titel='$titel1'");   
    
  while ($row = mysql_fetch_object($mails1)){   
    
    echo $row->email.' ; ';
     
     
     };
    
    
    
  $eind2= mysql_query("SELECT e2 FROM items WHERE item='$mailonderwerp'");
 
 while ($row = mysql_fetch_object($eind2)){   
    
    $titel2=$row->e2;
     
     
     };
    
 $mails2= mysql_query("SELECT email FROM namen WHERE titel='$titel2'");   
    
  while ($row = mysql_fetch_object($mails2)){   
    
    echo $row->email.' ; ';
     
     
     };    
    
    
    
    
   }    

     
    
$vtest = mysql_query("SELECT d1, d2, d3 FROM items WHERE item='$mailonderwerp'");
    
    


while ($row = mysql_fetch_array($vtest)){
    $doen1 = $row['d1']; 
    $doen2 = $row['d2'];
    $doen3 = $row['d3'];
    

}
    

if ($doen1 !=NULL){   
$xtest = mysql_query("SELECT email FROM namen Where titel ='$doen1''");
    
    


while ($row = mysql_fetch_object($xtest)){
  echo '<p><a href=""><div class="namen">'.$row->email.'</div></a></p>'; 
    
   

}
}    
    
   



if ($doen2 !=NULL){
    
    
$ytest = mysql_query("SELECT * FROM $doen2");
    
    


while ($row = mysql_fetch_object($ytest)){
  echo '<p><a href=""><div class="namen">'.$row->naam.'</div></a></p>'; 
    
   
}
}
    
    
   

if ($doen3 !=NULL){
    
    
$ztest = mysql_query("SELECT * FROM $doen3");
    
    


while ($row = mysql_fetch_object($ztest)){
  echo '<p><a href=""><div class="namen">'.$row->naam.'</div></a></p>'; 
    
   
}

}
    

?>    
    



</div>




</div> 

<div class="mailtitel">


<div class="mailtiteltitel"><h1 class="hmailvan">Onderwerp:</h1></div> 


<div class="mailtitelform">

  <?php
if(isset($_POST['variable'])){
    echo 'DERI '.$_POST['variable'];
}

?>
</div>


</div> 


<div class="mailbericht">

<div class="mailberichttitel"><h1 class="hmailvan">Bericht:</h1></div>
    
    <div class="mailberichttitelform">
	
	
	<textarea class="comment" name="comments">
	
	
	
	
	</textarea>
	
	
	</div>   

</div> 





<?php

$myboxes = $_POST['comments'];

$poort = $_POST['selectedText'];



?>

   

<div class="mailsend">

<div class="poper"><input type="submit" name="submit" value="Submit"></div>



</div> 
     

 </form> 


       
</div> 





mail_handler:


<?php
if(isset($_POST['submit'])){
    $to = "[email protected]"; // hier komt normaal het email adres
    $from = $_POST["country"];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $subject = "DERI";
    

    $message = $from . " schreef volgend bericht:" . "\n\n" . $_POST['comments'];


    $headers = "From:" . $from;

    mail($to,$subject,$message,$headers);

    echo "Mail werd met succes verstuurd.";


    echo $abc;

    }
?>
Om een antwoord op je vraag te geven.

Als je een formulier verstuurd via POST, dan staat alle data daarvan in een $_POST-array. Dus een veld met als name 'telefoonnummer' kan je ophalen met $_POST['telefoonnummer'].

Uiteraard kan dit alleen als je het formulier verstuurd hebt via $_POST.
Dit kan je op twee manieren controleren:


<?php
if($_SERVER['REQUEST_METHOD']=="POST") { 
  // Er is ge-POST
} 
?>


Of met:

<?php
if(isset($_POST['telefoonnummer'])){ 
  // Er is ge-POST
} 
?>


Verder zie ik een hoop onvolomenhedne in je code:
- Gebruik van de oude mysql_* functies. Ik raad je aan om op MySQLi of PDO over te stappen. De oude functies van de mysql-driver zijn in PHP 7 verwijderd, en de meeste hostingbedrijven stappen al over op deze nieuwe versie. Dit houdt in dat je script mogelijk op korte termijn niet meer zal werken.

- Je kopieert variabelen: $mailvoor = $_POST['lombi'];
Wat is de reden hiervan? Je kan nu toch al prima $_POST['lombi'] gebruiken?

- Naamgeving van je variabelen en databasevelden: Wat is $doen1 en wat doet $doen2? Dit is verre van duidelijk. Nu weet je het misschien nog, maar later misschien niet meer, en creëer je alleen maar meer bugs in je script door verwarring. Dit geldt ook voor je databasetabel.

- SQL-injection. Je moet NOOIT $_POST, $_GET, $_SESSION, $_COOKIE en $_ENV variabelen onbeschermd in je mysql(i)_query invoeren. Iedereen kan deze manipuleren waarbij ze volledig toegang hebben tot je database. Een groot gevaar dus! Gebruik dus mysqli_real_escape_string() over je variabelen heen.

- Foutafhandeling: Als je query niet werkt, is het raadzaam om hier een foutmelding bij te tonen. Dit kan uitstekend met een if-else afhandeling.

Dank om mee te denken, het probleem zit vooral hier


<select name="owner" id="owner">
<?php 
$sql = mysql_query( "SELECT email FROM namen");
while ($row = mysql_fetch_array($sql)){
echo "<option value=\"owner1\">" . $row['email'] . "</option>";




}


?>



</select> 



Hoe haal ik hier het geselecteerde item uit wanneer het formulier wordt verstuurd.
Ik krijg enkel owner1 als resultaat.
Je selecteert de label met de waarde 'owner1' op dit moment. Haal anders het OwnerID (o.i.d.) erbij op in de querie, en verwerk die in je name-attribuut.
De value is altijd "owner1", dat lijkt mij niet kloppen. Hoe kun je dan onderscheid maken?
Beste heren dit probleem is opgelost met volgende,




<div class="mailvanform">
    
<select name="owner" onchange="setTextField(this)">
<?php 
$sql = mysql_query( "SELECT email FROM namen");
while ($row = mysql_fetch_array($sql)){
echo "<option value=\"owner1\">" . $row['email'] . "</option>";

}
?>


</select> 


<input id="make_text" type = "hidden" name = "make_text" value = "" />
<script type="text/javascript">
    function setTextField(ddl) {
        document.getElementById('make_text').value = ddl.options[ddl.selectedIndex].text;
    }
</script>

    
    
    </div>





en verder


$text = $_POST["make_text"];


Wat MySQLi betreft, dit werkt niet bij het hostingbedrijf waar ik mee werk,PDO heb ik nog niet getest maar dat komt nog.

mysqli_real_escape_string() had ik reeds ergens gezien en daar zal ik mij nu even op storten.

Nogmaals dank

Wat MySQLi betreft, dit werkt niet bij het hostingbedrijf waar ik mee werk

Dit kan ik mij niet indenken. Voor de duidelijkheid: Dit is een een functie-bibliotheek, en niet een speciale database. Hoe merk jij dan dat MySQLi niet werkt?

Verder snap ik niet waarom je die JavaScript gebruikt? Je kan toch prima zoals ik en Thomas aangeven je option aanpassen met een uniek ID, in plaats van een hardcoded string 'owner1'. Je draait nu heel erg om de juiste oplossing heen i.p.v. de correcte oplossing te benutten.
Je zal wel gelijk hebben maar ik zou momenteel niet weten hoe dit te doen.

Bedoel je een ID in de database, een array of nog iets anders?

In je tabel 'namen' staat hopelijk toch wel meer velden dan enkel een mailadres? Ik hoop een bepaalde uniek veld die een gebruiker omschrijft (er kunnen meerdere Piet's bestaan bijv.). Ik neem aan een ID-nummer of iets dergelijks?

En anders kan je toch ook je mailadres gebruiken in je name-attribuut? Persoonlijk zelf ben ik er keihard op tegen om mailadressen publiekelijk te tonen in select-boxes. Privacy en veiligheid tegen mailadres-harvesters voor spamming.
De mailadressen en spam daar had ik nog niet aan gedacht alhoewel dit niet voor een website of zo bedoeld is enkel een paar mensen onder elkaar, maar toch even over nadenken.

In de tabel namen staat geen ID, wel functie, voor en achternaam.

Dan zou ik maar snel een uniek ID-veld aanmaken (met auto-increment), dan kan je die mensen nog eens koppelen aan een andere tabel.

Reageren